如何在 python 中使用 S3TC/DXT 算法压缩 PNG 图像?
Posted
技术标签:
【中文标题】如何在 python 中使用 S3TC/DXT 算法压缩 PNG 图像?【英文标题】:How to compress PNG image with S3TC/DXT algorithm in python? 【发布时间】:2019-04-08 13:24:16 【问题描述】:我尝试寻找使用 python 库的任何 S3TC/DXT 算法压缩图像(以 PNG 为例)的方法。
正如我在Read-only formats
部分的Pillow(PIL) 库DDS 格式中看到的那样。因此枕头不能用于此目的。
在谷歌中搜索并没有给出积极的结果。
问题:
可以用python做吗? 有人可以提供具有此类功能的库的链接吗?(已在实践中检查)DDS 格式对我的情况不是强制性的。我只需要压缩文件。
PS:
它是创建纹理以供将来使用所必需的。 库应该支持不同的algorithms of compression.
【问题讨论】:
您的意思是要保存带有.dds
扩展名的 Microsoft Direct Draw Surface 1/5 格式的图像?
@MarkSetchell 我需要有能力选择压缩算法。
【参考方案1】:
您可以使用 Python Wand。这里我创建了一个洋红色-黄色渐变的伪图像并保存为DDS
:
from wand.image import Image
with Image(width=200, height=80, pseudo='gradient:magenta-yellow') as img:
img.save(filename='result.dds')
或者,如果您想加载 PNG 文件并保存为 DDS:
with Image(filename='input.png') as img:
img.save(filename='result.dds')
【讨论】:
只是在其他扩展中保存。我查看了Wand
并没有找到选择压缩算法的能力:比如DXT1-5 等khronos.org/opengl/wiki/Image_Format#Compressed_formats
如果我使用上面的代码并保存为 TIFF,我可以在 img.save()
之前添加一个额外的行来设置 img.compression='lzw'
或 img.compression='zip'
并且它尊重这一点。如果我设置img.compression='dxt5'
它不会兑现它......也许埃里克会知道@emcconville
是的,docs.wand-py.org/en/0.5.2/wand/image.html?highlight=compression 确实受支持,看起来甚至可以通过压缩保存为 dds 格式。顺便说一句,offtop:.dds 文件可以用于个人项目吗?我的意思是它是合法的格式吗? :)(我知道这听起来很愚蠢)以上是关于如何在 python 中使用 S3TC/DXT 算法压缩 PNG 图像?的主要内容,如果未能解决你的问题,请参考以下文章