python 对png图片压缩

从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的文章,又发现了其它的。如:

optipng

3. zopflipng.

4. 还有一篇测试文章,可以从里面看到其它的压缩工具:

https://css-ig.net/benchmark/png-lossless

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值