Java裁剪压缩PNG图片,透明背景色变黑的解决方案

网友投稿 758 2022-09-15


Java裁剪压缩PNG图片,透明背景色变黑的解决方案

目录java裁剪压缩PNG图片,透明背景色变黑java ImageIO.write图片上传变色及背景变黑

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(frztoXJomFile);

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;

// 根据缩放比率大的进行缩放控制

double rate = rate1 < rate2 ? rate1 : rate2;

newWidth = (int) (((double) bi2.getWidth(null)) / rate);

newHeight = (int) (((double) bi2.getHeight(null)) / rate);

} else {

newWidth = outputWidth; // 输出的图片宽度

newHeight = outputHhttp://eight; // 输出的图片高度

}

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.setDaztoXJteHeader("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);

}


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:卡卡笔记之Linux网络管理----命令详解(linux启动网卡命令)
下一篇:12月的日志 故事篇 消极篇 积极篇(十一月日志)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~