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

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

(0)

相关推荐

  • 解决java压缩图片透明背景变黑色的问题

    复制代码 代码如下: public class Picture {          // TODO Auto-generated constructor stub       public static void resizePNG(String fromFile, String toFile, int outputWidth, int outputHeight,boolean proportion) {              try {                 File f2 =

  • java处理图片背景颜色的方法

    今天老师想让我帮忙把她们200多张寸照换成白底的,这些寸照里面多为蓝色底,红色底. 用ps?不!用java!! 对,我第一反应就是用java,到网上找到了一个获得图片像素的源码.动手改了下,就编出来了,200多张照片的处理就用了半分钟. /** * 功能: * 将蓝底寸照批量转换为白底 * 主要是可以几百张,几千张地处理 * @author 赵俊夫 * */ public class ImageColorDemo { public static void main(String args[])

  • Java 实现图片压缩的两种方法

    问题背景. 典型的情景:Nemo社区中,用户上传的图片免不了要在某处给用户做展示. 如用户上传的头像,那么其他用户在浏览该用户信息的时候,就会需要回显头像信息了. 用户上传的原图可能由于清晰度较高而体积也相对较大,考虑用户流量带宽,一般而言我们都不会直接体积巨大的原图直接丢给用户让用户慢慢下载. 这时候通常我们会在服务器对图片进行压缩,然后把压缩后的图片内容回显给用户. 压缩方案: 这里主要找了两个java中常用的图片压缩工具库:Graphics和Thumbnailator. 1.Graphic

  • 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; /**

  • 详解Java实现批量压缩图片裁剪压缩多种尺寸缩略图一键批量上传图片

    10万+IT人都在关注的图片批量压缩上传方案(完整案例+代码) 背景需求:为了客户端访问图片资源时,加载图片更流畅,体验更好,通常不会直接用原图路径,需要根据不同的场景显示不同规格的缩略图,根据商品关键属性,能够获取到图片不同尺寸规格的图片路径,并且能根据不同缩略图直观看到商品的关键属性,需要写一个Java小工具把本地磁盘中的图片资源一键上传至分布式FastDFS文件服务器,并把图片信息存入本地数据库,PC端或者客户端查询商品时,就可以根据商品的业务属性.比如根据productId就能把商品相关

  • vue.js 实现图片本地预览 裁剪 压缩 上传功能

    以下代码涉及 Vue 2.0 及 ES6 语法. 目标 纯 javascrpit 实现,兼容ie9及以上浏览器,在本地做好文件格式.长宽.大小的检测,减少浏览器交互. 现实是残酷的,为了兼容Ie9 还是用上了 flash,第二篇来解释解释. 代码结构 <div id="wrap"> <label> 点我上传图片 <input type='file' @change="change" ref="input"> &

  • Java实现的微信图片处理工具类【裁剪,合并,等比例缩放等】

    本文实例讲述了Java实现的微信图片处理工具类.分享给大家供大家参考,具体如下: 现在 外面核心,图片文章比较少,看了拷贝代码,而用不了,用相应jar包处理,很多等比例缩放,达不到 想要的给予的期望:本工具类,是之前做微信打印机写的 基于java自带的类,基于rgb. package com.zjpz.util; import java.awt.Color; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt

  • java多线程实现下载图片并压缩

    最近在做一个需求:从其他系统的ftp目录下载存储图片url的文件,然后读取文件中的url地址,根据地址下载图片后按天压缩成一个包,平均一个地址文件中包含4000个地址左右,也就是说一个文件扫描后需要下载4000个左右的图片,然后压缩,下面把我的实现方式和优化过程记录下来,如果大家有什么更好的方式可以分享. 使用框架:SpringMVC 定时任务实现:继承org.springframework.scheduling.quartz.QuartzJobBean; ftp环境搭建就不说了,在其他博客记录

  • Java中多线程下载图片并压缩能提高效率吗

    目录 前言 实现思路 实测 前言 需求 导出Excel:本身以为是一个简单得导出,但是每行得记录文件中有一列为图片url,需要下载所有记录行对应得图片,然后压缩整个文件夹. 这里只做4.5.得代码讲解描述,其它也没什么好说得,话不多说上代码. 实现思路 多线程实现使用了线程池,Jdk1.8并发包下的CompletableFuture 第一步:得到基础数值 // 线程数 Integer threadNum = 10; // 每条线程需要处理的图片数 int dataNum = imageInfoV

  • java 实现图片像素质量压缩与图片长宽缩放

    目录 java 图片像素质量压缩与图片长宽缩放 java 修改图片dpi(像素/大小) java 图片像素质量压缩与图片长宽缩放 今天找到的这个方法比以前项目用到的方法更好,这里记录下,方便日后使用! /** * 缩放图片(压缩图片质量,改变图片尺寸) * 若原图宽度小于新宽度,则宽度不变! * @param newWidth 新的宽度 * @param quality 图片质量参数 0.7f 相当于70%质量 * 2015年12月11日 */ public static void resize

  • Java实现压缩图片大小

    本文实例为大家分享了Java实现压缩图片大小的具体代码,供大家参考,具体内容如下 使用场景: 1.当使用图片上传功能时,上传图片太大,造成对服务器资源过多的占用2.客户端上传图片尺寸大小不一,前端需要展示给用户固定尺寸时,可通过java进行对上传图片统一进行处理 功能预览 1.压缩前 2.压缩后 代码实现: package com.linghu.test; import com.sun.image.codec.jpeg.JPEGCodec; import com.sun.image.codec.

  • jQuery实现响应鼠标事件的图片透明效果【附demo源码下载】

    本文实例讲述了jQuery实现响应鼠标事件的图片透明效果.分享给大家供大家参考,具体如下: 实现的思想: 1.当鼠标放在图片上面的时候触发mouseover mouseenter两个事件(图片变得透明) 2.当鼠标离开图片的时候触发mouseleave mouseout两个事件(图片变为不透明) 具体代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.or

  • java 根据坐标截取图片实例代码

    java 根据坐标截取图片 实例代码:代码中有不是注释,很好看懂! package com.json.test; import java.awt.Rectangle; import java.awt.image.BufferedImage; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.util.Iterator; import javax.imageio.

随机推荐