Немного черепицы - PullRequest
       5

Немного черепицы

2 голосов
/ 13 марта 2009

Я только что закончил написание небольшого сценария, чтобы объединить множество картинок png в больше для CSS Sprite.

Итак, в основном, у меня есть список измерений [(w1, h2), ..., (wn, hn)] и мне нужно поместить их в рамку с размером (W, H) с WH как как можно меньше. (Конечно, они не могут пересекаться)

Эвристика, которую я использовал, явно не оптимальна. Я размышлял если у вас были идеи по этому поводу? Как вы думаете, какие-то более умные ограничения, такие как группировка изображений с похожие гистограммы уменьшат png?

Ответы [ 3 ]

1 голос
/ 13 марта 2009

Не ясно из того, как вы задаете вопрос: размер изображения или размер файла PNG, который вы хотите оптимизировать, так как гистограммы изображения не влияют на их размеры (ширину и высоту).

Однако, найти минимальное K так, чтобы, скажем, max (W, H) здесь .

1 голос
/ 13 марта 2009

Как вывод из вашего скрипта сравнивается с выводом из ImageMagick ?

1 голос
/ 13 марта 2009

Об уменьшении результирующего png:

Обязательно используйте лучший уровень сжатия (уровень 9) и, если возможно, используйте PNGOUT , чтобы сжать PNG еще лучше (есть плагин PNGOUT для IrfanView тоже).

Группировка изображений с похожими гистограммами может быть хорошей, обратите внимание, что PNG использует zLib, который использует скользящее окно, поэтому он будет работать лучше, если вы группируете изображения по горизонтали.

РЕДАКТИРОВАТЬ: То же самое для свободного места. Лучше иметь свободное место сверху или снизу изображения, чем слева или справа. Цвет свободного пространства не должен иметь большого значения, какой-то цвет, черный или белый должен быть в порядке.

Кстати, размер скользящего окна zLib составляет 32 КБ, поэтому он не так хорош для обнаружения дубликатов изображений, если изображения большие. В этом случае вам лучше обрабатывать изображения самостоятельно с использованием собственного алгоритма и использовать удаление дубликатов или дельта-фильтр.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...