【问题标题】:How to convert JPG images to AVIF with Python如何使用 Python 将 JPG 图像转换为 AVIF
【发布时间】:2021-10-14 06:33:57
【问题描述】:

Python's Pillow doesn't seems to support AVIF files yet,和pyheif等其他包,只支持阅读。是否有任何 Python 工具可以将 jpg 图像转换为新的avif 格式?

【问题讨论】:

    标签: python python-3.x python-imaging-library avif


    【解决方案1】:

    你可以用枕头和pillow-avif-plugin来做到这一点:

    from PIL import Image
    import pillow_avif
    
    JPGimg = Image.open(<filename> + 'jpg')
    JPGimg.save(<filename> + '.AVIF','AVIF')
    

    您需要安装枕头 AVIF 才能做到这一点。

    【讨论】:

    • 需要import pillow_avif这行吗?好像没用过。
    • 是的。 Pillow 使用这个库中的函数来处理 AVIF 文件。这是插件的工作。 (我认为 Pillow 尝试通过用户输入的文本来使用函数,如果没有函数具有此名称 Pillow 返回错误)
    • 总之,枕头用pillow_avif
    • 似乎可以在 OS X 上运行,@Dov Wachtfogel,您是否设法使其在 Linux Alpine 或 Debian 映像上运行?我使用 python:3.7.12-alpine3.14 和 RUN apk add --no-cache jpeg-dev libwebp-dev libavif-dev 创建了一个 Docker 映像,但是当我运行您的示例代码时,它会检索 RuntimeError: Failed to encode image:没有可用的编解码器我猜这是缺少一些依赖项,但不知道如何修复它。 ——
    【解决方案2】:

    到目前为止我能想到的最好的就是installing libavif

    brew install libavif

    并通过执行avif编码器直接对jpg文件进行编码:

    import subprocess
    
    
    input_file = '/some-path/file1.jpg'
    output_file = '/some-path/file1.avif'
    subprocess.run(f"avifenc --min 0 --max 63 -a end-usage=q -a cq-level=18 -a tune=ssim {input_file} {output_file}", shell=True)
    
    
    

    --min 0 --max 63 -a end-usage=q -a cq-level=18 -a tune=ssim 选项是 AVIF 图像的一些推荐设置。

    【讨论】:

      【解决方案3】:

      据我所知,目前不支持“avif”。但是有 API 支持。例如,this API 表现良好。也许可能会出现安全问题。该网站看起来不太好,但功能上做得很好。

      我检查了 API source code 一点,我发现你可以在不需要这个 API 的情况下进行这种转换。 API 是 using magick 命令来进行这种转换。这个命令我不知道怎么用,但是我想你稍微搜索一下就知道了,或者查看源代码。

      【讨论】:

        猜你喜欢
        • 2022-11-22
        • 2021-04-22
        • 1970-01-01
        • 2021-09-03
        • 2017-04-04
        • 1970-01-01
        • 1970-01-01
        • 2023-01-22
        • 1970-01-01
        相关资源
        最近更新 更多