最近搞项目发现前端访问网页时,如果网页中的图片过大,加载速度就变得很慢,于是就在后台做了个图片压缩。有两种方法,但是图片是压缩了。但是访问速度依然很慢,甚至比以前更慢(不是因为图片过大的原因)。
在这儿先把这两种方法记下来,以后有时间再研究下怎么回事。

1.利用java原生的imageIO类进行裁剪

//url 是压缩之前 图片在服务器中的地址
String newUrl = url.substring(url.indexOf("/api"), url.lastIndexOf("."));
//图片的 类型  .jpg  或者.png 等
String pictureType = url.substring(url.lastIndexOf("."), url.length());
//获取本地路径
String classPath=ImgCompress.class.getClassLoader().getResource("").getPath();
String newUrl1 = classPath.substring(1, classPath.indexOf("/api/"));
// 拼接后 压缩之前图片的地址
String fromPic = newUrl1 + newUrl + pictureType;
//压缩后 图片的存放地址
String toPic = newUrl1 + newUrl + "_min" + pictureType;

这儿踩了个坑,花了很长时间,写入文件的时候,不能用“http://….”这样的地址,会报文件找不到的错误,必须用本地路径,以上是根据类获取本地路径然后重新拼接,大家可以根据自己的项目做适当的修改。

ImgCompress imgCom = new ImgCompress(fromPic);
imgCom.resize(200, 200, toPic);/**
* 构造函数
*/
public ImgCompress(String fileName) throws IOException {File file = new File(fileName);// 读入文件img = ImageIO.read(file);      // 构造Image对象
}/*** 强制压缩/放大图片到固定的大小** @param w int 新宽度* @param h int 新高度*/
public void resize(int w, int h, String toPic) throws IOException {
// SCALE_SMOOTH 的缩略算法 生成缩略图片的平滑度的 优先级比速度高 生成的图片质量比较好 但速度慢BufferedImage image = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);image.getGraphics().drawImage(img, 0, 0, w, h, null); // 绘制缩小后的图File destFile = new File(toPic);FileOutputStream out = new FileOutputStream(destFile); // 输出到文件流// 可以正常实现bmp、png、gif转jpgJPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);encoder.encode(image); // JPEG编码out.close();
}

最后再把topic拼接成 服务器上的 地址返回就行了。
优点:速度快 缺点:只能按照图片大小进行压缩 不能压缩图片质量

2.利用图片压缩插件thumbnailator进行压缩
首先要下载 thumbnailator-0.4.3.jar jar包
下载地址:http://www.java2s.com/Code/Jar/t/Downloadthumbnailator042alljar.htm

Thumbnails.of(fromPic).size(200, 200).keepAspectRatio(false).allowOverwrite(true).toFile(toPic);

详情请看 thumbnailator官网 有更多的压缩方式
优点:代码简单,只用一行代码就可搞定,压缩方式多,可以压缩大小,压缩质量,旋转,加水印等 缺点:压缩速度慢(不知道是不是我写的代码有问题,一张200多K的图片压缩也要20秒)

Java 后台做图片压缩的两种方法相关推荐

  1. java 图片压缩100k_Java 实现图片压缩的两种方法

    问题背景. 典型的情景:Nemo社区中,用户上传的图片免不了要在某处给用户做展示. 如用户上传的头像,那么其他用户在浏览该用户信息的时候,就会需要回显头像信息了. 用户上传的原图可能由于清晰度较高而体 ...

  2. java对文件进行压缩的两种方法

    在工作中,我们或多或少都会接触到文件的压缩和解压,在window系统中,我们只需下载一个能对文件进行解压缩的应用即可,但如果让我们自己动手写对文件压缩的代码,顿时就头大了. 在java中,我们都知道输 ...

  3. qt 加载 图片旋转_QT 实现图片旋转的两种方法

    第一种方案 使用 QPixmap 的 transformed 函数来实现旋转,这个函数默认是以图片中心为旋转点,不能设置旋转的中心点,使用如下: QMatrix matrix; matrix.rota ...

  4. android 画布叠加,Android实现图片叠加效果的两种方法

    本文实例讲述了Android实现图片叠加效果的两种方法.分享给大家供大家参考,具体如下: 效果图: 第一种: 第二种: 第一种是通过canvas画出来的效果: public void first(Vi ...

  5. android 图片叠加xml,Android实现图片叠加效果的两种方法

    本文实例讲述了Android实现图片叠加效果的两种方法.,具体如下: 效果图: 第一种: 第二种: 第一种是通过canvas画出来的效果: public void first(View v) { // ...

  6. pytorch加载自己的图片数据集的两种方法

    目录 ImageFolder 加载数据集 使用pytorch提供的Dataset类创建自己的数据集. Dataset加载数据集 接下来我们就可以构建我们的网络架构: 训练我们的网络: 保存网络模型(这 ...

  7. D3D中2D图片的绘制两种方法

    2014/09/19 (转载自:http://blog.csdn.net/rabbit729/article/details/6388703) 想要在D3D中加载2D图片可以使用如下两种方法(我只想到 ...

  8. Java生成二维码的两种方法

    本文介绍Java生成二维码的两种方法,这两种方法都依赖于google提供的二维码依赖包. 一种是自己写工具类,代码可以网上抄. 另一种是使用hutool第三方工具类的依赖包,不用自己抄代码. 一.自定 ...

  9. Java中的string定义的两种方法和区别

    java中的String定义的两种方法和区别 第一种:new方式 String s1 = new String("hello world"); String s2 = new St ...

  10. Java 跨平台获取 MAC 地址的两种方法

    前言 有时我们因为软件授权或者其它需要获取主机唯一标识而需要获取用户主机的MAC地址,而本文则将介绍如何通过Java来实现跨平台获取MAC地址的两种方法,同时具体的代码也已上传到GitHub. 如果不 ...

最新文章

  1. 四大指标超现有模型!少样本的无监督图像翻译效果逆天| 技术头条
  2. 虚函数中的变量作用域问题
  3. 100个vc小项目开发:二、一步一点设计音乐播放器 [I]
  4. 前端编码风格规范(3)—— JavaScript 规范
  5. wpf 点击按钮弹出选择框_关于WPF的弹出窗口
  6. python七段数码管倒计时_python实现七段数码管和倒计时效果
  7. b站电脑客户端_B站(哔哩哔哩) 视频批量下载工具#电脑版##更新
  8. 【IDE】我的花里胡哨VS
  9. Java同步组件之CountDownLatch,Semaphore
  10. Freemarker 的常见控制结构写法(ZT)
  11. 百度Apollo计划跟踪:Apollo 3.0前言
  12. 电影《暮光之城》不得不爱
  13. VR家装丨足不出户就能“浸”距离体验入住效果
  14. 一个优秀IT专家的成长历程-献给所有的颓废或即将颓废的人们
  15. 欧盟人工智能立法提案的核心思想 及未来影响分析
  16. matlab.^的高级用法(数的矩阵次方)
  17. python生成图文并茂的pdf--财务报表(五)如何生成并列的图表
  18. mysql bigd_MySQL基础
  19. matplotlib.pyplot plt绘图颜色大全,及plt.plot()的使用
  20. Linux提权,吃透这篇文章就够了

热门文章

  1. 报税远程服务器返回错误,紧急 | 增值税申报失败,调用系统服务出错,怎么办?...
  2. 监听浏览器刷新事件,拦截浏览器返回,js监听移动端浏览器页面显示、隐藏
  3. Eclipse配置优化
  4. 推荐效果线上评测:AB测试平台的设计与实现
  5. chrome(谷歌浏览器)固定到任务栏,点击之后出现两个图标-原因及解决办法
  6. 使用多个路由器有线桥接实现无线漫游
  7. 一个单调递增的数组 被人随机拿出一个数 你怎么找到这个数
  8. 爬取某app的古诗文翻译注释等
  9. Activiti目录(五)驳回、重新发起、取消流程
  10. windows系统电脑实用快捷键