欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java裁剪壓縮PNG圖片,透明背景色變黑的解決方案

 更新時間:2021年11月15日 09:59:45   作者:新成同學  
這篇文章主要介紹了Java裁剪壓縮PNG圖片,透明背景色變黑的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

Java裁剪壓縮PNG圖片,透明背景色變黑

import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Transparency;
import java.awt.image.BufferedImage;
import java.io.File; 
import javax.imageio.ImageIO;
 
/**
 * 圖片工具類
 */
public class ImageUtil {
 
	/**
	 * 裁剪PNG圖片工具類
	 * 
	 * @param fromFile
	 *            源文件
	 * @param toFile
	 *            裁剪后的文件
	 * @param outputWidth
	 *            裁剪寬度
	 * @param outputHeight
	 *            裁剪高度
	 * @param proportion
	 *            是否是等比縮放
	 */
	public static void resizePng(File fromFile, File toFile, int outputWidth, int outputHeight,
			boolean proportion) {
		try {
			BufferedImage bi2 = ImageIO.read(fromFile);
			int newWidth;
			int newHeight;
			// 判斷是否是等比縮放
			if (proportion) {
				// 為等比縮放計算輸出的圖片寬度及高度
				double rate1 = ((double) bi2.getWidth(null)) / (double) outputWidth + 0.1;
				double rate2 = ((double) bi2.getHeight(null)) / (double) outputHeight + 0.1;
				// 根據(jù)縮放比率大的進行縮放控制
				double rate = rate1 < rate2 ? rate1 : rate2;
				newWidth = (int) (((double) bi2.getWidth(null)) / rate);
				newHeight = (int) (((double) bi2.getHeight(null)) / rate);
			} else {
				newWidth = outputWidth; // 輸出的圖片寬度
				newHeight = outputHeight; // 輸出的圖片高度
			}
			BufferedImage to = new BufferedImage(newWidth, newHeight, BufferedImage.TYPE_INT_RGB);
			Graphics2D g2d = to.createGraphics();
			to = g2d.getDeviceConfiguration().createCompatibleImage(newWidth, newHeight,
					Transparency.TRANSLUCENT);
			g2d.dispose();
			g2d = to.createGraphics();
			@SuppressWarnings("static-access")
			Image from = bi2.getScaledInstance(newWidth, newHeight, bi2.SCALE_AREA_AVERAGING);
			g2d.drawImage(from, 0, 0, null);
			g2d.dispose();
			ImageIO.write(to, "png", toFile);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
 
	/**
	 * 測試
	 */
	public static void main(String[] args) throws Exception {
		File fromFile = new File("c:/wxcking/pic/D77E37CB.png");
		File toFile = new File("c:/wxcking/pic/D77E37CB_thumb.png");
		resizePng(fromFile, toFile, 100, 100, false);
	}
}

java ImageIO.write圖片上傳變色及背景變黑

public void getImage(HttpServletRequest request, HttpServletResponse response) throws Exception {
        response.setDateHeader("Expires", 0);
        response.setHeader("Cache-Control", "no-store, no-cache, must-revalidate");
        response.addHeader("Cache-Control", "post-check=0, pre-check=0");
        response.setHeader("Pragma", "no-cache");
        response.setContentType("image/jpeg");
        String uri = request.getRequestURI();
        String imgPath = uri.replace("/ofc/rest/img", "");
        File image = new File(imgPath);
        BufferedImage bi = ImageIO.read(image);
        BufferedImage newBi = resizeImagePng(bi.getWidth(), bi.getHeight(),bi);
        Graphics2D g2d = newBi.createGraphics();
        g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, 1.0f));
        ServletOutputStream out = response.getOutputStream();
        g2d.drawImage(newBi,0,0,null);
        ImageIO.write(newBi,"png", out);
        //ImageIO.write(bi, "jpg", out);
        //saveAs(bi,"jpg", out);
    }
public static BufferedImage resizeImagePng(int x, int y, BufferedImage bfi) {
        BufferedImage bufferedImage = new BufferedImage(x, y, BufferedImage.TYPE_INT_ARGB);
        bufferedImage.getGraphics().drawImage(
                bfi.getScaledInstance(x, y, Image.SCALE_SMOOTH), 0, 0, null);
        return bufferedImage;
    }
public static void saveAs(BufferedImage image, String formatName, ServletOutputStream outFile) throws IOException {
        if (formatName.equalsIgnoreCase("jpg") || formatName.equalsIgnoreCase("jpeg")) {
            BufferedImage tag = new BufferedImage(image.getWidth(), image.getHeight(), BufferedImage.TYPE_INT_BGR);
            Graphics g = tag.getGraphics();
//            Graphics2D gg=tag.createGraphics();
//            tag = gg.getDeviceConfiguration().createCompatibleImage(image.getWidth(), image.getHeight(),Transparency.TRANSLUCENT);
//            gg.dispose();
//            gg = tag.createGraphics();
//            gg.drawImage(image, 0, 0,null);
            g.drawImage(image, 0, 0,image.getWidth(), image.getHeight(),image.getGraphics().getColor(), null); // 繪制縮小后的圖
            g.dispose();
            image = tag;
        }
        ImageIO.write(image, formatName, outFile);
    }

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • 詳解JNI到底是什么

    詳解JNI到底是什么

    JNI是Java Native Interface的縮寫,通過使用 Java本地接口書寫程序,可以確保代碼在不同的平臺上方便移植。從Java1.1開始,JNI標準成為java平臺的一部分,它允許Java代碼和其他語言寫的代碼進行交互
    2021-06-06
  • springboot整合 xxl-job的項目實踐

    springboot整合 xxl-job的項目實踐

    XL-JOB是一個分布式任務調(diào)度平臺,用于解決分布式系統(tǒng)中的任務調(diào)度和管理問題,它包括調(diào)度中心、執(zhí)行器和Web管理控制臺,本文就來介紹一下springboot整合 xxl-job的項目實踐,感興趣的可以了解一下
    2024-09-09
  • 基于Java實現(xiàn)連連看游戲的示例代碼

    基于Java實現(xiàn)連連看游戲的示例代碼

    連連看游戲顧名思義就是找出具有關聯(lián)關系的事物并進行相應處理。本文將用java語言實現(xiàn)這一經(jīng)典游戲,采用了swing技術進行了界面化處理,感興趣的可以了解一下
    2022-09-09
  • Java中的LinkedList底層源碼分析

    Java中的LinkedList底層源碼分析

    這篇文章主要介紹了Java中的LinkedList底層源碼分析,底層基于雙向鏈表,往LinkedList中間插入元素時,不需要移動大量的元素,只需要修改前后節(jié)點的指針,速度快,需要的朋友可以參考下
    2023-12-12
  • Spring 使用Validation 驗證框架的問題詳解

    Spring 使用Validation 驗證框架的問題詳解

    Spring Boot在內(nèi)部通過集成hibernate-validation已經(jīng)實現(xiàn)了JSR-349驗證規(guī)范接口,在Spring Boot項目中只要直接使用就行了。 一般用在Controller中用于驗證前端傳來的參數(shù)。這篇文章給大家介紹Spring Validation 驗證框架的相關知識,感興趣的朋友一起看看吧
    2021-07-07
  • Springboot實現(xiàn)Shiro整合JWT的示例代碼

    Springboot實現(xiàn)Shiro整合JWT的示例代碼

    這篇文章主要介紹了Springboot實現(xiàn)Shiro整合JWT的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-12-12
  • Ribbon負載均衡算法原理與使用介紹

    Ribbon負載均衡算法原理與使用介紹

    在微服務中,對服務進行拆分之后,必然會帶來微服務之間的通信需求,而每個微服務為了保證高可用性,又會去部署集群,那么面對一個集群微服務進行通信的時候,如何進行負載均衡也是必然需要考慮的問題
    2022-09-09
  • 詳解mybatis批量插入10萬條數(shù)據(jù)的優(yōu)化過程

    詳解mybatis批量插入10萬條數(shù)據(jù)的優(yōu)化過程

    這篇文章主要介紹了詳解mybatis批量插入10萬條數(shù)據(jù)的優(yōu)化過程,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-04-04
  • SpringBoot實現(xiàn)多文件上傳的詳細示例代碼

    SpringBoot實現(xiàn)多文件上傳的詳細示例代碼

    文件上傳中并沒有什么太多的知識點,下面這篇文章主要給大家介紹了關于SpringBoot實現(xiàn)多文件上傳的詳細示例,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-03-03
  • 深入講解Java?synchronized的核心原理

    深入講解Java?synchronized的核心原理

    這篇文章主要為大家詳細介紹了Java中synchronized的核心原理以及簡單的用法,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2023-07-07

最新評論