一直觉得“API”这个词语的书面解释过于高大上,使用下来感觉API就如同一个自动售货机,有需求的人投了一个币进去,然后售货机给了你对应面值的饮料。就比如这个tinify API,核心功能是实现图片的压缩,用户传过去一张图片,它回传一个压缩好的图片给用户。一次交互就这么愉快的结束了。
博客带宽有限,为了能更好的节省带宽,博客的图片博主都会利用tinify.cn
这个站点在线压缩一下。操作流程很简单,把图片批量拖入tinify.cn
主页,等待压缩完成,下载处理好图片的压缩包,再解压到本地,最后删除原图。但写了几百篇博文之后,还是觉得这个流程还可以再精简一些。而tinify.cn
也提供了这样的API来实现这个需求。应用API需要一个API key,填写用户名与邮箱后,网站会发送一封邮件至指定的邮箱。
邮件内容包含一个跳转到控制台的按钮,跳转后直接可以看到自己的API key,但API key生成需要一定时间,建议10分钟后再跳转查看。获取到API key之后,接下来就可以利用python(博主使用的版本是python2.7.18)来自动化处理图片了。
tinify的api
Tinify API让您可以压缩和优化JEPG和PNG图片。 它被设计成一个REST服务。多种语言的客户端程序库,使得使用Tinify API变得非常简单。利用Python来优化图片,首先需要安装Python包以使用Python客户端:
pip install --upgrade tinify
导入库并认证
import tinify
tinify.key = "YOUR_API_KEY"
压缩图片
官方的实例修改了保存文件的文件名,像博主这样事后还删除原图的,也可以不修改被保存图片的名称,以便覆盖原有的图片,省去了删除的操作。
source = tinify.from_file("unoptimized.webp")
source.to_file("optimized.webp")
图片处理
source = tinify.from_file("large.jpg")
resized = source.resize(
method="fit",
width=150,
height=100
)
resized.to_file("thumbnail.jpg")
使用API创建已上传图像的缩放版本。通过API实现缩放,您可以避免自己编写相关代码,图片只需要上传一次。 缩放后的图片会自动被优化,压缩并且看起来清晰细腻。您还可以利用智能剪裁功能来创建专注图像中最重要的视觉区域的缩略图。
图片缩放的方式:
scale:
按比例缩小图片。您必须提供目标width或height,不能同时提供两者。缩小后的图片会有确定的宽度或者高度。
fit:
按比例缩小图片,使其适合(fit)给定的尺寸。你必须同时提供width和height。缩小后的图像不会超过这些尺寸中的任何一个。
cover:
按比例缩小图片,如有必要裁切图片。结果具有准确的给定尺寸。 图片中哪个部分将被裁切是自动决定的。智能算法确定图像中最重要的区域。
thumb:
一个更先进的缩略图实现,还能检测具有简单背景的裁切图片。图片会被缩小到您提供的width和height的大小。 如果一个图片被检测到独立物体,算法将在必要位置添加更多的背景,或者裁切掉不重要的部分。
简单的批量处理
将以下代码保存为SmallPic.py
,放入一个新建文件夹,再将需要处理的图片放入同文件夹,双击SmallPic.py
等待程序(确保电脑已连接网络)运行结束,可以看到图片的体积都小了一大圈。
import tinify
tinify.key="api key"
import os
import re
files = os.listdir("./")
for file in files:
if file <> "SmallPic.py":
source = tinify.from_file(file)
source.to_file(file)
增加数量提醒
tinify.compression_count
可以获取到当前已经处理的图片数量,因为非付费用户有图片数量上的限制,想知道已经处理了多少张图片的,也可以加上这个参数。
# -*- coding: cp936 -*-
import tinify
tinify.key="api key"
print tinify.compression_count
import os
import re
files = os.listdir("./")
for file in files:
if file <> "SmallPic.py":
source = tinify.from_file(file)
source.to_file(file)
print "本月您已使用"+str(tinify.compression_count)+"/500次压缩服务"