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

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

相关文章

  • Java文件、文件夹权限修改的两种方法

    Java文件、文件夹权限修改的两种方法

    这篇文章主要给大家介绍了关于Java文件、文件夹权限修改的两种方法,文中通过示例代码介绍的非常详细,对大家学习或者使用Java具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-08-08
  • SpringBoot+ECharts是如何实现数据可视化的

    SpringBoot+ECharts是如何实现数据可视化的

    今天带大家学习的是关于Java的相关知识,文章围绕着SpringBoot+ECharts怎么实现数据可视化展开,文中有非常详细的介绍及代码示例,需要的朋友可以参考下
    2021-06-06
  • JavaWeb搭建网上图书商城毕业设计

    JavaWeb搭建网上图书商城毕业设计

    这篇文章主要介绍了JavaWeb搭建网上图书商城框架,特别适合正在为网上商城毕业设计烦恼的同学,需要的朋友可以参考下
    2015-11-11
  • Java实现两个随机数组合并进行排序的方法

    Java实现两个随机数组合并进行排序的方法

    本文主要介绍了Java实现两个随机数组合并进行排序的方法,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • java框架之maven是用来做什么的

    java框架之maven是用来做什么的

    这篇文章主要介绍了java之maven是用来做什么的,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • Java同步框架AbstractQueuedSynchronizer详解

    Java同步框架AbstractQueuedSynchronizer详解

    本篇文章主要介绍了Java同步框架AbstractQueuedSynchronizer详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-10-10
  • 使用IDEA异常断点来定位java.lang.ArrayStoreException的问题

    使用IDEA异常断点来定位java.lang.ArrayStoreException的问题

    这篇文章主要介绍了使用IDEA异常断点来定位java.lang.ArrayStoreException的问题,平常开发过程中面对这种描述不够清楚,无法定位具体原因的问题该如何处理,下面我们来一起学习一下吧
    2019-06-06
  • Java_异常类(错误和异常,两者的区别介绍)

    Java_异常类(错误和异常,两者的区别介绍)

    下面小编就为大家带来一篇Java_异常类(错误和异常,两者的区别介绍) 。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-09-09
  • 解析Nacos的API居然存在这么严重的漏洞

    解析Nacos的API居然存在这么严重的漏洞

    这篇文章主要介绍了Nacos的API居然存在这么严重的漏洞,Nacos为我们提供了大量API,但是这些API默认是没有开启认证的,直接可以访问,针对于这一点我们也都可以去验证一下,本文给大家详细讲解,感兴趣的朋友跟随小编一起看看吧
    2022-09-09
  • java生成jar包并且单进程运行的实例

    java生成jar包并且单进程运行的实例

    下面小编就为大家分享一篇java生成jar包并且单进程运行的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2017-12-12

最新评论