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. idou老师教你学Istio :如何用istio实现监控和日志采集

    大家都知道istio可以帮助我们实现灰度发布.流量监控.流量治理等功能.每一个功能都帮助我们在不同场景中实现不同的业务.那Istio是如何帮助我们实现监控和日志采集的呢? 这里我们依然以Bookinf ...

  2. 安装logstash及logstash的初步使用-处理DNS日志

    安装logstash 需要高版本的java 使用1.4版本的java会有报错 # Can't start up: not enough memory 查询java信息 rpm -qa | grep j ...

  3. PHP 观察者模式和php实现 Observer Pattern

    观察者模式: 观察者模式(Observer Pattern):定义对象间的一种一对多依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象皆得到通知并被自动更新.观察者模式又叫做发布-订阅(Publ ...

  4. PHP完美分页类

    <?php /** file: page.class.php 完美分页类 Page */ class Page { private $total; //数据表中总记录数 private $lis ...

  5. Linux内核分析第二周学习笔记

    linux内核分析第二周学习笔记 标签(空格分隔): 20135328陈都 陈都 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.co ...

  6. Sprint计划会议内容

    项目名称:蹭课神器 会议内容 首先我们讨论了项目的工作量及实施流程 一.工作认领 二.界面的总体规划 三.主要功能的设计 四.设计数据库 五.编写项目报告 六.软件测试和推广 然后我们进行了工作认领, ...

  7. 重温httpsession①

    Session—HTTPSession 服务器创建的,Javaweb提供的 与HTTP协议无关是服务器端对象,保存在服务器端.用来会话跟踪. Cookie与服务器创建,与HTTP协议相关,保存在客户端 ...

  8. 校园社交网站app

    1.项目说明 1.1 项目背景 虽然公共社交网络系统能够满足大多数高校校园用户在校园网络社交的需求,但是针对校园学习.工作和文化生活等方面的支持以及学校个性化需求方面却存在不足.利用电子校务平台的数据 ...

  9. Eat Style --proposed by Chongyang Bai

    NEED 1. 有人希望妈妈是这样的: 但实际上对妈妈做的菜反应确是这样的: 处在不同的时节,根据不同的个人偏好,到底该做些什么饭菜?工作繁忙,家里的厨师可能也没时间琢磨.最后做出的只是应付差事的饭菜 ...

  10. (第三周)c#程序理解

    阅读下面程序,请回答如下问题: 问题1:这个程序要找的是符合什么条件的数? 问题2:这样的数存在么?符合这一条件的最小的数是什么? 问题3:在电脑上运行这一程序,你估计多长时间才能输出第一个结果?时间 ...