Python使用Tinypng实现无损图片压缩
124 浏览量
更新于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 上传