不管是博客还是产品中,都会涉及图片的使用,但是如果图片体检太大,会影响使用体验,所以网上有各种各样的支持图片压缩的网站,tinypng 是其中的佼佼者。

今天要介绍的就是如何通过 python 脚本实现一键压缩。

直接上代码:

# -*- coding: utf-8 -*-"""脚本功能说明:使用 tinypng,一键批量压缩指定文件(夹)所有文件"""import os
import sys
import tinifytinify.key = "你自己申请的 key" # AppKeydef get_file_dir(file):"""获取文件目录通用函数"""fullpath = os.path.abspath(os.path.realpath(file))return os.path.dirname(fullpath)def check_suffix(file_path):"""检查指定文件的后缀是否符合要求"""file_path_lower = file_path.lower()return (file_path_lower.endswith('.png')or file_path_lower.endswith('.jpg')or file_path_lower.endswith('.jpeg'))def compress_by_tinypng(input_file):"""使用 tinypng 进行压缩,中文前面的 u 是为了兼容 py2.7"""if not check_suffix(input_file):print(u'只支持png\\jpg\\jepg格式文件:' + input_file)returnfile_name = os.path.basename(input_file)output_path = os.path.join(get_file_dir(sys.argv[0]), 'tinypng')output_file = os.path.join(output_path, file_name)print(output_file)if not os.path.isdir(output_path):os.makedirs(output_path)try:source = tinify.from_file(input_file)source.to_file(output_file)print(u'文件压缩成功:' + input_file)old_size = os.path.getsize(input_file)print(u'压缩前文件大小:%d 字节' % old_size)new_size = os.path.getsize(output_file)print(u'文件保存地址:%s' % output_file)print(u'压缩后文件大小:%d 字节' % new_size)print(u'压缩比: %d%%' % ((old_size - new_size) * 100 / old_size))except tinify.errors.AccountError:print(u'Key 使用量已超,请更新 Key,并使用命令[Usage] %s [filepath] [key]运行'% os.path.basename(sys.argv[0]))def check_path(input_path):"""如果输入的是文件则直接压缩,如果是文件夹则先遍历"""if os.path.isfile(input_path):compress_by_tinypng(input_path)elif os.path.isdir(input_path):dirlist = os.walk(input_path)for root, dirs, files in dirlist:for filename in files:compress_by_tinypng(os.path.join(root, filename))else:print(u'目标文件(夹)不存在,请确认后重试。')if __name__ == '__main__':len_param = len(sys.argv)if len_param != 2 and len_param != 3:print('[Usage] %s [filepath]' % os.path.basename(sys.argv[0]))elif len_param == 3:tinify.key = sys.argv[2]check_path(sys.argv[1])else:check_path(sys.argv[1])

使用说明

1. 请先安装 tinify 的依赖库:

python -m pip install tinify

2. 申请 tinify key

https://tinypng.com/developers 申请自己的 key,每个 key 每个月可以压缩 500 个文件。

3. 执行脚本

申请完 key 之后,更新到代码段中的:

tinify.key = "your key" # AppKey

然后带参数执行脚本即可。

带的第一个参数是必选的,可以是文件,也可以是文件夹。

第二个参数是可选的,自定义 key,如果输入了第三个参数,则优先使用自定义 key。

压缩后的文件,默认输出到当前脚本所在目录下的 tinypng 文件夹中,如果要输出到其他位置,可以自行修改脚本实现。

PS:已使用 Python2.7 和 Python3.4 亲测有效,其他 Python 版本如果有异常,请反馈。

更详细的说明请跳转到项目地址:https://github.com/sylan215/compress-with-tinypng,欢迎大家 star,并一起丰富这个脚本的功能。

转载于:https://blog.51cto.com/sylan215/2150946

如何使用 tinypng 进行批量压缩相关推荐

  1. 10 行 Python 代码,批量压缩图片 500 张,简直太强大了

    这几天,我在用 Github page + hexo 搭建个人网站,为了延续风格,就想把配图与文章一起迁移过去.这时候就出现了一个难题:我所用的图片都是高清大图,放到网站上会严重拖慢加载速度.因此,需 ...

  2. 在线批量压缩JPG图片-JpegMini

    2019独角兽企业重金招聘Python工程师标准>>> 之前有推荐过一个在线批量压缩PNG图片的网站TinyPng,这儿小觉再次推荐一个同类网站,专门在线批量压缩JPG图片的Jpeg ...

  3. php 批量压缩上传图片,Linux环境下,使用Shell脚本自动批量压缩图片

    支持的图片格式 目前支持.jpg/.jpeg/.bmp/.png格式图片 实现原理 先使用find命令查找指定目录图片(同时对图片大小和时间进行了筛选) 根据不同的图片格式调用不同的压缩工具 配合cr ...

  4. 使用tinify批量压缩图片

    开篇 不管是开发还是美工在使用图片时避免不了会对图片进行压缩等操作,TinyPNG 是一个压缩利器.TinyPNG网站提供了压缩和优化.png 格式图片的功能.虽然可以很轻松地使用网页版进行操作.这里 ...

  5. 用node批量压缩html页面

    最近在写一个用了layui的后台管理系统.因为某些原因,html,css,js都写在.html里,并且没有用到别的打包工具.所以写了一个用node命令批量压缩页面并且混淆js的小工具. node安装h ...

  6. python怎么把图片压缩_使用Python轻松批量压缩图片

    在互联网,图片的大小对一个网站的响应速度有着明显的影响,因此在提供用户预览的时候,图片往往是使用压缩后的.如果一个网站图片较多,一张张压缩显然很浪费时间.那么接下来,我就跟大家分享一个批量压缩图片的方 ...

  7. 用python一键批量压缩备份文件,不必再用鼠标点点点

    很多人会定期压缩备份一下自己的文件,但每次一个个文件压缩移动很麻烦,整理耗时又费力. 面对这些问题,只要用Python的zipfile包,几句代码就够了,大大提高了工作效率! 今天我们就来教大家如何使 ...

  8. linux批量修改压缩图片大小,linux shell批量压缩某个目录下图片大小

    linux shell批量压缩某个目录下图片大小 #!/bin/sh read -p "Input Path:" SPATH maxsize=$((1024*200)) FILEL ...

  9. 移除添加的文件_文件压缩教程-文件批量压缩

    所用软件:好压 准备工作:确定你的右键菜单有"添加到压缩文件"选项. 如果没有--打开好压,点击顶部的,选项----设置----菜单项目,把"添加到压缩文件...&quo ...

  10. php 批量压缩png,利用Python批量压缩png方法实例(支持过滤个别文件与文件夹)...

    前言 本文主要给大家介绍的关于Python批量压缩png的相关资料,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍: 1.需求 为什么会有这个需求?是因为游戏的资源大多是png图片,需要 ...

最新文章

  1. 如何获取微信openId
  2. 第46条:for-each循环优先于传统的for循环
  3. html的meta用法
  4. python 阿里云短信接口_阿里云短信PythonSDK的用法
  5. 八数码问题II-双向bfs和map标记
  6. python爬虫 asyncio aiohttp aiofiles 单线程多任务异步协程爬取图片
  7. datatable怎么根据两列分组_公司要IT转型,我该怎么办?用Python进行数据处理
  8. python多任务-线程
  9. viewpager的使用
  10. qt 判断路径非英文符号与非英文字符_Qt中,软件多语言国际化翻译的方法与步骤...
  11. 数字IC设计工程师笔试面试经典题
  12. Qt:Label插入图片
  13. 来吧!带你玩转 Excel VBA
  14. 淘宝/天猫店铺订单数据导出、销售报表、数据分析
  15. java根据经纬度获取地址(百度地图)
  16. 2021年——1024程序员节
  17. 音乐播放器(网页手机版)使用Jquery插件
  18. yolov5模型pt转wk(HISI3559)
  19. IP反查网站,ip反查接口,旁站查询接口大全,通过IP查域名汇总
  20. css3 html5动画特效

热门文章

  1. 内核错误怎么解决?Win11系统内核错误解决方法
  2. 《C++ primer 》 猎豹网校 函数模板 2018/10/9
  3. RapidXml用法
  4. Android之复合按钮CompoundButton
  5. win10 安装sqlserver2000
  6. 嘉明的C学习之Day8--数组
  7. java fckeditor下载,Fckeditor与Java web 整合代码
  8. 你需要启用steam社区界面功能以进行购买_打开了新世界的大门!Steam好评的实用工具/软件推荐...
  9. 国外 Warez 网站 杂集
  10. 互联网IT工程师需要具备哪些技能?