利用JPEGImageEncoder进行简单的图片压缩

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);
    }
}
时间: 2024-11-14 10:10:03

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

手机拍照及简单的图片压缩

注释都在代码里,这里就不再说了.特别注意cnClick中的//TODO注释以及onActivityResult方法中的注释 效果图 权限: <!-- 在SD卡中创建与删除文件权限 --> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/> <!-- 向SD卡写入数据权限 --> <uses-permission android:name=&

利用UIImageJPEGRepresentation与UIGraphicsBeginImageContext进行图片压缩的简单比较

NSData *imageData = UIImageJPEGRepresentation(self.uploadImage , 0.75); //图片按0.75的质量压缩->转换为NSData NSString *file_name = [TimeUtil getDateStringWithFormat:@"yyyy-MM-dd-HH-mm-ss"]; //以事件为图片名字 NSString *upload_name =[NSString stringWithFormat:@&

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

小分享:我有几张阿里云优惠券,用券购买或者升级阿里云相应产品最多可以优惠五折!领券地址:https://promotion.aliyun.com/ntms/act/ambassador/sharetouser.html?userCode=ohmepe03 学习笔记:利用GDI+生成简单的验证码图片 1 /// <summary> 2 /// 单击图片时切换图片 3 /// </summary> 4 /// <param name="sender">&

利用java实现简单图片的计数器

利用java实现简单图片的计数器,运行图: 想学习更多关于java的知识,可以点击<Java EE软件工程师>进行学习. <%@ page contentType="text/html;charset=gb2312"%><%@ page language="java" import="java.io.*"%> <html><head><meta http-equiv="C

java图片压缩,使用ImageIO代替JPEGImageEncoder

最近做项目需要图片压缩处理,网上找的方法大都使用了 com.sun.image.codec.jpeg.* 这个包中的JPEGImageEncoder类,引入这个包后一直报错,各种google百度,尝试了各种方法,包括手动引jre中的rt.jar,以及在eclipse中把受访问限制的API提示从ERROR改为WARNING,等等,然而这些都是不好使的,因为后来我发现我的java-7-openjdk-amd64中的rt.jar里边根本就没有com.sun.image.*,貌似这个类在java7中已经

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

//选择图片 chooseImage(){ let that =this uni.chooseImage({ sizeType: ['original','compressed'], //可以指定是原图还是压缩图,默认二者都有 count: 9,//默认9 success: (rem) => { console.log(rem) that.tempFilePaths = rem.tempFilePaths; //#ifdef MP-WEIXIN //图片压缩并转base64 that.weixi

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

// 还存在有问题的代码,问题在于processFile()中// 问题:在ipone 5c 下,某些图片压缩处理后,上传到服务器生成的文件size为0,即是空白 ;define(['mod/tool/formSubmit'] ,function(o_formSubmit) { return { init: function(id) { var self = this; self.sniff(id); var $img = ''; var $inputField = ''; }, sniff:

第九周作业 实现图片压缩

背景: 现在的网站为提升与用户的交互,上传文件是难免的,用户上传的图片多种多样,方面有文件大小,尺寸,等等为了处理此类的问题.服务器端必须实现对用户上传的图片进行相应的处理以适应网站的需要.其中最重要的就是压缩图片,将用户上传的图片压缩成宽度等比里大小的图片. 实现方式: java实现图片压缩:java有实现图片压缩的jar包,压缩的源文件的格式包括bmp,jig,jpg等等,还有的是压缩动态图片jar,但要购买.价格是好像要几百块人民币.接下里演示的是一个实现简单图片压缩的代码,不包括动态图片

UEditor之实现配置简单的图片上传示例

开心一笑 下班后,阿华到楼下小超市买毛巾,刚买完出来,就遇到同一办公楼里另一家公司的阿菲,之前与她远远的有过几次眼神交流,但从没说过话,"买毛巾啊",看着阿华手里的毛巾,阿菲先开口了. 阿华回到:"是啊,这里的老板眼神太好了,我不敢偷,就只有买了." 阿菲一下就哈哈笑了,配合到:"哇,原来你是小偷." 阿华:"嘘,小声点,其实主要原因是--"阿华指着自己的脑袋接着说到:"你看,我是个有头有脸的人,所以还是要用用毛巾的