使用TinyPNG API压缩图片

在撰写论文的时候,美观,大气,上档次的图标能够很好地给自己的论文加分,好的可视化结果也能够让审稿人赏心悦目。但是有时候在可视化图片的时候有可能原始图像过大从而很占内存;这时候就希望能够是有一个无损压缩工具来压缩图像。目前笔者尝试过TinyPNG 感觉能够达到较好的压缩效果而且基本上不影响视觉效果。而且也有对应的安装包TinyGUI, TinyGUI 是网友根据TinyPNG提供的应用程序接口开发的本地桌面端工具。它具有以下特点:

  • 无单张图片最大5M的限制
  • 无压缩图片数量限制
  • 免费且使用简单,图片拖放到界面就可以压缩

桌面端使用教程

  1. TinyGUI需要用到TinyPNG的API,这里先打开Developer API,填入用户名和邮箱,然后点击“Get Your API key”。当页面显示“We have sent you an email with a link to your API key!” 就可以到邮箱找到收到的API key了。
  2. 打开TinyGUI,在“设置你的 API Key”下框中输入刚收到的API(有可能在垃圾箱里),再选择保存。
  3. 选择“选择图片文件”上传需要压缩的图片,或者直接拖拽图片到“将图片拖动到此处”区域
  4. 然后就可以开始等待图片压缩了,可以看到TinyPNG可以将1.5MB的图片压缩到637.4KB,压缩了57%,非常不错。

但是又到了但是环节。
本地桌面端工具用起来虽然比较方便,但是当图片比较多,或者图片存在多个文件夹下时就没那么方便了,作为一名程序猿 这时候当然想到的是用python来写一份调用API遍历文件夹的程序咯。

Python调用TinyPNG API 遍历文件夹压缩图片

同样的也需要使用上面的第一步来获取API key

# -*- coding:utf-8 -*-
# 使用tinypng API压缩项目图片
import tinify
import os
import time
from os.path import join, getsize
import math# 压缩图片的key
online_key_list = ["FCBMvlXLZzGKxwLBQ0CCl4hyrpLMWKt*","FCBMvlXLZzGKxwLBQ0CCl4hyrpLMWKt*",  # 可以继续添加  防止一个key不够
]# 获取key
online_key_list_iter = iter(online_key_list)
online_key = next(online_key_list_iter)
tinifyAPi = tinify.tinifydef size_format(size, dot=2):## 文件大小 单位转化if 1 <= size < 1024:human_size = str(round(size, dot)) + 'B'# 千字节 千字节 Kilo Byteelif math.pow(1024, 1) <= size < math.pow(1024, 2):human_size = str(round(size / math.pow(1024, 1), dot)) + 'KB'# 兆字节 兆 Mega Byteelif math.pow(1024, 2) <= size < math.pow(1024, 3):human_size = str(round(size / math.pow(1024, 2), dot)) + 'MB'# 吉字节 吉 Giga Byteelif math.pow(1024, 3) <= size < math.pow(1024, 4):human_size = str(round(size / math.pow(1024, 3), dot)) + 'GB'# 太字节 太 Tera Byteelif math.pow(1024, 4) <= size < math.pow(1024, 5):human_size = str(round(size / math.pow(1024, 4), dot)) + 'TB'return human_size# 在线压缩
def compress_online(sourcefile):global online_keycompresskey = online_keytinify.key = compresskeyrs = Falseoutputfile = sourcefileold_size = getsize(sourcefile)try:source = tinifyAPi.from_file(sourcefile)source.to_file(outputfile)new_size = getsize(outputfile)sub_size = old_size - new_sizeprint('保存路径:{} | 压缩前文件大小:{}; 压缩后文件大小:{}; 压缩比例:{:.2}%'.format(outputfile, size_format(old_size),size_format(new_size), sub_size / new_size * 100))rs = Truepassexcept tinify.AccountError:# Verify your API key and account limit.# 如果key值无效 换一个key继续压缩print("key值无效 换一个继续。。。")online_key = next(online_key_list_iter)compress_online(sourcefile)  # 递归方法 继续读取rs = Trueexcept tinify.ClientError:# Check your source image and request options.print("Check your source image and request options.")rs = Falsepassexcept tinify.ServerError:# Temporary issue with the Tinify API.# print("Temporary issue with the Tinify API. %s" % e.message)print("Temporary issue with the Tinify API.")rs = Falsepassexcept tinify.ConnectionError:# A network connection error occurred.print("网络故障。。。休息1秒继续")time.sleep(1)compress_online(sourcefile)  # 递归方法 继续读取rs = Truepassexcept Exception:# Something else went wrong, unrelated to the Tinify API.print("Something else went wrong, unrelated to the Tinify API.")rs = Falsepassreturn rsdef fileofdir_iterate(path):folderlist = os.listdir(path)  # 列举文件夹folderlist.sort()for item in folderlist:item_name = os.path.join(path, item)if os.path.isfile(item_name):compress_online(item_name)else:fileofdir_iterate(item_name)if __name__ == '__main__':dir_path = r"D:\Desktop\fig\figures\examples\GF2"fileofdir_iterate(dir_path)

上面的程序参考了:https://github.com/haoma2012/PythonProject/blob/master/ComPressPic.py。
这里作者直接把压缩后的图片替换了原始的图片,可以根据自己的需求来调整输出结果的存放位置。
以上便是本次分享。

如有疑问可联系:2458707789@qq.com; 备注 姓名+学校

使用TinyPNG API压缩图片相关推荐

  1. TinyPng批量压缩图片

    原文章:https://blog.csdn.net/weixin_38785881/article/details/90264129 注意:每月的前500次是免费,后续就要收费!!! 可以换邮箱重新申 ...

  2. java 多线程 压缩_Java 多线程拷贝文件夹并调用tinyPng算法接口压缩图片实现(生产消费变种)...

    线程模型 生产者Provider线程为一,主要进行深搜目录文件:. 消费者Consumer线程多个, 因为RPC服务调用时延较长, 启用多个线程请求服务. 持久化线程Persist 将已经消费的消息存 ...

  3. node 压缩图片_手搓一个TinyPng压缩图片的WebpackPlugin

    作者: JowayYoung 转发链接:https://mp.weixin.qq.com/s/eqsZwZPCX-GZyB-EOm3TwQ 前言 曾经发表过一篇性能优化的文章<「实践」细聊前端性 ...

  4. node 压缩图片_嗯,手搓一个TinyPng压缩图片的WebpackPlugin也SoEasy啦

    作者:JowayYoung 仓库:Github.CodePen 博客:掘金.思否.知乎.简书.头条.CSDN 公众号:IQ前端 联系我:关注公众号后有我的微信哟 特别声明:原创不易,未经授权不得对此文 ...

  5. node 压缩图片_嗯,手搓一个 TinyPng 压缩图片的 WebpackPlugin 也 SoEasy 啦

    (给前端大全加星标,提升前端技能) 作者:IQ前端 公号 / JowayYoung (本文来自作者投稿) 前言 曾经发表过一篇性能优化的文章<前端性能优化指南>,笔者总结了一些在项目开发过 ...

  6. 【Android 内存优化】图片文件压缩 ( Android 原生 API 提供的图片压缩功能能 | 图片质量压缩 | 图片尺寸压缩 )

    文章目录 一. 图片压缩 二. 图片文件压缩类型 三. Android 原生 API 提供的质量压缩 四. Android 原生 API 提供的尺寸压缩 一. 图片压缩 图片压缩 : ① 文件压缩 : ...

  7. Android apk瘦身之使用TinyPng压缩图片

    1 前言 Android apk太大了怎么办,有的时候需要减小apk的体积,例如上传到服务器的时候有文件大小的限制.百度一下,发现大致有以下几种方法: 使用混淆,减少代码体积 删除不使用的资源 减少使 ...

  8. 使用libjpeg-turbo库中的TurboJPEG API实现图片解压,缩放及压缩功能

    概述:前一篇博客中说到libjpeg-turbo的使用,有一些错误也在前篇博客中纠正了,现在呢,就用TurboJPEG API实现图片的解压,缩放,压缩. 1,直接上代码(简单粗暴,重要代码都加了注释 ...

  9. Java 中调用 Apache API 实现图片文件的 压缩 与 解压 实例

    < Java 中调用 Apache API 实现图片文件的 压缩 与 解压 > 为什么不直接使用 Java JDK 中自带的 API 呢?必须使用 Apache API 实现文件的压缩与解 ...

最新文章

  1. Spring autowire 自动装配简介
  2. tp5更改入口文件到根目录的方法分享
  3. C程序优化之路(二)
  4. B-树、B+树、B*树详解
  5. 算法:对象方式数组去重
  6. 小程序开发代码_快速学会微信小程序开发,无需懂代码!
  7. 程序员:代码全部替换成中文,你能接受吗?
  8. Java--Socket客户端,服务端通信
  9. Android下拉刷新上拉更多瀑布流(附源码)
  10. JavaScript的Date类的函数特殊处理导致的问题
  11. DW Basic Knowledge1
  12. 通达信交易服务器修改,通达信修改快捷键实现一键涨停买卖。
  13. 计算机专业学习目标计划怎么写,制定计算机学习计划范文3篇
  14. STC89C52单片机学习笔记(一)
  15. 在线自定义编辑网络拓扑图
  16. 2018年迎春杯复赛入围名单(三年级)
  17. Ubuntu桌面管理器
  18. 还在为英语学习发愁吗?身为程序员的你可能需要这样一份“宝典”(上)...
  19. 有关Windows10中诊断和反馈隐私设置
  20. oracle完整的练习,2021史上最全Oracle数据库基本操作练习题(含答案).docx

热门文章

  1. 【Camera专题】Qcom-你应该掌握的Camera调试技巧2
  2. Ctfshow web入门 PHP特性篇 web89-web151 全
  3. MySQL的主从复制、读写分离(amoeba)
  4. 个推clientId老是获取不到几点解决办法
  5. 范仲淹促进经济发展的办法
  6. SharePoint 2010图文安装教程
  7. unity 之 C# 懒人笔记【或与非】true false = false 另一哥反之
  8. 怎么才能提升自己工作能力?
  9. LaTeX之罗列多个公式
  10. 数据库升序和降序查询