Xpoint
   [напомнить пароль]

PNG8 плюс "чуть-чуть альфа-прозрачности": как?

Метки: [без меток]
2009-11-20 13:43:28 [обр] Илья Cтpeльцын aka SelenIT(0/171)[досье]

Есть прозрачная PNG-шка (спрайт, где кроме прочего есть кнопки, которые должны показываться на разном фоне). Логично бы сохранить его как PNG-8 с альфа-каналом (в хороших браузерах как обычно, нигде никаких проблем с позиционированием, а единственной бедой и без того несчастных юзеров IE6 будет чуть "погрызенный" край). Но... при попытке сохранить это дело в Fireworks-е тамошний бяка-оптимизатор пытается меня убедить, что мне хватит 72 цветов на саму картинку, а всё остальное богатство 256-цветной палитры от всей своей двоичной души швыряет в этот самый альфа-канал. И объяснить ему, что мне достаточно десятка-другого градаций полупрозрачности, а вот саму картинку хорошо бы сохранить по максимуму, а не превращать в убогую грубую полосатость, не представляется возможным. Вроде как можно настроить палитру вручную, но "шибко умный" Fireworks все равно на лету перестраивает ее по-своему, а при попытке выбросить из палитры хотя бы один полупрозрачный цвет он вообще самовольно меняет тип прозрачности на одноцветный. В общем, мое терпение лопнуло, и у меня возникли два вопроса:

  1. Можно ли в принципе преобразовать полноцветный PNG ("PNG-32" в терминологии Fireworks-а или "прозрачный PNG-24" в терминах Фотошопа) в индексный с полупрозрачностью таким образом, чтобы доля полупрозрачных цветов в итоговой палитре была минимальной (но достаточной)?
  1. Если да, то как и какой программой (желательно бесплатной;)? Консольные сжималки типа OptiPNG и PNGOut, насколько я понял из описания к ним, конвертировать тип палитры не умеют... или все-таки?

Заранее благодарен за любые подсказки и наводки!

спустя 12 дней [обр] x128[досье]
Как вариант, можно в Fireworks-е использовать маску качества, т.е. подняв важность не прозрачной части изображения для альфы останется меньше места в палитре. Можно разделить изображение на два, отдельно прозрачные и не прозрачные части и соответственно самостоятельно распределить требуемое количество цветов для каждого изображения. Можно попробовать другие программы, которые позволяют получать более качественные палитры. К примеру PNGNQ. В настоящий момент я пишу программу для решения подобных задач Color quantizer, могу предложить попробовать, хоть она еще очень сырая, но уже позволяет получать не плохие результаты.
спустя 14 часов [обр] Илья Cтpeльцын aka SelenIT(0/171)[досье]

x128[досье], спасибо! Насчет деления картинки на прозрачную и непрозрачную, действительно, что-то я не додумался, похоже, в этом и есть выход.

А ваша программа (попробовал тестовую версию от 29.10), похоже, вообще то что надо! Если поставить "% err", "Max err" и "1st quantizer" все на минимум, получается практически та палитра, о которой я мечтал. Огромное спасибо! Только я не разобрался, как редактировать маску качества: верно ли я понял, что сейчас ее можно рисовать только кистью?

спустя 1 час 57 минут [обр] x128[досье]
Все верно, маска редактируется кистью. При выборе кисти картинка затеняется и программа переходит в режим редактирования маски. Размер кисти вибирается соседней кнопкой, если кликнуть на саму кнопку, появится ползунок который позволяет выбрать силу кисти. После рисования нужно нажать кнопку пересчета палитры и все. Можно обойтись без маски, просто добавлять цвета кликом средней кнопки мыши на картинке. К сожалению нормального описания еще нет. По редактированию масок в адобовских программах есть не плохая статья тут.
спустя 1 час 19 минут [обр] Илья Cтpeльцын aka SelenIT(0/171)[досье]
Еще раз спасибо! Но в порядке feature request'а: нет ли в планах на будущие версии возможности делать маску путем заливки контура, как в том же фотошопе? Сорри за наглость... :)
спустя 22 минуты [обр] x128[досье]
Планов очень много, по работе с масками в том числе. =)
Powered by POEM™ Engine Copyright © 2002-2005