Python使用Tinypng实现无损图片压缩
148 浏览量
更新于2024-08-31
收藏 49KB PDF 举报
"Python 实现图片压缩通过调用 tinypng 网站服务"
在 Python 开发中,有时候我们需要对图片进行压缩以减少存储空间或加快加载速度。本示例介绍了一种方法,利用第三方网站 tinypng 的 API 来实现图片的无损压缩。以下是对提供的代码和相关知识点的详细解释:
首先,我们需要导入必要的库:
1. `requests` 库用于发送 HTTP 请求,获取 tinypng 压缩后的图片链接并下载图片。
2. `idna` 库处理 Unicode IDNA (国际化域名) 问题,确保网址可以正确解析。
3. `selenium` 库则用于模拟浏览器操作,上传图片到 tinypng 网站。
4. `time` 库用于设置等待时间,确保页面加载完成。
5. `os` 库提供操作系统相关的功能,如获取文件大小、检查文件扩展名等。
代码中定义了一个函数 `tiny_png(url)`,这个函数主要负责通过 Selenium 模拟浏览器行为,上传图片并下载压缩后的图片:
1. 创建一个 Firefox 浏览器实例,指定 geckodriver 的路径,这是 Selenium 驱动 Firefox 所需的。
2. 函数内部没有完成的 `browser.get()` 方法应该继续输入 tinypng 的网址,以便打开网站。
3. 找到页面上的文件上传输入框元素,并通过 `send_keys(url)` 传递图片的 URL 进行上传。
4. 使用 `implicitly_wait` 设置隐式等待,确保页面元素加载完成。
5. 然后找到下载链接元素,获取其 href 属性,即为压缩后图片的 URL。
6. 使用 `requests.get()` 下载压缩后的图片,将其内容写入到原始图片的文件中,完成覆盖。
另外,还有一个辅助函数 `is_need_compress(img_path)` 用于判断图片是否需要压缩,如果图片大小超过 10KB,则返回 True,表示需要压缩。这个函数通过 `os.path.getsize()` 获取文件大小,然后除以 1024 转换为 KB 单位进行判断。
最后,`file_loop(file_path)` 函数遍历指定文件夹中的所有文件,对每个文件调用 `is_need_compress()` 函数,如果返回 True,就调用 `tiny_png()` 函数进行压缩。
需要注意的是,使用 tinypng 进行图片压缩可能需要注册并获取 API 密钥,因为免费版可能有次数限制。此外,Selenium 模拟浏览器操作可能较慢且消耗资源,对于大量图片的处理,可以考虑寻找更高效的方法,比如直接使用 tinypng 提供的 API(可能需要付费),或者寻找其他 Python 图片处理库如 Pillow 进行本地压缩。在实际应用中,应根据需求和项目规模选择合适的方法。
2019-07-08 上传
2021-11-02 上传
2024-11-13 上传
2021-01-20 上传
2020-08-07 上传
2020-09-20 上传
2022-07-03 上传
2020-12-24 上传
weixin_38592502
- 粉丝: 6
- 资源: 934
最新资源
- cookie-builder-api
- 搜索框1.zip小程序开发
- YSUSB_V203_Win.zip
- 机械加工工艺手册(软件版).zip
- ItunesMusicApplication
- Admin_api:简单的API,允许管理员用户查看和编辑系统中的用户和组
- Ayumun.github.io
- MacEwan LMS Tools-开源
- compound-interest-calc:计算复利
- 国开电大微积分基础形考任务下载作业
- 音乐伙伴加
- c代码-这是一个打印99乘法表的程序。
- unity古装MN动作模型
- iOS--CSV-Parser-and-writer--Demo-Project:这篇文章的主要目的是描述如何在iOS中解析和写入.CSV文件
- 2259XT2 支持部分SAMSUNG SSV6 固件
- project-changeLampState