您的位置:首页 > 编程语言 > Python开发

[Python模块学习]用tinify模块压缩和优化图片

2016-09-02 02:15 246 查看

tinify模块

by: uizuizui

功能描述:TinyPNGTinyJPG网站提供了压缩和优化.png和.jpg格式图片的功能。虽然可以很轻松地使用网页版进行操作,但是在搭建个人博客的时候,调用网站提供的API更为方便快捷。tinify模块就是由TinyPNG提供的使用Python调用Tiny PNG API的模块。

安装

使用pip进行安装:
pip install --upgrade tinify


获取API key

如果想调用TinyPNG的API,需要先在他们的网站TinyPNG Developer API上申请一个API key用于身份验证。只需要提供你的名字和邮箱地址就可以获得一个API key,API key会以链接的形式发到邮箱里。

注意:无法使用qq邮箱申请key,建议申请一个Live邮箱,配合windows上的Outlook使用

压缩图片

导入模块,进行身份验证:

import tinify
tinify.key = "API_KEY" # 此处填入你自己申请的API key


上传文件:

文件上传的形式共有三种:本地文件、二进制、URL。

上传文件后,服务器会自动识别文件类型,根据类型自动调用TinyPNG或TinyJPG的压缩引擎。调用to_file函数就可以将压缩优化过后的图片保存至本地。

实例代码:

# 使用本地文件上传
source = tinify.from_file("unoptimized.jpg")
source.to_file("optimized.jpg")

# 使用二进制上传
with open("unoptimized.jpg", 'rb') as source:
source_data = source.read()
result_data = tinify.from_buffer(source_data).to_buffer()

# 使用url上传
source = tinify.from_url("https://cdn.tinypng.com/images/panda-happy.png")
source.to_file("optimized.jpg")


改变图片尺寸

调用resize函数便可以将图片调整至自己想要的尺寸,以创建缩略图。需要注意的是:调用resize缩小图片尺寸将会消耗API调用次数,每调用一次resize相当于压缩一张图片。

source = tinify.from_file("large.jpg")
resized = source.resize(method="fit", width=150, height=100)
resized.to_file("thumbnail.jpg")


resize函数包含三个参数:method,width和height。分别代表压缩方式、图片宽度、图片高度。

method参数可以为以下三种模式:

scale:如果method参数设置为scale,则只需要提供width或者height其中的一个。服务器会根据原比例缩小图片。如果同时提供width和height将会报错。

fit:如果method参数设置为fit,则需要同时提供width和height以确定一个范围,缩小后的图片会保证尽量填充该区域。

cover:如果method参数设置为cover,缩小后的图片会填满width和height提供的区域,在必要的情况下服务器会根据一套算法保留他们认为的主要内容,其他部分会被裁剪。

如果目标尺寸大于原图尺寸,返回的图片并不会增大(官方解释是保证图片质量)。在method为scale模式或者fit模式且目标尺寸大于原尺寸的情况下,调用resize会增加API调用次数。如果使用scale模式则不会增加调用次数。

保留图片元数据

可以在图片下载之前调用preserve函数请求保留元数据,目前支持的元数据有:copyright(版权信息),location(拍摄地点GPS信息,仅JPEG支持)和creation(拍摄时间信息,仅JPEG支持)。请求保留元数据不会增加API调用次数。

source = tinify.from_file("large.jpg")
copyrighted = source.preserve("copyright", "creation")
copyrighted.to_file("optimized-copyright.jpg")


copyright信息会增加大约90字节,location信息增加大约130字节,creation信息增加大约70字节。

查看API调用次数

当验证了API key之后,可以通过
tinify.compression_count
查看当月的API调用次数。

总结:该模块用于个人博客是一个不错的选择,服务器端的算法可以帮助我们筛选出最重要的图片信息,减轻图片重量。每个月500次的使用次数也足够个人使用了。如果有更频繁的API调用可以试试购买TinyPNG的API调用次数,价格还算公道。

感谢API及模块提供者
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python api 图片 压缩 优化