使用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')
有疑问的同学欢迎在下方留言!