public class ReduceImg {/**
     * 指定图片宽度和高度和压缩比例对图片进行压缩(如果rate>0,则widthdisheightdist没用)
     *
     * @param imgsrc
     *            源图片地址
     * @param imgdist
     *            目标图片地址
     * @param widthdist
     *            压缩后图片的宽度
     * @param heightdist
     *            压缩后图片的高度
     * @param rate
     *            压缩的比例
     */
    public static void reduceImg(String imgsrc, String imgdist, int widthdist, int heightdist, Float rate) {try {File srcfile = new File(imgsrc);// 检查图片文件是否存在
            if (!srcfile.exists()) {System.out.println("文件不存在");}// 如果比例不为空则说明是按比例压缩
            if (rate != null && rate > 0) {//获得源图片的宽高存入数组中
                int[] results = getImgWidthHeight(srcfile);if (results == null || results[0] == 0 || results[1] == 0) {return;} else {//按比例缩放或扩大图片大小,将浮点型转为整型
                    widthdist = (int) (results[0] * rate);heightdist = (int) (results[1] * rate);}}// 开始读取文件并进行压缩
            Image src = ImageIO.read(srcfile);// 构造一个类型为预定义图像类型之一的 BufferedImage
            BufferedImage tag = new BufferedImage((int) widthdist, (int) heightdist, BufferedImage.TYPE_INT_RGB);//绘制图像  getScaledInstance表示创建此图像的缩放版本,返回一个新的缩放版本Image,按指定的width,height呈现图像
            //Image.SCALE_SMOOTH,选择图像平滑度比缩放速度具有更高优先级的图像缩放算法。
            tag.getGraphics().drawImage(src.getScaledInstance(widthdist, heightdist, Image.SCALE_SMOOTH), 0, 0, null);//创建文件输出流
            FileOutputStream out = new FileOutputStream(imgdist);//将图片按JPEG压缩,保存到out            JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);encoder.encode(tag);//关闭文件输出流
            out.close();} catch (Exception ef) {ef.printStackTrace();}}/**
     * 获取图片宽度和高度
     *
     * @param file 图片路径
     * @return 返回图片的宽度
     */
    public static int[] getImgWidthHeight(File file) {InputStream is;BufferedImage src;int result[] = { 0, 0 };try {// 获得文件输入流
            is = new FileInputStream(file);// 从流里将图片写入缓冲图片区
            src = ImageIO.read(is);result[0] =src.getWidth(null); // 得到源图片宽
            result[1] =src.getHeight(null);// 得到源图片高
            is.close();  //关闭输入流
        } catch (Exception ef) {ef.printStackTrace();}return result;}public static void main(String[] args) {File srcfile = new File("f:/1524901712273.jpg");File distfile = new File("f:/1.jpg");System.out.println("压缩前图片大小:" + srcfile.length());reduceImg("f:/1524901712273.jpg", "f:/1.jpg", 500, 500, 0.8f);reduceImg("f:/1.jpg", "f:/2.jpg", 500, 500, 1.6f);System.out.println("压缩后图片大小:" + distfile.length());}
}

压缩图片大小(根据比例,或直接给定宽高)相关推荐

  1. 【数字图像处理】Python使用PIL库压缩图片大小——按比例压缩

    方法 网上的都是按照固定的图像大小来进行压缩,本文给出按照比例来压缩的方法--智能压缩: from PIL import Imageinfile = 'cxq1.jpg' outfile = 'cxq ...

  2. 电脑怎么压缩图片大小,4个通用方法分享

    电脑怎么压缩图片大小?我相信这个问题很多小伙伴都遇到过的.我们压缩图片大小的主要原因是为了优化网站.应用程序或移动设备的性能.大尺寸的图片文件需要更多的存储空间和带宽,这将导致网页加载速度变慢,浪费用 ...

  3. 如何快速在线压缩图片大小(包括放大、缩小图片,指定图片尺寸和压缩图片品质)

    在日常的学习和工作中,我们经常会遇到压缩和修改图片大小的问题,如果我们不是专业的设计人员,一般电脑上不会安装ps软件,那么我们如何通过网页,在线快速简单的来完成操作呢?下面小编和大家一块分享下具体如何 ...

  4. Java压缩图片大小

    使用场景: 1.当使用图片上传功能时,上传图片太大,造成对服务器资源过多的占用2.客户端上传图片尺寸大小不一,前端需要展示给用户固定尺寸时,可通过java进行对上传图片统一进行处理 功能预览 1.压缩 ...

  5. java 使用Thumbnailator 上传图片 并压缩图片大小

    http://www.cnblogs.com/miskis/p/5500822.html java 上传图片 并压缩图片大小 Thumbnailator 是一个优秀的图片处理的Google开源Java ...

  6. 压缩图片_Word快速压缩图片大小

    (每周一.三.五更新) 有朋友发消息说,TA的一份Word文档中,由于插入了很多图片,所以文件大小变得很大,无法上传到网上的工作平台上.询问快速解决的办法.其实在Word里,有专门调整图片大小的工具, ...

  7. 【Python黑科技】图片太大不能上传?三种压缩图片大小的方法(代码注释详细)

    目录 实现效果 原图大小8.46MB PIL库quality降低图片质量方式压缩图片366KB PIL库thumbnail压缩图片大小来压缩图片985KB OpenCV缩放图片大小来压缩图片 177K ...

  8. 图片太大,怎么压缩图片大小?

    图片太大,怎么压缩图片大小?我们知道图片被应用到生活的方方面面,所以我们经常会遇到因图片体积大半天打不开,或者是因为图片大好传送不过去.再或者因为图片太多内存不够等等情况,总之可能会带来很多我们预想不 ...

  9. 如何免费压缩图片-批量免费压缩图片大小的软件

    如何免费压缩图片,今天给大家分享一款免费压缩图片的软件,支持任意格式的照片压缩,不仅可以压缩照片还可以放大图片,支持批量照片自动水印.批量关键词采集全网图片,导入链接批量下载图片,整站图片下载导出.详 ...

  10. 如何降低图片kb大小?教你两个快速压缩图片大小的方法!

    我们在日常拍照过程中可能不注意照片kb大小,但当需要发送照片时,会发现照片太大不方便传送.或者当你需要上传到一些需要照片大小的场景时,找到照片kb太大了,上传不了,需要降低照片kb大小,这时候就要进行 ...

最新文章

  1. Android:基础控件按键文本框输入框制作登录页面
  2. node.js 没有转发_如何用Nodejs编写一个定时消息提醒应用?
  3. 获取URL中 后面的参数值
  4. HDU 1715 大菲波数 (大数问题)
  5. 让Fiddler能够检测到localhost的http数据
  6. LIRe提供的6种图像特征描述方法的评测
  7. Keil5二步解决中文乱码,注释乱码问题
  8. 双线性映射:零知识证明的引擎
  9. 联想笔记本进入不了BIOS的解决方法
  10. SSL证书错误怎么办?浏览器常见SSL证书报错解决办法
  11. LWC 66: 759. Employee Free Time
  12. WIN32,GetBitmapBits与GetPixel
  13. provide 与 inject 的使用
  14. Loadrunner11.00破解方法
  15. 二元函数可微与偏导数_二元函数的连续、偏导数、可微之间的关系
  16. javascript 关于年龄计算
  17. 公众号使用微信sdk的正确姿势
  18. 物联网安全解决方案_如何设计具有安全性的自制物联网解决方案
  19. 综合案例:播放器 学习
  20. 欢乐水杯(happy glass)的流体实现! Cocos Creator!

热门文章

  1. STM32之USART:RXD和TXD管脚互换、接收和发送的电平极性反转、支持数据高位与低位反序发送或接收
  2. Python近期练习小案例
  3. python毒酒检测_一道著名的毒酒问题
  4. 影院售票系统设计与开发 毕业设计毕设参考
  5. 二十年后我发明了保姆机器人作文_未来的保姆机器人作文
  6. 003_wz_wed_DL_课程一第二周编程题(Logistic回归;神经网络思维;)
  7. lisp语言画地物符号_地图符号分为地物符号和特殊符号。
  8. 如何查看大型工程源代码(非常不错)
  9. 年赚千万的京东无货源被禁止?天猫店群如愿当上一哥
  10. NMS和Soft-NMS的原理和Pytorch代码实现