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)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Springboot實現(xiàn)Shiro整合JWT的示例代碼
這篇文章主要介紹了Springboot實現(xiàn)Shiro整合JWT的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-12-12詳解mybatis批量插入10萬條數(shù)據(jù)的優(yōu)化過程
這篇文章主要介紹了詳解mybatis批量插入10萬條數(shù)據(jù)的優(yōu)化過程,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-04-04SpringBoot實現(xiàn)多文件上傳的詳細示例代碼
文件上傳中并沒有什么太多的知識點,下面這篇文章主要給大家介紹了關于SpringBoot實現(xiàn)多文件上傳的詳細示例,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下2023-03-03