使用TinyPng批量压缩图片
有什么不明白的地方,扫描右方二维码加我微信交流。
TinyPng支持在线压缩,但是页面最多支持上传20张图片,最大5M。如果我们的图片很多,目录又很复杂,手动上传下载,再替换掉会非常麻烦,所以我们使用脚本批量压缩。
有两点需要提前知道:
- 使用脚本批量压缩,每个月的免费额度为500张图片;
- 一张图片重复上传不会消耗额度;
批量压缩的步骤:
- 获取脚本(代码在下方);
- 使用python命令行安装tinify插件,命令如下:
sudo easy_install pip
sudo pip install –upgrade tinify - 在TinyPng网站的Developer API页面上注册一个账号,并成功获取到你的API key;
- 在python脚本中把API key填入(tinify.key赋值为API key);
- 修改脚本中的目录ImageFilePath目录为你的目标目录;
- 执行脚本,就可以看到脚本在依次上传,在tinypng的后台压缩完成之后自动下载并替换掉原来的图片了;
- 除了使用脚本压缩,还有大神做了一个简单的客户端,但同样要使用API key,点这里下载。
注意:
如果压缩的是图集,则很有可能因为图集的问题导致压缩图之后出现明显的噪点,出现这种情况时就把有噪点的图片换个目录再打图集,或者在本图集中再添加一张图片即可有效避免这个问题。
脚本内容
python具体的语法知识就不一一注释了,基本上看名字就能明白意思。
import tinify#导入tinify插件 import sys from os import path import os import os.path # Please reset the root directory Path ! ImageFilePath = ""#要压缩的图片的目录 tinify.key = ""#在以上步骤中获取到的API key #获取到本目录中的所有文件 def getFilesAbsolutelyPath(ImageFilePath): currentfiles = os.listdir(ImageFilePath) filesVector = [] for file_name in currentfiles: fullPath = os.path.join(ImageFilePath, file_name) if os.path.isdir(fullPath): newfiles = getFilesAbsolutelyPath(fullPath) filesVector.extend(newfiles) else: filesVector.append(fullPath) return filesVector filePathVector = getFilesAbsolutelyPath(ImageFilePath) pngFile = [] #筛选出所有png文件(现在看来这一步可以省略了,直接把这些判定写在上一个函数中,filePathVector就直接筛选出png文件了) for filename in filePathVector: flag = filename.find(".png") metaNot = filename.find(".meta") if flag != -1 and metaNot == -1: pngFile.append(filename) #对每个png文件进行上传压缩,并下载,上传和下载的过程调用插件即可完成 for filename in pngFile: print(filename + ' start') source = tinify.from_file(filename) source.to_file(filename) print(filename + ' ok')
有疑问的同学欢迎在下方留言!