使用java几十行代码实现一个高质量图片压缩程序,再也不用去自己找网络的压缩程序啦!而且很多网上的工具还有水印或者其他的限制,自己动手写一个简单的应用,是再合适不过了。

一、实现原理

1、声明两个字符串变量,分别是要压缩图片的路径和压缩后图片的存放路径

private String brfore_image_path = "D:01.jpg";private String after_image_path = "D:emp";

2、利用字符串的方法lastIndexOf,找到和.最后出现的位置,目的是匹配到图片文件名。

int begin = brfore_image_path.lastIndexOf("");int end = brfore_image_path.lastIndexOf(".");String image_name=brfore_image_path.substring(begin+1,end);

3、创建BufferedImage对象来读取需要压缩的图片

4、获取原始图片的一系列参数

int in_width = bi.getWidth();//图宽int in_height = bi.getHeight();//图高int in_minx = bi.getMinX();//BufferedImage的最小xint in_miny = bi.getMinY();//BufferedImage的最小yint type = bi.getType();//返回图像类型int out_width = in_width;//要输出图像的宽int out_height = in_height;//要输出图像的高int multiple = 1;//系数

5、压缩核心代码,可自己调试找最适合的临界值,我选取的是大于1000000像素点时就压缩一半

while(out_width * out_height > 1000000){ out_width = out_width/2; out_height = out_height/2; multiple = multiple * 2;} 

6、创建新的BufferedImage对象,把新的参数传进去,并根据系数把一个个像素点写进图片。

for(int i=0;i

7、把新的BufferedImage对象写到你要保存压缩图片的地址就好了。

二、完整代码

public class CompressImage { private String brfore_image_path = "D:01.jpg"; private String after_image_path = "D:emp";  public CompressImage(){ } public void get_image(){ int begin = brfore_image_path.lastIndexOf(""); int end = brfore_image_path.lastIndexOf("."); String image_name = brfore_image_path.substring(begin+1,end); File in_file = new File(brfore_image_path); BufferedImage bi = null; try { bi = ImageIO.read(in_file); }catch(Exception e) { e.printStackTrace(); } int in_width = bi.getWidth(); int in_height = bi.getHeight(); int in_minx = bi.getMinX(); int in_miny = bi.getMinY(); int type = bi.getType(); int out_width = in_width; int out_height = in_height; int multiple = 1;  //具体的值可调 while(out_width * out_height > 1000000){ out_width = out_width/2; out_height = out_height/2; multiple = multiple * 2; }  BufferedImage out_image_martrix = new BufferedImage(out_width, out_height, type); for(int i=0;i

三、总结

代码挺简单的,但是自己动手实现完成一个小功能也不一样哦,而且我觉得压缩的质量还挺高的,所以把自己的实现思路和代码分享出来。有兴趣的童鞋可以自己复制上面的完整代码,只要改成自己的路径就可以运行了。

图片太大_图片太大?手把手教你如何用java实现一个高质量图片压缩程序相关推荐

  1. 手把手教你如何用Python制作一个电子相册?末附python教程

    这里简单介绍一下python制作电子相册的过程,主要用到tkinter和pillow这2个库,tkinter用于窗口显示照片,pillow用来处理照片,照片切换分为2种方式,一种是自动切换(每隔5秒) ...

  2. 用python画皇冠_【推荐】手把手教你如何用Python画一棵漂亮樱花树含源码

    最近给大家整理了一下,挑了一些我觉得不错的代码分享给大家手把手教你如何用Python画一棵漂亮樱花树含源码. 动态生成樱花 效果图(这个是动态的): import turtle as T import ...

  3. python樱花树代码_【推荐】手把手教你如何用Python画一棵漂亮樱花树含源码

    最近,我整理出来,并选择一些代码,我觉得是好与你分享教你如何画一个美丽的樱花与Python源代码树.动态生成樱花进口龟Timport randomimport时间#画樱花的躯干(60 t) def树( ...

  4. 用python画几个东西怎么画_一步一步教你如何用Python画一个滑稽

    先看一下效果 up主是一个计算机专业的学生,平时喜欢自己学习一些东西,写博客.以前都是在CSDN上写博客,不过我觉得在B站写博客和大家分享一点自己学习的东西也不错嘿嘿.欢迎大家评论或者私信up,一起交 ...

  5. 时间锁,手把手教你如何用Java设置随时间变化的动态密码

    时间锁:顾名思义就是用密码随时间变化而变化. 具体实现步骤如下: 步骤一:我们需要明确我们需要一个什么样的类,我想的是需要一个数据类,如下 步骤二:其次我们需要明确这个类里面需要实现那些功能?以简单的 ...

  6. 用JAVA写一个画图小程序(JAVA 大作业)

    第一次写博客 且是稍微大点的程序 看看就行 重新写的在这,更加清晰明了:点击进入:用JAVA写一个画图小程序(JAVA 大作业)重排版本 设计思路 首先我直接去了Windows自带画图程序去实践模拟, ...

  7. java编写爬虫_手把手教你从零开始用Java写爬虫

    本文将手把手地教大家从零开始用Java写一个简单地爬虫! 目标 爬取全景网图片,并下载到本地 收获 通过本文,你将复习到:IDEA创建工程 IDEA导入jar包 爬虫的基本原理 Jsoup的基本使用 ...

  8. python远程桌面控制_手把手教你如何用Pycharm2020.1.1配置远程连接的详细步骤

    配置说明 使用Pycharm 2020.1.1 professional 专业版.(据说只有专业版可以远程连接)如果不是专业的伙伴,可以用校园邮箱注册一个专业版,免费的哦! 步骤 1. 设置Conne ...

  9. 手把手教你把Vim改装成一个IDE编程环境(图文)

    手把手教你把Vim改装成一个IDE编程环境(图文) By: 吴垠 Date: 2007-09-07 Version: 0.5 Email: lazy.fox.wu#gmail.com Homepage ...

最新文章

  1. 质数c语言欧拉筛选,Python|欧拉筛法求质数
  2. jmeter固定定时器使用与思考
  3. map.get(key)空指针异常_NPE空指针异常总结
  4. 滑动拼图验证码操作步骤:_拼图项目:一个不完整的难题
  5. 计算机三级上机考试题库,计算机三级数据库上机试题及答案
  6. VC.【转】窗口置于前台并激活的方法
  7. quartz定时任务配置
  8. 坚果Pro2刷入twrp rec
  9. 【转】美国百所大学招生网专页~
  10. 获取连续生成的100-200范围的随机数,直到生成的随机数与前一个随机数相等,停止运行
  11. Tyrion (含示例源码)
  12. 算法学习:归并排序, pta归并排序(递归法)
  13. Java系统程序Bug解决方法论(一) - 教程简介
  14. 通过USB连接越狱iPhone,SSH进入设备
  15. 批量更新用户mous余额
  16. C语言假设银行一年存利
  17. html选择确认,增值税发票选择确认平台
  18. 汇总各浏览器核心(js引擎及排版引擎)深究
  19. 如何快速在线扫描文档?Web TWAIN SDK 教你轻松解决
  20. 2021年中国轮式拖拉机供需现状及竞争格局分析,中国一拖市占率接近20%「图」

热门文章

  1. PHP+sqlsrv的分页实现
  2. WeixinJSBridge目前还能够直接使用的功能(2019)
  3. matlab之中文字体乱码处理
  4. Camera2点击对焦实现
  5. 洛谷3396 哈希冲突 【分块】
  6. Spring中实现自定义事件
  7. 利用JAVA计算TFIDF和Cosine相似度-学习版本
  8. 图片--Android加载图片导致内存溢出(Out of Memory异常)
  9. ibatis基础(五):删除指定id的单个对象
  10. [预告]将要推出编程方式事务管理祥解!