java对图片压缩_Java实现的上传并压缩图片功能【可等比例压缩或原尺寸压缩】...

本文介绍了如何使用Java进行图片压缩,包括等比例和固定尺寸压缩两种方式。通过示例代码展示了如何读取图片、调整尺寸并保持比例、设置质量,最后将处理后的图片保存。适用于处理不同格式的图片。
摘要由CSDN通过智能技术生成

本文实例讲述了Java实现的上传并压缩图片功能。分享给大家供大家参考,具体如下:

先看效果:

原图:1.33M

a71d4712afa5b296a1cef5b35f4e41b1.png

处理后:27.4kb

67da2a007778c71d5b24432ea7ee6cfc.png

关键代码:

package codeGenerate.util;

import java.awt.Color;

import java.awt.Graphics2D;

import java.awt.Image;

import java.awt.image.BufferedImage;

import java.io.File;

import java.io.FileNotFoundException;

import java.io.IOException;

import javax.imageio.ImageIO;

public class ImageZipUtil {

public static void main(String[] args) {

zipWidthHeightImageFile(new File("C:\\spider\\3.png"),new File("C:\\spider\\3-1.jpg"),425,638,0.7f);

//zipImageFile(new File("C:\\spider\\2.JPG"),new File("C:\\spider\\2-2.JPG"),425,638,0.7f);

//zipImageFile(new File("C:\\spider\\3.jpg"),new File("C:\\spider\\3-3.jpg"),425,638,0.7f);

System.out.println("ok");

}

/**

* 根据设置的宽高等比例压缩图片文件
先保存原文件,再压缩、上传

* @param oldFile 要进行压缩的文件

* @param newFile 新文件

* @param width 宽度 //设置宽度时(高度传入0,等比例缩放)

* @param height 高度 //设置高度时(宽度传入0,等比例缩放)

* @param quality 质量

* @return 返回压缩后的文件的全路径

*/

public static String zipImageFile(File oldFile,File newFile, int width, int height,float quality) {

if (oldFile == null) {

return null;

}

try {

/** 对服务器上的临时文件进行处理 */

Image srcFile = ImageIO.read(oldFile);

int w = srcFile.getWidth(null);

int h = srcFile.getHeight(null);

double bili;

if(width>0){

bili=width/(double)w;

height = (int) (h*bili);

}else{

if(height>0){

bili=height/(double)h;

width = (int) (w*bili);

}

}

String srcImgPath = newFile.getAbsoluteFile().toString();

System.out.println(srcImgPath);

String subfix = "jpg";

subfix = srcImgPath.substring(srcImgPath.lastIndexOf(".")+1,srcImgPath.length());

BufferedImage buffImg = null;

if(subfix.equals("png")){

buffImg = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);

}else{

buffImg = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);

}

Graphics2D graphics = buffImg.createGraphics();

graphics.setBackground(new Color(255,255,255));

graphics.setColor(new Color(255,255,255));

graphics.fillRect(0, 0, width, height);

graphics.drawImage(srcFile.getScaledInstance(width, height, Image.SCALE_SMOOTH), 0, 0, null);

ImageIO.write(buffImg, subfix, new File(srcImgPath));

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

return newFile.getAbsolutePath();

}

/**

* 按设置的宽度高度压缩图片文件
先保存原文件,再压缩、上传

* @param oldFile 要进行压缩的文件全路径

* @param newFile 新文件

* @param width 宽度

* @param height 高度

* @param quality 质量

* @return 返回压缩后的文件的全路径

*/

public static String zipWidthHeightImageFile(File oldFile,File newFile, int width, int height,float quality) {

if (oldFile == null) {

return null;

}

String newImage = null;

try {

/** 对服务器上的临时文件进行处理 */

Image srcFile = ImageIO.read(oldFile);

String srcImgPath = newFile.getAbsoluteFile().toString();

System.out.println(srcImgPath);

String subfix = "jpg";

subfix = srcImgPath.substring(srcImgPath.lastIndexOf(".")+1,srcImgPath.length());

BufferedImage buffImg = null;

if(subfix.equals("png")){

buffImg = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);

}else{

buffImg = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);

}

Graphics2D graphics = buffImg.createGraphics();

graphics.setBackground(new Color(255,255,255));

graphics.setColor(new Color(255,255,255));

graphics.fillRect(0, 0, width, height);

graphics.drawImage(srcFile.getScaledInstance(width, height, Image.SCALE_SMOOTH), 0, 0, null);

ImageIO.write(buffImg, subfix, new File(srcImgPath));

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

return newImage;

}

}

说明:

1、根据需求大家可以自行设置质量参数quality,到底设置成多少,可以先看下效果在取值;

2、网上通用的方法用的是jdk自带jar包中方法,我这里衍生了一下:用Graphics2D,能够同时处理jpg和png格式;

3、new Color(255,255,255)是白色,等同于WHITE,但是用WHITE 的话,Linux下某些图片会有其它色值;

4、main中的宽425和高638可以根据自己的需求自行设置,但是对于长和宽一样的,按照400(小值的值425)*400来处理;

希望本文所述对大家java程序设计有所帮助。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值