Как сжать изображение PNG с помощью алгоритма S3TC/DXT в python?

Я пытаюсь найти способ сжатия изображений (например, PNG) с помощью любого алгоритма S3TC/DXT с использованием библиотек Python.

Как я вижу в формате DDS библиотеки Подушка(ПИЛ) в разделе Read-only formats. Поэтому подушку нельзя использовать для этой цели.
Поиск в гугле не дал положительных результатов.

Вопрос:

Можно ли сделать с питоном?
Кто-нибудь может дать ссылку на библиотеки с таким функционалом? (проверено на практике)
Формат DDS не является обязательным для моего случая. Мне нужен только сжатый файл.

PS:

Это необходимо для создания текстур для будущего использования.
Библиотека должна поддерживать разные алгоритмы сжатия.

Вы хотите сохранить изображение в формате Microsoft Direct Draw Surface 1/5 с расширением .dds?

Mark Setchell 08.04.2019 15:45

@MarkSetchell Мне нужно иметь возможность выбирать алгоритм сжатия.

Yuriy Leonov 08.04.2019 16:14
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
2
1 039
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете использовать Python Палочка. Здесь я создаю псевдоизображение с пурпурно-желтым градиентом и сохраняю как 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

Yuriy Leonov 08.04.2019 16:16

Если я использую приведенный выше код и сохраняю как TIFF, я могу добавить дополнительную строку перед img.save(), которая устанавливает img.compression='lzw' или img.compression='zip', и это учитывается. Если я поставлю img.compression='dxt5', это не будет считаться... может быть, Эрик узнает @emcconville

Mark Setchell 08.04.2019 16:43

ага, docs.wand-py.org/en/0.5.2/wand/image.html?highlight=compress‌​ion действительно поддерживается, и похоже даже может сохранять в формате dds со сжатием. Кстати, оффтоп: файлы .dds можно использовать в личных проектах? Я имею в виду, это законный формат? :) (знаю, это может прозвучать глупо)

Yuriy Leonov 08.04.2019 17:13

Другие вопросы по теме