java对图片进行“高保真”压缩
2015-04-28 09:31
316 查看
应项目需要,对上传的商品图片进行压缩处理,且必须要保证原图片的高保真显示效果。
于是网上down资料,找到其中效果最好的一种方法,供大家使用和学习:
代码如下:
package com.hhsj.demo;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import javax.imageio.ImageIO;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGEncodeParam;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
public class ImageCompress2 {
/**
* @param im
* 原始图像
* @param resizeTimes
* 倍数,比如0.5就是缩小一半,0.98等等double类型
* @return 返回处理后的图像
*/
public BufferedImage zoomImage(String src) {
BufferedImage result = null;
try {
File srcfile = new File(src);
if (!srcfile.exists()) {
System.out.println("文件不存在");
}
BufferedImage im = ImageIO.read(srcfile);
/* 原始图像的宽度和高度 */
int width = im.getWidth();
int height = im.getHeight();
//压缩计算
float resizeTimes = 0.3f; /*这个参数是要转化成的倍数,如果是1就是转化成1倍*/
/* 调整后的图片的宽度和高度 */
int toWidth = (int) (width * resizeTimes);
int toHeight = (int) (height * resizeTimes);
/* 新生成结果图片 */
result = new BufferedImage(toWidth, toHeight,
BufferedImage.TYPE_INT_RGB);
result.getGraphics().drawImage(
im.getScaledInstance(toWidth, toHeight,
java.awt.Image.SCALE_SMOOTH), 0, 0, null);
} catch (Exception e) {
System.out.println("创建缩略图发生异常" + e.getMessage());
}
return result;
}
public boolean writeHighQuality(BufferedImage im, String fileFullPath) {
try {
/*输出到文件流*/
FileOutputStream newimage = new FileOutputStream(fileFullPath);
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(newimage);
JPEGEncodeParam jep = JPEGCodec.getDefaultJPEGEncodeParam(im);
/* 压缩质量 */
jep.setQuality(0.9f, true);
encoder.encode(im, jep);
/*近JPEG编码*/
newimage.close();
return true;
} catch (Exception e) {
return false;
}
}
public static void main(String[] args) {
String inputFoler = "D:\\img.jpg" ;
/*这儿填写你存放要缩小图片的文件夹全地址*/
String outputFolder = "D:\\newImg.jpg";
/*这儿填写你转化后的图片存放的文件夹*/
ImageCompress2 narrowImage = new ImageCompress2();
narrowImage.writeHighQuality(narrowImage.zoomImage(inputFoler), outputFolder);
}
}
于是网上down资料,找到其中效果最好的一种方法,供大家使用和学习:
代码如下:
package com.hhsj.demo;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import javax.imageio.ImageIO;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGEncodeParam;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
public class ImageCompress2 {
/**
* @param im
* 原始图像
* @param resizeTimes
* 倍数,比如0.5就是缩小一半,0.98等等double类型
* @return 返回处理后的图像
*/
public BufferedImage zoomImage(String src) {
BufferedImage result = null;
try {
File srcfile = new File(src);
if (!srcfile.exists()) {
System.out.println("文件不存在");
}
BufferedImage im = ImageIO.read(srcfile);
/* 原始图像的宽度和高度 */
int width = im.getWidth();
int height = im.getHeight();
//压缩计算
float resizeTimes = 0.3f; /*这个参数是要转化成的倍数,如果是1就是转化成1倍*/
/* 调整后的图片的宽度和高度 */
int toWidth = (int) (width * resizeTimes);
int toHeight = (int) (height * resizeTimes);
/* 新生成结果图片 */
result = new BufferedImage(toWidth, toHeight,
BufferedImage.TYPE_INT_RGB);
result.getGraphics().drawImage(
im.getScaledInstance(toWidth, toHeight,
java.awt.Image.SCALE_SMOOTH), 0, 0, null);
} catch (Exception e) {
System.out.println("创建缩略图发生异常" + e.getMessage());
}
return result;
}
public boolean writeHighQuality(BufferedImage im, String fileFullPath) {
try {
/*输出到文件流*/
FileOutputStream newimage = new FileOutputStream(fileFullPath);
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(newimage);
JPEGEncodeParam jep = JPEGCodec.getDefaultJPEGEncodeParam(im);
/* 压缩质量 */
jep.setQuality(0.9f, true);
encoder.encode(im, jep);
/*近JPEG编码*/
newimage.close();
return true;
} catch (Exception e) {
return false;
}
}
public static void main(String[] args) {
String inputFoler = "D:\\img.jpg" ;
/*这儿填写你存放要缩小图片的文件夹全地址*/
String outputFolder = "D:\\newImg.jpg";
/*这儿填写你转化后的图片存放的文件夹*/
ImageCompress2 narrowImage = new ImageCompress2();
narrowImage.writeHighQuality(narrowImage.zoomImage(inputFoler), outputFolder);
}
}
相关文章推荐
- 详解Java中使用ImageIO类对图片进行压缩的方法
- java中对图片进行压缩以及放大。
- JAVA使用thumbnailator对base64图片进行压缩
- java对图片进行压缩和resize缩放的方法
- 在java中使用内部类进行图片压缩的时候,怎么老是报内存错误,请大侠帮忙
- java对图片进行压缩和resize
- 如何用Java对图片jpg, gif进行压缩
- java 图片压缩
- Java图片合成,压缩
- Java图片压缩
- java使用文件或字节数组方式加载图片,并修改图片后进行保存、输出等
- JAVA图片压缩质量
- java图片高质量压缩
- c#利用zlib.net对文件进行deflate流压缩(和java程序压缩生成一样)
- 服务器端根据数据库图片的url获取保存的图片并进行缩略后返回给客户端-压缩之Thumbnails
- Java中图片压缩处理
- 网上图片本地保存并进行压缩操作
- iOS 对图片进行压缩
- Java实现图片压缩
- MongoDB对图片进行CRUD操作——与JAVA结合