首页 > 编程语言 >python应用——借助tinify库实现批量压缩图片

python应用——借助tinify库实现批量压缩图片

时间:2022-11-09 10:45:01浏览次数:64  
标签:name 批量 item python 压缩 tinify source 图片

说在前面的话:

转到移动组之后,干起了移动端混合开发,虽说现在的混合开发技术在不断的迭代了,但对比起网页应用来说有一些先天的不足,诸如,硬件性能就是很大的一方面。在pc上调试的非常OK,都要断电下班 ,测试完却发现在移动端一个页面白屏了两秒才加载出来文字,嘤嘤嘤。又只能开始漫长又不明细的优化道路了。根据我做pc端的经验来说。优化见效最明显,最容易的方法之一就是对图片进行适当的压缩,那性能是肉眼可见得蹭蹭往上涨。对于要频发打包文件的移动端来说也是一大福音。

  压缩图片的网站我也是有关注的,每个压缩工具都有利弊,有些工具不限制压缩个数,但会更改图片的大小,有的压缩率好并且不会更改原有图片名称,但会限制压缩个数,其中 TinyPNG 是我用的比较顺手的一个压缩网站。

  可美中不足的是压缩图片一次性只能20张并且每张的图片大小不超过5MB,对于时间紧任务重的,图片还贼多的项目来说,要20张20张的压缩的确是有点反人心话了,好在该网站提供了pro版本的,但需要$39 哦,对于白嫖党来说有点小贵了。

  在我胆大心细的浏览网页之下,看到了一个好东西 “开发者API”这几个字,我看到的是简简单单的这三个汉字和三个英文单词吗?不!我们看到的是我们拥有了二次开发Tniy 压缩图片的能力。我们看到的是可以通过简简单单几行代码来批量压缩。

  但凭借我多年的白嫖的经验来说,这些开放的接口一般都会有限制,果不其然,注册成开发者之后发现,免费的接口压缩个数只有每个月500张图片。说多不多说少不少,但这不妨碍我们借用tinify的接口来压缩图片的代码编写。

撸代码第一步:查看接口文档

开发者模式中,提供了ruby gem,php程序库,node.js包,python包等,我们选择python包,

第二步安装tinify 提供的第三方库:pip install --upgrade tinify

第三步,需要填写api密钥来调用页面tinify 包,获取api密钥的方法是注册姓名和email地址

接下来是代码部分

import tinify
tinify.key = "YOUR_API_KEY"#注册的tinify密钥
source = tinify.from_file("xxx/xxx/demo.png")#需要压缩的图片路径
source.to_file("xxx/xxx/save.png")#保存的图片路径

压缩的图片也可以变成二进制流

with open("xxx/demo.jpg", 'rb') as source:
    source_data = source.read()
    result_data = tinify.from_buffer(source_data).to_buffer()

图片的来源也可以是一段地址,那就要调用from_url方法:

source = tinify.from_url("https://tinypng.com/images/panda-happy.png")
source.to_file("optimized.png")

知道了以上接口我们就可以编写一段简单的代码来批量压缩图片了:

三!

二!

一! 

上代码:

import tinify
import os
import time

#遍历文件夹获取文件信息
def walkdir(file):
    for root,dirs,files in os.walk(file):
        for f in files:
             m=os.path.join(root,f)
             name=os.path.basename(m)
             houzui=name.split('.')[1]
             fileList.append({
                "url":root,#路径名称
                "name":name,#
                "ext":houzui
             })
#压缩文件
def Compress():
    for item in fileList:
        print('url',item["url"])
        print('name',item["name"])
        sfile=item["url"]+"\\"+item["name"];
        newUrl=item["url"].replace("needCompress","saveCompress");#保存新的文件地址
        if(not os.path.exists(newUrl)):
            os.makedirs(newUrl)
        tfile=newUrl+"\\"+item["name"]
        try:
            if(["jpeg","png"].index(item["ext"])>-1 and item["ext"]):
                source = tinify.from_file(sfile)
                source.to_file(tfile)
        except :
            print('error',item) #打印出错误
            continue

#启动入口
if __name__=="__main__":
    begintime=time.time()
    print('start')
    tinify.key="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"#申请的key
    fileList=[]
    walkdir(r'E:\pytiny\needCompress')
    Compress()
    endtime=time.time()
    print('end')
    print("total-time",endtime-begintime)

进阶:

以上代码可以进行最基础的压缩功能,但如果想优化,优化的方面有太多了,比如优化压缩时间,可以进行多线程压缩。比如配置不灵活,可以将配置抽出放在一个json文件进行读取配置。

 

标签:name,批量,item,python,压缩,tinify,source,图片
From: https://www.cnblogs.com/lin494910940/p/16870629.html

相关文章

  • python(27)反射机制
    1.什么是反射?它的核心本质其实就是基于字符串的事件驱动,通过字符串的形式去操作对象的属性或者方法 2.反射的优点一个概念被提出来,就是要明白它的优点有哪些,这样我......
  • Python 判断字符串是否为数字
    最近的一个小软件,遇到了一个问题就是需要把字符串转成数字,可字符串中有时候会出来特殊字符。所以只需要做一个转换函数才可以的。下面这个函数比较凑效。这里做一个笔记本......
  • python3执行pip list出现警告
    python3执行piplist出现警告WARNING:Youareusingpipversion21.2.3;however,version22.3.1isavailable.Youshouldconsiderupgradingviathe'F:\Python39......
  • go excelize 批量写入数据到Excel
    funcCreateXlS(data[][]string,fileNamestring,headerNameArray[]string){f:=excelize.NewFile()sheetName:="sheet1"sheetWords:=[]strin......
  • 利用python数据分析
    利用python进行数据分析本书由Pythonpandas项目创始人WesMcKinney亲笔撰写,详细介绍利用Python进行操作、处理、清洗和规整数据等方面的具体细节和基本要点。第2版针对P......
  • 盘点一个Python处理Excel两列单元格中有类似字符串就返回1,没有就返回0的操作
    大家好,我是Python进阶者。一、前言前几天在才哥的Python交流群遇到了一个粉丝提问,提问截图如下:觉得还挺有意思的,都是Pandas基础操作,这里拿出来给大家一起分享下。二、......
  • python get请求传array数组
    前言使用传统的http发get请求时,如果传参为array数组,参数名称为a时,可以这样传值a=1&a=2&a=3,但是当只有一个时,这种方式就不合理了。get请求还有另外一种方式传array数组,在......
  • 【Python】Python环境安装与简单代码运行
    Python环境安装与简单代码运行一、配置Python环境1.下载Python安装包建议使用Python3.8版本,Win7、Win8、Win10、Win11都能用。(1)Python官网下载:网站:www.python.orgPyt......
  • python中的字典和集合
    #1.字典存储数据存储一个数据的属性可以快速进行查找#dict_data={key:value,key:value,...}#key是键#value是值#以大括号表示#数据是以键值对出现的键值......
  • python课本学习-第二章
    chapter2编程基础一、基本语法1、注释python注释以\(“#”\)开始多行注释使用三个单引号/双引号作为开始和结束标志2、标识符与关键字python命名时避免使用下划......