首页>少儿编程>Python利用tinify API实现批量压缩图片

Python利用tinify API实现批量压缩图片

一直觉得“API”这个词语的书面解释过于高大上,使用下来感觉API就如同一个自动售货机,有需求的人投了一个币进去,然后售货机给了你对应面值的饮料。就比如这个tinify API,核心功能是实现图片的压缩,用户传过去一张图片,它回传一个压缩好的图片给用户。一次交互就这么愉快的结束了。

Using_the_Tinify_API_in_Python_to_Implement_Batch_Compression_of_Images_p1

博客带宽有限,为了能更好的节省带宽,博客的图片博主都会利用tinify.cn这个站点在线压缩一下。操作流程很简单,把图片批量拖入tinify.cn主页,等待压缩完成,下载处理好图片的压缩包,再解压到本地,最后删除原图。但写了几百篇博文之后,还是觉得这个流程还可以再精简一些。而tinify.cn也提供了这样的API来实现这个需求。应用API需要一个API key,填写用户名与邮箱后,网站会发送一封邮件至指定的邮箱。

Using_the_Tinify_API_in_Python_to_Implement_Batch_Compression_of_Images_p2

邮件内容包含一个跳转到控制台的按钮,跳转后直接可以看到自己的API key,但API key生成需要一定时间,建议10分钟后再跳转查看。获取到API key之后,接下来就可以利用python(博主使用的版本是python2.7.18)来自动化处理图片了。

Using_the_Tinify_API_in_Python_to_Implement_Batch_Compression_of_Images_p3

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次压缩服务"

标签: python

移动端可扫我直达哦~

推荐阅读

python 2024-06-28

python中print函数的格式控制符号

%字符:标记转换说明符的开始;转换标志:- 表示左对齐;+ 表示在转换值之前要加上正负号;“” (空白字符)表示正数之前保留空格;0表示转换值若位数不够则用0填充;最小字段宽度:转换后的字符串至少应该具有该值指定的宽度。如果是*,则宽...

少儿编程 python

python 2024-06-27

小鸟数据python语法速查表

Python对大小写敏感,使用半角符号,变量命名采用“_”、数字或字母的组合,建议采用规范的命名方式,比如使用驼峰式命名方式,编程过程中多写注释。基础语法数据类型:整数,浮点,字符串,逻辑值运算符号:+,-,*,/, % , // ,...

少儿编程 python

python 2024-06-18

pyautogui报错误:No module named pytweening

之前利用pyautogui实现了一个类似按键精灵的功能,在一个可写的PDF文件中,动态修改某个单元格的值,并依次打印出来。利用python2.7实现的程序,因为中途换装过python3,换回python2.7版本之后很多库都失效了,年...

少儿编程 python

python 2024-06-17

利用PYTHON批量修改图片的宽高尺寸

将制作完成的产品拍照发客户,是博主的工作之一,原来是用的数码相机,随着手机照片质量的提升,现在用手机拍照也能满足需求。目前在用的手机是xsmax,默认设置下一张照片经常会超过4M,记得购买的第一个u盘的容量也就32M还是64M。遇到客...

少儿编程 python

python 2024-03-21

利用python批量修改照片名称

博主之前用的iphone6sp,年前闲鱼入了一个二手的xsmax,两者拍摄的照片默认后缀都是大写的"JPG"。小鸟数据博客的主题是自己捣鼓的,技术实力有限,仅能正确识别小写的图片名称,所以某次直接用原图发布文章的时候,发生了图片无法正...

少儿编程 python

python 2023-10-24

Python官网下载速度很慢怎么办

之前一直在Python官网下载安装包,用浏览器自带的下载工具,并没有觉得慢到难以忍受。时隔大半年,手头的存储安装包的u盘不知道落哪里了,于是又一次访问了官网。公司单独拉了一根光纤,然而打开Python官网主页居然就花了半天,心说完犊子...

少儿编程 python

python 2023-09-28

pyautogui中的键盘对应键位的名称

pyautogui可以模拟用户按键,比如需要按回车,我们可以输入“enter”,需要按删除键,我们可以输入“delete”,键位太多记不过来,干脆写篇笔记记录一下吧。顺便一提,利用help可以查看pyautogui的帮助信息:help...

少儿编程 python

python 2023-09-28

利用python自动编辑可编辑pdf并实现自动打印

可编辑的pdf文件不多,工作中很少遇到类似的情况,很多需要用到自动打印的场合,一般就直接把pdf拖入到coreldraw或ai中,转换为矢量图,然后利用vba在编辑软件中实现自动打印。手头上有一份客户发过来的pdf文件,可以直接在文件...

少儿编程 python

python 2023-09-28

python2.7所对应的pyautogui版本是哪个

想安装一个pyautogui,用于实现一个类似按键精灵的效果,因为客户发过来一个可编辑的pdf文件,需要在其中填入对应的序列号,手工填写一次几百张有点儿麻烦,所以考虑用python来组合一套动作,实现自动的操作。于是在win7系统中打...

少儿编程 python

python 2023-06-28

利用python批量修改文件名一例

对python认识不多,虽然也认真的学习过一段时间,在玩魔兽世界怀旧服的时候,曾经实现过一个自动钓鱼的程序,可惜在自己的电脑上跑的好好的,换台电脑就失效了,菜鸟玩家,写的程序不具备兼容性。下载了几个文件,因为防网盘屏蔽的原因,分享者修...

少儿编程 python

python 2023-04-19

python报错AttributeError: 'module' object has no attribute

意图用python批量生成svg格式的条形码,原因有二,其一是以自己的知识储备做不到在线批量生成下载,其二是svg格式可以直接导入coreldraw,然而在家里的电脑上跑得好好的程序,到了公司居然报错了。期间尝试了更改文件位置,更换p...

少儿编程 python