java实现图片压缩的思路与代码

 更新时间:2016年03月23日 14:59:35   作者:有妳很满促  
这篇文章主要为大家详细介绍了java实现图片压缩的思路与代码,将较大的图片按照指定的宽高,以宽为基准,或高为基准按照等比例压缩图片,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了java实现图片压缩的相关代码,供大家参考,具体内容如下

import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
 
import javax.imageio.ImageIO;
 
public class ImageProcess {
 /**
  * 图片
  */
 private Image img; 
 /**
  * 宽度
  */
 private int width; 
 /**
  * 高度
  */
 private int height; 
 /**
  * 文件格式
  */
 private String imageFormat;
 /** 
  * 构造函数 
  * @throws Exception 
  */ 
 public ImageProcess(InputStream in,String fileName) throws Exception{ 
   //构造Image对象 
   img = ImageIO.read(in); 
   //得到源图宽 
   width = img.getWidth(null);
   //得到源图长 
   height = img.getHeight(null);
   //文件格式
   imageFormat = fileName.substring(fileName.lastIndexOf(".")+1);
 } 
 /** 
  * 按照宽度还是高度进行压缩 
  * @param w int 最大宽度 
  * @param h int 最大高度 
  */ 
 public byte[] resizeFix(int w, int h) throws IOException { 
   if (width / height > w / h) { 
     return resizeByWidth(w); 
   } else { 
     return resizeByHeight(h); 
   } 
 } 
 /** 
  * 以宽度为基准,等比例放缩图片 
  * @param w int 新宽度 
  */ 
 public byte[] resizeByWidth(int w) throws IOException { 
   int h = (int) (height * w / width); 
   return resize(w, h); 
 } 
 /** 
  * 以高度为基准,等比例缩放图片 
  * @param h int 新高度 
  */ 
 public byte[] resizeByHeight(int h) throws IOException { 
   int w = (int) (width * h / height); 
   return resize(w, h); 
 } 
 /** 
  * 强制压缩/放大图片到固定的大小 
  * @param w int 新宽度 
  * @param h int 新高度 
  */ 
 public byte[] resize(int w, int h) throws IOException { 
   // SCALE_SMOOTH 的缩略算法 生成缩略图片的平滑度的 优先级比速度高 生成的图片质量比较好 但速度慢 
   BufferedImage image = new BufferedImage(w, h,BufferedImage.TYPE_INT_RGB );  
   image.getGraphics().drawImage(img, 0, 0, w, h, null); // 绘制缩小后的图 
   ByteArrayOutputStream baos = new ByteArrayOutputStream();
   ImageIO.write(image, imageFormat, baos);
   return baos.toByteArray();
 } 
}

以上就是本文的全部内容,希望对大家的学习有所帮助,轻松实现图片压缩操作。

相关文章

  • 在Spring环境中正确关闭线程池的姿势

    在Spring环境中正确关闭线程池的姿势

    这篇文章主要介绍了在Spring环境中正确关闭线程池的姿势,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-04-04
  • java实现发送邮箱验证码

    java实现发送邮箱验证码

    这篇文章主要为大家详细介绍了java实现发送邮箱验证码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • 解决weblogic部署springboot项目步骤及可能会出现的问题

    解决weblogic部署springboot项目步骤及可能会出现的问题

    这篇文章主要介绍了解决weblogic部署springboot项目步骤及可能会出现的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • spring aop action中验证用户登录状态的实例代码

    spring aop action中验证用户登录状态的实例代码

    本篇文章主要介绍了spring aop action中验证用户登录状态的实例代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-07-07
  • MyBatis-Plus中公共字段的统一处理的实现

    MyBatis-Plus中公共字段的统一处理的实现

    在开发中经常遇到多个实体类有共同的属性字段,这些字段属于公共字段,本文主要介绍了MyBatis-Plus中公共字段的统一处理的实现,具有一定的参考价值,感兴趣的可以了解一下
    2023-08-08
  • JAVA多线程的使用场景与注意事项总结

    JAVA多线程的使用场景与注意事项总结

    这篇文章主要给大家介绍了关于JAVA多线程的使用场景与注意事项的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者使用java具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-03-03
  • 基于java web获取网页访问次数代码实例

    基于java web获取网页访问次数代码实例

    这篇文章主要介绍了基于java web获取网页访问次数代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02
  • Python爬虫之爬取2020女团选秀数据

    Python爬虫之爬取2020女团选秀数据

    本文将对比《青春有你2》和《创造营2020》全体小姐姐,鉴于两个节目的数据采集和处理过程基本相似,在使用Python做数据爬虫采集的章节中将只以《创造营2020》为例做详细介绍。感兴趣的同学可以照猫画虎去实操一下《青春有你2》的数据爬虫采集,需要的朋友可以参考下
    2021-04-04
  • java中的抽象类和接口定义与用法详解

    java中的抽象类和接口定义与用法详解

    在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类
    2021-10-10
  • IDEA项目如何实现打jar包

    IDEA项目如何实现打jar包

    这篇文章主要介绍了IDEA项目如何实现打jar包问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03

最新评论