如何使用Python将JPG图像转换为AVIF格式

11
3个回答

8
你可以使用Pillow和pillow-avif-plugin来实现这个功能。
from PIL import Image
import pillow_avif

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

您需要安装pillow AVIF才能完成这个操作。

pip install pillow-avif-plugin


需要这行代码 import pillow_avif 吗?好像没有被使用到。 - Ander
是的。Pillow使用这个库中的函数来处理AVIF文件。这是插件的工作。(我认为Pillow尝试根据用户输入的文本使用函数,如果没有这个名称的函数,Pillow会返回错误) - Dov Wachtfogel
简而言之,Pillow使用pillow_avif。 - Dov Wachtfogel
似乎在OS X上可以工作,@Dov Wachtfogel,你是否成功让它在Linux Alpine或Debian镜像上运行?我已经使用python:3.7.12-alpine3.14创建了一个Docker镜像,并运行了apk add --no-cache jpeg-dev libwebp-dev libavif-dev,但当我运行你的示例代码时,它会检索到RuntimeError:无法编码图像:没有可用的编解码器。我猜这是一些缺失的依赖项,但不知道如何修复它。 - Ander

1
到目前为止,我能想到的最好方法是 安装 libavifbrew 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图片的一些推荐设置。


0
据我所知,目前没有对“avif”的支持。但是有API支持。例如,此API表现良好,但可能会出现安全问题。网站看起来不太好,但功能上还不错。
我稍微查了一下API 源代码,发现你可以不需要使用此API就进行此转换。API是使用magick命令进行此转换。我不知道如何使用这个命令,但我认为如果你搜索一下或查看源代码,你应该可以找到答案。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接