import java.awt.Dimension;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.FileOutputStream;
import java.io.IOException; import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGEncodeParam;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
import java.io.File;
import javax.imageio.ImageIO; /**
* JPG图片压缩工具
* @author clj
*
*/
public class ImageUtil {
/**
* 将原图src压缩后存入des中
* @param src 原图片文件
* @param des 压缩后的存储文件
* @param imgSize 图片缩放的最大尺寸
* @param quality 图片质量0~1
*/
public static void compress(File src,File des, int imgSize,float quality) {
FileOutputStream out = null;
try {
//读取源图片到内存中
Image image = ImageIO.read(src);
//获得压缩尺寸
Dimension dim = getRectangle(image.getWidth(null), image.getHeight(null),imgSize);
//在内存中创建压缩图片的缓冲区
BufferedImage tmpImg=new BufferedImage(dim.width,dim.height ,BufferedImage.TYPE_3BYTE_BGR);
//在缓冲区按缩放后的大小绘制压缩图片
tmpImg.getGraphics().drawImage(image.getScaledInstance(dim.width,dim.height,Image.SCALE_SMOOTH), 0, 0, null);
//设置图片质量,
JPEGEncodeParam jep = JPEGCodec.getDefaultJPEGEncodeParam(tmpImg);
jep.setQuality(quality, true);
//保存压缩图片
//输出图片存在则先删除
if(des.exists()){
des.delete();
}
//获得输出流
out = new FileOutputStream(des);
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
encoder.encode(tmpImg);
} catch (Exception ex) {
ex.printStackTrace();
}finally{
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
} /**
* 获得压缩图片尺寸
* 最长边压缩为size px,短边按比例变化
* @param width
* @param height
* @return
*/
private static Dimension getRectangle( int width, int height, int size){
Dimension dim = new Dimension();
double w = width+0.0;
double h = height + 0.0;
double rate = w/h;
//宽或高大于size时,将较大者缩小为size,较小者则按比例变化
if(w > h && w > size){
w = size;
h = w / rate;
}else if(h > w && h > size){
h = size;
w = h*rate;
}
width = (int)w;
height = (int)h;
dim.width = width;
dim.height = height;
return dim;
} public static void main(String args[]){
ImageUtil.compress(new File("D:/test/img/src.jpg"), new File("D:/test/img/out.jpg"),600,1f);
}
}

利用JPEGImageEncoder进行简单的图片压缩的更多相关文章

  1. 利用Python进行博客图片压缩

    自己写博客的时候常常要插入一些手机拍的照片,都是几M的大小,每张手动压缩太费事了,于是根据自己博客的排版特点用Python写了一个简单的图片压缩脚本,功能是将博客图片生成缩略图,横屏的图片压缩为宽度最 ...

  2. Android 简单介绍图片压缩和图片内存缓存

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/9316683 本篇文章主要内容来自于Android Doc,我翻译之后又做了些加工, ...

  3. 利用python进行简单的图片处理

    python的 PIL模块是专门用来处理图片的模块,其功能可以说是非常强大了. 演示环境:win7 操作系统 安装python2.7以及指定的对应PIL模块 我这里有一个现成的PIL模块.本文的大部分 ...

  4. 基于vue + axios + lrz.js 微信端图片压缩上传

    业务场景 微信端项目是基于Vux + Axios构建的,关于图片上传的业务场景有以下几点需求: 1.单张图片上传(如个人头像,实名认证等业务) 2.多张图片上传(如某类工单记录) 3.上传图片时期望能 ...

  5. 学习笔记:利用GDI+生成简单的验证码图片

    学习笔记:利用GDI+生成简单的验证码图片 /// <summary> /// 单击图片时切换图片 /// </summary> /// <param name=&quo ...

  6. uni-app图片压缩转base64位 利用递归来实现多张图片压缩

    //选择图片 chooseImage(){ let that =this uni.chooseImage({ sizeType: ['original','compressed'], //可以指定是原 ...

  7. 利用Python实现简单的相似图片搜索的教程

    大概五年前吧,我那时还在为一家约会网站做开发工作.他们是早期创业公司,但他们也开始拥有了一些稳定用户量.不像其他约会网站,这家公司向来以洁身自好为主要市场形象.它不是一个供你鬼混的网站——是让你能找到 ...

  8. Js利用Canvas实现图片压缩

    最近做的APP项目涉及到手机拍照上传图片,因为手机拍照的图片通常都比较大,所以上传的时候就会很慢.为此,需要对图片进行压缩处理来优化上传功能.以下是具体实现: /* * 图片压缩 * img 原始图片 ...

  9. [H5-Compress-Image]利用canvas实现 javascript 图片压缩处理_基于requirejs模块化的代码实现

    // 还存在有问题的代码,问题在于processFile()中// 问题:在ipone 5c 下,某些图片压缩处理后,上传到服务器生成的文件size为0,即是空白 ;define(['mod/tool ...

随机推荐

  1. jquery中的 ajax 以及map遍历

    1.语法 $.ajax{ type:'get',//类型 有get post url:'',//路径 data:{name:$('#ma').val(),nameq:$('#maq').val()}, ...

  2. Android --------- 标签include位置设置无效

    给include设置below或align无效,是因为没有给include设置width和height.

  3. PHP学习笔记二十九【接口】

    <?php //定义接口 //接口可以定义属性,但必须是常量而且是public //接口的所有方法必须是public interface Iusb{ public function start( ...

  4. C#总结(3)

    这次我们来谈谈函数. C#的函数分为静态函数,和普通函数. 先上代码. using System; using System.Collections.Generic; using System.Lin ...

  5. (原+转)pycharm中使用caffe

    转载请注明出处: http://www.cnblogs.com/darkknightzh/p/5896446.html 参考网址: http://www.th7.cn/Program/Python/2 ...

  6. 监听SWT文本框只能输入数字

    在SWT开发中,很多时候需要文本框只能输入数字(当输入字母或者其他字符时为无效),这个时候需要给文本框设置监听VerifyListener, code 如下: text.addVerifyListen ...

  7. SQL SERVER中如何格式化日期

    1. SELECT convert(varchar, getdate(), 100) -- mon dd yyyy hh:mmAM (or PM)    -- Oct 2 2008 11:01AM  ...

  8. Response 关于浏览器header的方法

    Response.AddHeader   Response.AddHeader使用实例 1.文件下载,指定默认名 Response.AddHeader("content-type" ...

  9. mysql 针对单张表的备份与还原

    A.MySQL 备份工具xtrabackup 的安装 . percona 官方xtrabackup 的二进制版本:二进制版本解压就能用了. . 解压xtrabackup & 创建连接 -Lin ...

  10. EXW_FOB_CIF_CFR 外贸报价方式&条款之间的区别与联系

    一.工厂交货价(EXW=Ex Works): 交货地点:出口国工厂或仓库:  运 输:买方负责:  保 险:买方负责:  出口手续:买方负责:  进口手续:买方负责:  风险转移:交货地:  所有权转 ...