从github上查找了很多python对图片压缩的项目,发现大多用的都是基于pngquant的开发。
很多是基于命令行的方式开发。
然而pngquant工程中有个submodule,引用的是libimagequant工程。此工程目是给pngquant提供压缩功能的。于是,我们可以针对这个工程做开发,以直接调用库的方式压缩图片。
libimagequant是一个c项目,因此我们需要找一个python binding,利用python-binding开发。
github中有两个python binding。经过对比,选择了本文要写的这个,地址:
https://github.com/RoadrunnerWMC/libimagequant-python
因为这个项目的开发者有明确和清晰的文档说明,并且还提供了配合多个python库(如PIL)使用的demo,很用心的项目。
接下来就是核心内容,不多,主要是引用和步骤的说明而已。想了解详情的可以去上面的地址看看。
1.安装
采用pip的方式:pip3 install libimagequant
2. 打开pycharm创建项目
3. 引用官方的demo即可使用,这里贴出一个我的使用的小demo
工具类(这个直接从官方demo粘贴的)
import libimagequant as liq
import PIL.Image
def to_liq(image: PIL.Image.Image, attr: liq.Attr) -> liq.Image:
"""
Convert PIL.Image.Image to liq.Image.
"""
if image.mode != 'RGBA':
image = image.convert('RGBA')
return attr.create_rgba(image.tobytes(), image.width, image.height, image.info.get('gamma', 0))
def from_liq(result: liq.Result, image: liq.Image) -> PIL.Image.Image:
"""
Convert liq.Image to PIL.Image.Image.
"""
out_img = PIL.Image.frombytes('P',
(image.width, image.height),
result.remap_image(image))
palette_data = []
for color in result.get_palette():
palette_data.extend(color[:3])
out_img.putpalette(palette_data)
return out_img
测试main
# This is a sample Python script.
# Press Shift+F10 to execute it or replace it with your code.
# Press Double Shift to search everywhere for classes, files, tool windows, actions, and settings.
import libimagequant as liq
import compression.test2 as tool
import PIL.Image as image
# Press the green button in the gutter to run the script.
if __name__ == '__main__':
image = image.open("/usr/local/project/pylibimagequant/111.png")
attr = liq.Attr()
liq_image = tool.to_liq(image, attr)
result = liq_image.quantize(attr)
pil_image = tool.from_liq(result,liq_image)
pil_image.save("/usr/local/project/pylibimagequant/111_compression.png")
# See PyCharm help at https://www.jetbrains.com/help/pycharm/
------------------------------------- 一些压缩工具或者项目 -----------------------------------------------
1.pngquant,一个基于liimagequant的command line tool:
pngquant — lossy PNG compressor
2. 基于1的文章,又发现了其它的。如:
3. zopflipng.
4. 还有一篇测试文章,可以从里面看到其它的压缩工具: