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

2022-01-24 0 368
目录

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;
				// 根据缩放比率大的进行缩放控制
				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);
    }

以上为个人经验,希望能给大家一个参考,也希望大家多多支持。

:本文采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可, 转载请附上原文出处链接。
1、本站提供的源码不保证资源的完整性以及安全性,不附带任何技术服务!
2、本站提供的模板、软件工具等其他资源,均不包含技术服务,请大家谅解!
3、本站提供的资源仅供下载者参考学习,请勿用于任何商业用途,请24小时内删除!
4、如需商用,请购买正版,由于未及时购买正版发生的侵权行为,与本站无关。
5、本站部分资源存放于百度网盘或其他网盘中,请提前注册好百度网盘账号,下载安装百度网盘客户端或其他网盘客户端进行下载;
6、本站部分资源文件是经压缩后的,请下载后安装解压软件,推荐使用WinRAR和7-Zip解压软件。
7、如果本站提供的资源侵犯到了您的权益,请邮件联系: 442469558@qq.com 进行处理!

猪小侠源码-最新源码下载平台 Java教程 Java裁剪压缩PNG图片,透明背景色变黑的解决方案 http://www.20zxx.cn/297568/xuexijiaocheng/javajc.html

猪小侠源码,优质资源分享网

常见问题
  • 本站所有资源版权均属于原作者所有,均只能用于参考学习,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担
查看详情
  • 最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,建议提前注册好百度网盘账号,使用百度网盘客户端下载
查看详情

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务