如何在 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 图像?的主要内容,如果未能解决你的问题,请参考以下文章

python实现算24的算法

在Python中计算数据框中最后一行和所有其他行之间的时间差

python如何输入矩阵

怎么用python算p值和t检验

Python中如何判断一个字符串中有几个空格

关于pythonlist里面算不算空格的问题