在前端的页面开发过程,图片的压缩一直是相当重要的一件事。之前使用grunt的图片压缩插件,感觉没啥实际的效果。最后,根据从网上找的资料,发现https://tinypng.com/这个网站的图片压缩效果是非常好的。如果是几张图片,那么通过网页操作就可以进行了。

这里介绍的是如果基于Java API来进行批量图片压缩。
在调用SDK前需要获得一个appKey,用邮箱注册就好了。
获取appKey地址:https://tinypng.com/developers

具体使用步骤:

1、引入TinyPng的jar包,我使用maven导入

<dependency><groupId>com.tinify</groupId><artifactId>tinify</artifactId><version>RELEASE</version>
</dependency>

2、注册APP Key

public class Example {public static void main(String[] args) {Tinify.setKey("YOUR_API_KEY"); // Tiny官网注册一个就好了}
}

3、压缩图片

Source source = Tinify.fromFile("unoptimized.jpg");
source.toFile("optimized.jpg");

4、压缩并调整图片大小

Source source = Tinify.fromFile("large.jpg");
Options options = new Options().with("method", "fit").with("width", 150).with("height", 100);
Source resized = source.resize(options);
resized.toFile("thumbnail.jpg");

method总共有scalefit以及cover三种方式:
scale:按比例缩放图片,必须提供高度或者宽度,不需要同时提供两者。
fit:让图片在指定的大小内,需要同时提供高度和宽度,会有一边存在留白的内容。
cover:剪切图片到指定大小,需要同时提供高度和宽度,系统根据图片自动剪切出有价值的部分。

5、批量压缩图片
这个类是用来批量压缩图片资源的,能够对一个目录下的图片进行批量压缩。

public class TinyPngMain {public static void main(String[] args) throws IOException {String appKey = ""; // Tiny官网注册一个就好了Tinify.setKey(appKey);float scale = 1.0f;scale = 1.5f;String src = "D:/imgs/normal";String dest = "D:/imgs/x1.5";tinyFold(src, dest, Boolean.FALSE, Boolean.FALSE, scale);}public static void tinyFold(String srcFoldPath, String destFoldPath, boolean recursion, boolean keepStructure, float scale) throws IOException {File srcFold = new File(srcFoldPath);if (srcFold.isFile()) {System.out.println(String.format("%s===>%s", srcFoldPath, destFoldPath));tinyOneFile(srcFoldPath, destFoldPath, scale);return;}File destFold = new File(destFoldPath);if (!destFold.exists()) {destFold.mkdir();}File[] subFiles = srcFold.listFiles();if (subFiles == null || subFiles.length == 0) {return;}for (File subFile: subFiles) {if (subFile.isDirectory()) {if (recursion) {// 需要迭代String recurisonDestFoldPath = destFoldPath;if (keepStructure) {// 保持结构不变String foldName = subFile.getName();recurisonDestFoldPath = String.format("%s/%s", destFoldPath, foldName);}tinyFold(subFile.getAbsolutePath(), recurisonDestFoldPath, recursion, keepStructure, scale);}} else {// 如果是文件那么dest带上文件名String name = subFile.getName();String destFilePath = String.format("%s/%s", destFoldPath, name);tinyFold(subFile.getAbsolutePath(), destFilePath, recursion, keepStructure, scale);}}}public static void tinyOneFile(String filePath, String outputPath, float scale) throws IOException {if (scale == 1.0f) {Source source = Tinify.fromFile(filePath);source.toFile(outputPath);} else {Source source = Tinify.fromFile(filePath);Image image = ImageIO.read(new File(filePath));int width = image.getWidth(null);int realWidth = new BigDecimal(((double) width / scale)).setScale(0, BigDecimal.ROUND_HALF_UP).toBigInteger().intValue();
//          System.out.println(new File(filePath).getName() + ": " + realWidth);Options options = new Options().with("method", "scale").with("width", realWidth);Source resized = source.resize(options);resized.toFile(outputPath);}}
}

官网Java API
https://tinypng.com/developers/reference/java

使用Tiny作为工具进行图片压缩相关推荐

  1. 【PC工具】图片压缩哪家强!tinyPNG图片压缩工具

    不算云服务软件,可能大家最喜欢的应该就是在线(网页)软件了,网页软件功能强大,使用方便,打开浏览器就能用,可以免去软件安装的耗时,也能避免硬盘空间的占用.今天给大家分享一个在线的图片压缩网站:http ...

  2. 使用yx-tiny命令行工具进行图片压缩

    平时开发的时候,我们用到图片基本都是ui给到我们的.或者是从PS.蓝湖或者慕客上面切图导出来的图片,这些都是未经过压缩的,体积都比较大,这里就有了可优化空间 闲话不多说,直接介绍该工具的使用 1. 安 ...

  3. 记一次图片压缩内存溢出的问题

    记一次遇见的问题: 起因:Web应用在后台需要展示许多图片,于是页面出现卡顿甚至失去连接.一次性需要加载出60多张1.6M图片. 查看的文章: 1.前端|加载的图片太多或者太大怎么办(上) 2.jav ...

  4. 掌握这些图片无损压缩工具,轻松搞定图片压缩

      对于经常要处理图片素材的小伙伴来说,随着图片数量的增多,不仅容易占用我们电脑的存储空间,还会影响电脑的运行速度.那我们应该怎么解决这个问题呢? 其实只要把图片大小进行压缩,就可以减少它们占据的存储 ...

  5. 图片压缩大小电脑怎么操作?3秒教你图片怎么压缩大小

    不知道大家是否跟我一样,因为工作原因在电脑上会保存许多图片素材,但时间久了,图片越来越多,电脑的内存却越来越小,万分影响我们电脑的运行速度.在这种情况下,我们可以将图片进行压缩,这样既能减少电脑的存储 ...

  6. 拖拽批量上传图片如何保证 顺序_图片压缩神器和图片分割工具,美工设计和运营终于得救了...

    想要快速互联网干货技巧? 请(置顶)星标我们 好不容易写好文案,设计好长图海报,上传到微信公众号,竟然提示上传图片体积不得超过5M,怎么办?怎么办? 不得已,只好又返回Ps里降低图片品质,换成有损格式 ...

  7. java图像处理002---JAVA图片压缩_图片缩放_图片按照比例缩放_图片指定长宽缩放_Java使用google开源工具Thumbnailator实现图片压缩

    JAVA技术交流QQ群:170933152 前言 作为靠谱的java服务端程序员,图片这个事情一直是个头疼的事情. 现在很多网站上,都有上传图片这个功能,而图片对于现在的很多手机来说,拍摄出来的都是高 ...

  8. 图片压缩网址和工具---TinyPNG

    图片压缩利器:TinyPNG 原文出自:点我 TinyPNG(官方网址:https://tinypng.com)是一个非常不错的图片压缩工具,在保持alpha通道的情况下对PNG的压缩可以达到1/3之 ...

  9. Java使用google开源工具Thumbnailator实现图片压缩

    前言 作为靠谱的java服务端程序员,图片这个事情一直是个头疼的事情. 现在很多网站上,都有上传图片这个功能,而图片对于现在的很多手机来说,拍摄出来的都是高清图片,分辨率也是相当的高,当然占用的存储空 ...

最新文章

  1. C#入门篇5-6:流程控制语句 foreach
  2. 基于机器学习的捡球机器人设计与实现(探索)第4篇——机械设计)
  3. 动态规划-装配线调度
  4. java多线程------实现Runnable接口创建多进程,实现资源共享
  5. php代码编辑器6,优秀的PHP代码编辑器_Blumentals Rapid PHP V13.6 免费版
  6. 全球加速产品 方便更多学生获得申请名校的机会
  7. centos7 最小化安装 无 ifconfig,netstat 的安装
  8. 20145209刘一阳《JAVA程序设计》第1周学习总结
  9. rust 使用国内镜像,快速安装方法
  10. 用R进行文本挖掘与分析--软件分词统计词频
  11. 产品策划五:App升级系统策划方案
  12. Python学习之【Django】
  13. 【Linux】定时任务crontab和at命令详解
  14. 自己收藏的两款夹娃娃PHP源码
  15. oracle单实例通过dataguard迁移到RAC 转
  16. 项目上线 | 兰精携手盖雅工场,数智驱动绿色转型
  17. arduino智能浇花系统_基于Arduino Android的家庭智能浇花系统设计与实现
  18. python作业4 文件项
  19. 屏幕适配之带虚拟按键手机屏幕适配
  20. 近期Google发布了关于Google Play应用商店的重要调整

热门文章

  1. odps列转行之trans_array/trans_cols
  2. 关于我的计算机的英语作文,关于电脑的英文作文精选5篇
  3. 手把手教你10分钟部署php项目
  4. 从OA到COP,致远互联成引领行业的“灯塔”
  5. iMovie 入门教程:视频编辑的利器
  6. 计算机基础课程范文,计算机基础课程计报告范文.doc
  7. 第三组(geomystory)需求经理:头脑风暴+核心竞争力+功能集+NABCD+用例文档+功能说明书+技术说明书...
  8. HFSS设计双脊喇叭天线之路——天线结构与参数设计
  9. 以管理员身份运行闪退怎么解决_批处理闪退、运行中断等问题的处理方法
  10. 基于循环神经网络的主题模型