性感码农,在线解答:有什么问题可以扫屏幕右方二维码加我微信或者在下方留言。

TinyPng支持在线压缩,但是页面最多支持上传20张图片,最大5M。如果我们的图片很多,目录又很复杂,手动上传下载,再替换掉会非常麻烦,所以我们使用脚本批量压缩。

有两点需要提前知道:

  • 使用脚本批量压缩,每个月的免费额度为500张图片
  • 一张图片重复上传不会消耗额度

批量压缩的步骤:

  1. 获取脚本(代码在下方);
  2. 使用python命令行安装tinify插件,命令如下:
    sudo easy_install pip
    sudo pip install –upgrade tinify
  3. 在TinyPng网站的Developer API页面上注册一个账号,并成功获取到你的API key
  4. 在python脚本中把API key填入(tinify.key赋值为API key);
  5. 修改脚本中的目录ImageFilePath目录为你的目标目录;
  6. 执行脚本,就可以看到脚本在依次上传,在tinypng的后台压缩完成之后自动下载并替换掉原来的图片了;
  7. 除了使用脚本压缩,还有大神做了一个简单的客户端,但同样要使用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')

有疑问的同学欢迎在下方留言!

性感码农,在线解答!

发表评论

电子邮件地址不会被公开。 必填项已用*标注