java图片处理有点头疼,找了很多资料。在这里进行一个汇总,记录下个人的体验,也希望对大家有所帮助。

需求:浏览的图片需要在1M一下。

1、真正对图片的质量进行压缩的(不是通过修改图片的高,宽进行缩小图片。就单单缩小图片质量)

  优点:不修改图片大小,简便。

  缺点:对jpg格式能处理很好,对于gif,png其他格式不适合。

compressPic(图片路径,处理格式);
        /**
*
* 修改图片大小
* <p>描述</p>
* @date 2014-7-10 下午4:27:51
* @version
* @param srcFilePath
* @param fileExtName
* @return
* @throws IOException
*/
public static boolean compressPic(String srcFilePath,String fileExtName) throws IOException {
File file = null;
BufferedImage src = null;
FileOutputStream out = null;
ImageWriter imgWrier;
ImageWriteParam imgWriteParams; long start1 = System.currentTimeMillis();
// 指定写图片的方式为 jpg
imgWrier = ImageIO.getImageWritersByFormatName(fileExtName).next();
imgWriteParams = imgWrier.getDefaultWriteParam();
// imgWriteParams = new javax.imageio.plugins.jpeg.JPEGImageWriteParam(
// null);
// imgWriteParams = new javax.imageio.plugins.jpeg.JPEGImageWriteParam(
// null); imgWriteParams.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
// 这里指定压缩的程度,参数qality是取值0~1范围内,
imgWriteParams.setCompressionQuality((float) 0.2);
//imgWriteParams.setProgressiveMode(ImageWriteParam.MODE_DISABLED);//
ColorModel colorModel =ImageIO.read(new File(srcFilePath)).getColorModel();// ColorModel.getRGBdefault();
// 指定压缩时使用的色彩模式 imgWriteParams.setDestinationType(new javax.imageio.ImageTypeSpecifier(
colorModel, colorModel.createCompatibleSampleModel(16, 16))); long end1 = System.currentTimeMillis();
System.out.println("11111消耗时间:"+((double)end1-(double)start1)/1000+"秒");
try {
if (isBlank(srcFilePath)) {
return false;
} else {
file = new File(srcFilePath);
src = ImageIO.read(file);
out = new FileOutputStream(srcFilePath); System.out.println("22222");
imgWrier.reset(); // 必须先指定 out值,才能调用write方法, ImageOutputStream可以通过任何
// OutputStream构造
imgWrier.setOutput(ImageIO.createImageOutputStream(out));
System.out.println("3333333");
// 调用write方法,就可以向输入流写图片 long start4 = System.currentTimeMillis();
imgWrier.write(null, new IIOImage(src, null, null),
imgWriteParams);
long end4 = System.currentTimeMillis(); System.out.println("4444消耗时间:"+((double)end4-(double)start4)/1000+"秒"); src.flush();
out.flush();
out.close();
imgWrier.dispose();
}
} catch (Exception e) {
e.printStackTrace();
return false;
}
return true;
} /**
*
* 修改单独图片大小
* <p>描述</p>
* @date 2014-7-10 下午4:26:30
* @version
* @param filePath
* @param createType
* @throws Exception
*/
public static void changeNoneImgSize(String filePath,String createType) throws Exception
{
File tempFile = new File(filePath);
if(tempFile.length()>ImagesUtils.IMAGEMAXSIZE){ long start = System.currentTimeMillis(); compressPic(filePath,createType);
long end = System.currentTimeMillis(); System.out.println(filePath+"消耗时间:"+((double)end-(double)start)/1000+"秒");
} } /**
*
* 修改多个图片大小
* <p>描述</p>
* @date 2014-7-10 下午4:26:52
* @version
* @param file
* @throws Exception
*/
public static void changeManyImgSize(File file) throws Exception
{
try {
// 判断文件是否是文件,如果是文件,获取路径,并计数
if (file.isFile()) {
String fileExtName = file.getName().substring(
(file.getName().lastIndexOf(".") + 1), file.getName().length());
if(ImagesUtils.isImageFile(fileExtName))
changeNoneImgSize(file.getAbsolutePath(), fileExtName);
//ImagesUtils.changeImgSize(file.getAbsolutePath(), ImagesUtils.CREATENEWIMAGETYPE_6);
} else {
// 如果是文件夹,声明一个数组放文件夹和他的子文件
File[] f = file.listFiles();
// 遍历文件件下的文件,并获取路径
for (File file2 : f) {
changeManyImgSize(file2);
}
}
} catch (RuntimeException e) {
e.printStackTrace();
}
}

2,这种需要用到一个java-image-scaling-0.8.5.jar包。这种需要设定宽高(我是按照原来比例走的。宽是按照两个A4的宽度走),jar我这里提供出来:http://pan.baidu.com/s/1c0pekVm

优点:简单,格式支持还行。我测试了gif,png都可以用、

缺点:宽高需要设定。

  

public static boolean compressPic(String srcFilePath,String fileExtName) throws IOException {

        try {
BufferedImage sourceImage = ImageIO.read(new File(srcFilePath));
int newwidth = 1700;
double newheight = ((double) sourceImage.getHeight() / (double) sourceImage.getWidth()) * 1700;
ResampleOp resizeOp = new ResampleOp(newwidth, (int) newheight);
resizeOp.setFilter(ResampleFilters.getTriangleFilter());
BufferedImage resizedImage = resizeOp.filter(sourceImage, null);
ImageIO.write(resizedImage, "jpg", new File(srcFilePath));
} catch (Exception e) {
log.error("compressPic error", e);
return false;
}
return true;
}

有点忙,先写这了..................后续还有,不只这点资料。

java代码实现图片处理功能。对图片质量进行压缩。的更多相关文章

  1. java代码-----计算器,界面+功能+boolean

    总结:还是那个不懂代码放在哪里好?不知道怎么定义一些关键性变量.比如boolean 型的. package com.sads; import java.awt.BorderLayout; import ...

  2. 通过Java代码实现图片的放大和缩小

    本文介绍的例子在Android安卓手机上测试通过. 先看看效果吧.可以看到这个开发好的安卓应用有三个按钮:Zoom In缩小图片,Zoom Out放大图片和Save保存. 初始页面: 可以在左边边框自 ...

  3. 如何使用Java代码给图片增加倒影效果

    效果 倒影率为90%时的效果: 倒影率10%时的效果: 实现原理 倒影率作为参数rate 传入Reflection button的事件处理函数: CreateImageWithReflection这个 ...

  4. Eclipse中实现JAVA代码的自动提示功能

    1.打开Eclipse,在.出现时进行代码提示换成任意字母+.出现时的代码提示了(.abcdefghijklmnopqrstuvwxyz):

  5. java 代码判断图片格式后缀名称

    /** * 图片判断 */ private static String getFormatName(Object o) { try { // Create an image input stream ...

  6. java代码判断图片文件格式, 不是根据文件后缀来判断。

    public static final String TYPE_JPG = "jpg"; public static final String TYPE_GIF = "g ...

  7. java代码实现自动登录功能

    通常我们登录某网站,会有选择保存几天,或者是几个星期不用登录,之后输入该网站地址无需登录直接进入主页面,那么这就叫做自动登录,怎么实现呢,下面我以一个小例子来演示一下 登录页面:login.jsp & ...

  8. JAVA实现根据图片生成缩略图、裁剪、压缩图片

    依赖(用来复制文件,可以根据自己的来) <dependency> <groupId>commons-io</groupId> <artifactId>c ...

  9. java代码实现图片内容转文字

    前言 现在的手机已经可以实现拍照转文字了.作为一名程序员,得使用java代码实现这一功能,虽然可能没啥用!!! pom.xml 添加依赖 <dependency> <groupId& ...

随机推荐

  1. React笔记-事件分发

    事件分发 之前讲述了事件如何绑定在document上,那么具体事件触发的时候是如何分发到具体的监听者呢?我们接着上次注册的事件代理看.当我点击update counter按钮时,触发注册的click事 ...

  2. DRF03

    为了方便接下来的操作,需要在admin站点创建一个管理员. python manage.py createsuperuser 可在setting.py中修改admin站点语言, LANGUAGE_CO ...

  3. PAT甲级题解-1100. Mars Numbers (20)-字符串处理

    没什么好说的,注意字符串的处理,以及当数字是13的倍数时,只需高位叫法的单词.比如26,是“hel”,而不是“hel tret”. 代码: #include <iostream> #inc ...

  4. JAVA每日一旅

    1.关于final关键字 final修饰的成员变量为基本数据类型时,在赋值之后无法改变.当final修饰的成员变量为引用数据类型时,在赋值后其指向地址无法改变,但是对象内容还是可以改变的. final ...

  5. 【SE】Week2 : 个人博客作业

    1. 是否需要有代码规范 对于是否需要有代码规范,请考虑下列论点并反驳/支持: Statement1 :  这些规范都是官僚制度下产生的浪费大家的编程时间.影响人们开发效率, 浪费时间的东西. 这样的 ...

  6. 剑指offer:数值的整数次方

    题目描述: 给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. 解题思路: 一开始直接用一个for循环做连乘,测了一下,发现这个指数可能是负 ...

  7. Resharper简单安装及代码覆盖率的测试

    Resharper简单安装及代码覆盖率的测试 测试环境:VS 2015 专业版 一.下载Resharper 官方链接:https://www.jetbrains.com/resharper/ 点击下载 ...

  8. Java设计模式之单例模式(七种写法)

    Java设计模式之单例模式(七种写法) 第一种,懒汉式,lazy初始化,线程不安全,多线程中无法工作: public class Singleton { private static Singleto ...

  9. P3000 [USACO10DEC]牛的健美操Cow Calisthenics

    题目描述 Farmer John continues his never-ending quest to keep the cows fit by having them exercise on va ...

  10. SpringBoot设置事务隔离等级

    "If you're gonna play the game, boy, ya gotta learn to play it right" Spring Boot 使用事务非常简单 ...