![]() |
|
Модераторы: Snowy, Alexeis, MetalFan |
![]()
|
|
| lorents |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 548 Регистрация: 2.4.2008 Репутация: нет Всего: нет |
||||
|
||||
| pseud |
|
|||
![]() Экспёрт Тыдыщ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1175 Регистрация: 18.5.2007 Где: Минск, Беларусь Репутация: нет Всего: 40 |
так там в ссылке указано "как сделать". сформулируй вопрос. -------------------- Испытание чужого терпения можно считать успешным, если оно лопнуло... |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 55 Всего: 459 |
lorents, есть класс TPngObject . У него свойство AlphaSanline пробегаешься по альфе и смотришь значение. Если значение 0 - полная прозрачность, то пиксель с теми же координатами заменяешь на определенный цвет (свойство ScanLine). Начиная с делфи 2009 этот класс поставляется с делфей. Для более ранних версий его можно скачать (например с torry.net)
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| lorents |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 548 Регистрация: 2.4.2008 Репутация: нет Всего: нет |
Может кто-нибудь подкинуть ссылки на статьи о PNG (желательно на русском), т.к. ничего нормального найти не получается, в википедии не то что надо. В основном интересует информация о маске и всё что касается прозрачности.
|
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 55 Всего: 459 |
формат png бывает 2х по цветности видов 8бит и 24бит на пиксель и 2х видов по прозрачности. Прозрачность цвета (записывается прямо в палитре) и прозрачность пикселя. Прозрачность пикселя храниться отдельно в виде дополнительного 8ми битного битмапа у которого вместо цвета значение прозрачности. Размер этого битмапа равен размеру исходной картинки. Тонкости размещения по секциям и сжатия в данном контексте думаю не интересны. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| lorents |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 548 Регистрация: 2.4.2008 Репутация: нет Всего: нет |
Alexeis, понятно. спасибо.
пойду разбираться дальше А Вы не знаете как программно сделать вот это http://www.artlebedev.ru/tools/technogrette/img/png-3/ |
|||
|
||||
| AntonN |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 491 Регистрация: 8.8.2006 Репутация: 7 Всего: 18 |
как-то так...
|
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 55 Всего: 459 |
Так алгоритм я уже описал. TPngObject после загрузки определит такую картинку как 2 битмапа (работает аналогично TBitmap) . Обращаешься к пикселам как к матрице высота х ширина, точнее получается массив указателей на строки. Если сильно нужно, то можно обратиться к данным и как к непрерывному массиву, но тогда порядок строк будет обратным (так приятно хранить битмап) -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| Bitter |
|
|||
![]() Опытный лентяй ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1209 Регистрация: 15.8.2004 Где: Харьков, Ukraine Репутация: 6 Всего: 27 |
Знаем. Нужно пройтись по всем пикселям, и заменить их цвет по формуле Color = Alpha/255 * Color
Это сообщение отредактировал(а) Bitter - 13.7.2010, 12:07 |
|||
|
||||
| lorents |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 548 Регистрация: 2.4.2008 Репутация: нет Всего: нет |
AntonN, а можно скомпилировать в ехе, у меня проста не под рукой Delphi
|
|||
|
||||
| AntonN |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 491 Регистрация: 8.8.2006 Репутация: 7 Всего: 18 |
Bitter,
это нужно лишь там, где неполная формула блитинга (например в updatelayaeredwindow), в случае автора это лишь исказит информацию в файле. Добавлено через 4 минуты и 32 секунды lorents, вот http://desksoft.ru/index.php?downloads=att...ents&id=279 (rar) только сначала забекапь те картинки, над которыми будешь экспериментировать |
|||
|
||||
| lorents |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 548 Регистрация: 2.4.2008 Репутация: нет Всего: нет |
||||
|
||||
| AntonN |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 491 Регистрация: 8.8.2006 Репутация: 7 Всего: 18 |
Резервную копию оставь, вдруг не понравится
В комбобоксе выбирается цвет которым зальется облась с нулевой альфой (открой png в обычном виндовом Пейнте - увидишь). Хотя как по мне такая "фича" специфична, например если картинка будет поворачиваться (текстура в игре) то заливка может потом вылезти в виде цветной каймы по краям. |
|||
|
||||
| lorents |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 548 Регистрация: 2.4.2008 Репутация: нет Всего: нет |
AntonN, код, что надо, Спасибо
есть сайт по оптимизации картинок PunyPng и он делает тоже самое, что и твой код Твой код проиграл в двух картинках. я использую определенный алгоритм оптимизации png. поэтому результаты крайне точные, есть возможность исправить твой код, чтобф он не проигрывал? прикрепил картинки, которые проиграли Присоединённый файл ( Кол-во скачиваний: 14 )
Comic_Book_Guy.png 87,36 Kb |
|||
|
||||
| lorents |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 548 Регистрация: 2.4.2008 Репутация: нет Всего: нет |
вот вторая картинка
Это сообщение отредактировал(а) lorents - 13.7.2010, 14:24 Присоединённый файл ( Кол-во скачиваний: 17 )
ff_logo_big.png 96,94 Kb |
|||
|
||||
| AntonN |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 491 Регистрация: 8.8.2006 Репутация: 7 Всего: 18 |
в каком смысле "проиграл"?
|
|||
|
||||
| AntonN |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 491 Регистрация: 8.8.2006 Репутация: 7 Всего: 18 |
По умолчанию zlib в png имеет уровнь компрессии 7 (0..9), можно установить в 9, тогда продавец комиксов будет весить 85,6кб (против выложенного 87,3кб), логотип все так же чуть больше.
Чтобы получить более значительную прибавку (точнее убавку Это сообщение отредактировал(а) AntonN - 13.7.2010, 14:57 |
|||
|
||||
| lorents |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 548 Регистрация: 2.4.2008 Репутация: нет Всего: нет |
AntonN, я имел ввиду кое-что другое
Здесь не стоит вопрос оптимизации. Здесь главное улучшить твой код, чтобы он работал как PunyPng, в частности удалял прозрачные пиксели. Если Ты это сделаешь, буду очень признателен Это сообщение отредактировал(а) lorents - 13.7.2010, 15:27 |
|||
|
||||
| AntonN |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 491 Регистрация: 8.8.2006 Репутация: 7 Всего: 18 |
Куда же ты их удалишь? Ну я дал код где прозрачные пиксели имеют черый цвет. Точнее можно вообще залить любым цветом, оно все равно невидимое.
|
|||
|
||||
| lorents |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 548 Регистрация: 2.4.2008 Репутация: нет Всего: нет |
AntonN, как же тебе объяснить, видимо какие-то пиксели не удаляются
вот этих двух картинок, эта проблема |
|||
|
||||
| AntonN |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 491 Регистрация: 8.8.2006 Репутация: 7 Всего: 18 |
Выложи две одинаковые картинки, одну исходник нетронутый, и второй через этот PunyPng сохраненный.
png это не только пиксели, и не просто кусок памяти сжатый архиватором, возможно PunyPng оптимизирует палитру, работает с чанками. |
|||
|
||||
| lorents |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 548 Регистрация: 2.4.2008 Репутация: нет Всего: нет |
AntonN,
в данном случаи, это пиксели, у меня есть специальный алгоритм для оптимизации PNG. и это выявил, т.к. он оптимизирует с 0. Вот картинки Присоединённый файл ( Кол-во скачиваний: 31 )
Image.rar 142,01 Kb |
|||
|
||||
| lorents |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 548 Регистрация: 2.4.2008 Репутация: нет Всего: нет |
AntonN, ты не смотрел случайно?
|
|||
|
||||
| Bitter |
|
|||
![]() Опытный лентяй ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1209 Регистрация: 15.8.2004 Где: Харьков, Ukraine Репутация: 6 Всего: 27 |
||||
|
||||
| lorents |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 548 Регистрация: 2.4.2008 Репутация: нет Всего: нет |
||||
|
||||
| AntonN |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 491 Регистрация: 8.8.2006 Репутация: 7 Всего: 18 |
Да ничего особенного он не делает.
В моем коде ничего сверх сделать не нельзя, чтобы добиться еще меньших размеров файла придется палитру мучать, работать с блоками. Если бы я затратил на это время врядли я бы выложил это в свободный доступ |
|||
|
||||
| lorents |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 548 Регистрация: 2.4.2008 Репутация: нет Всего: нет |
AntonN, понятно, если передумаете, дайте знать
я кстати сделал все как мне надо через ImageMagick, ни чем ну уступающий PunyPng, но проблема в том, что ImageMagick не понимает кириллицу. Это сообщение отредактировал(а) lorents - 15.7.2010, 08:59 |
|||
|
||||
| x128 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 88 Регистрация: 29.9.2009 Репутация: 5 Всего: 7 |
Описанный в статье прием реализуется довольно просто:
Но! Для картинки Comic_Book_Guy эти действия не сильно помогают т.к. судя по характерному контуру, изначально изображение не имело альфа-канала. Конкретно для этой картинки можно изменить условие "if AlphaSRC[x]=0" на "if AlphaSRC[x]<>255", результат 61,5 кб для PNG24 и 24,5 кб для PNG8. Присоединённый файл ( Кол-во скачиваний: 6 )
Comic_Book_Guy_24.png 61,57 Kb |
|||
|
||||
| lorents |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 548 Регистрация: 2.4.2008 Репутация: нет Всего: нет |
x128, а можно скомпилированный проект, если Вас это не затруднит
|
|||
|
||||
| x128 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 88 Регистрация: 29.9.2009 Репутация: 5 Всего: 7 |
||||
|
||||
| lorents |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 548 Регистрация: 2.4.2008 Репутация: нет Всего: нет |
x128, при первично просмотре, вроде все как надо, сейчас начну глобальное тестирование
Я и не знал что Вы автор Color Quantizer Программа нужная |
|||
|
||||
| lorents |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 548 Регистрация: 2.4.2008 Репутация: нет Всего: нет |
x128 мне надо с Вами кое о чем переговорить:
1. я протестировал Ваш код, он работает (значение порога = 1), но картинка Comic Book Guy.png была обработана слегка лучше, чем PunyPng, а вторая картинка ff-logo-big.png чуть хуже. Можно сказать что код рабочий, а главное не громоздкий. Я как и Вы занимаюсь оптимизацией PNG, и хотел спросить могли бы Вы модернизировать, если это возможно, и сделать так, чтобы работал через командную строку? 2. На данный момент я использую следующий код оптимизации PNG Noninterlaced
Т.е. картинка проходит через следующие стадии 1. prepng.exe разжимает картинку, т.е. делает сжатие 0 2. optipng.exe -i0 -zw32k -zc1-9 -zm1-9 -zs0-3 -f0-5 - выбирается наилучший фильтр, это не всегда точно, но лучше чем перебирать фильтры через pngout.exe 3. pngout.exe /k0 /f%f% - идет оптимизация через pngout.exe, раньше использовал параметр /n# (n=2), но по рекомендации Ken Silverman (создатель PngOut) удален 4. дальше идут advpng.exe -z -4 и deflopt.exe Для PNG Adam7 (Interlaced) использую только optipng.exe -i0 -zw32k -zc1-9 -zm1-9 -zs0-3 -f0-5 и deflopt.exe Хотел знать есть ли возможность улучшить мой алгоритм, Ваша программа иногда превосходит мой алгоритм, и мне просто интересно какой у вас алгоритм? Это сообщение отредактировал(а) lorents - 16.7.2010, 19:46 |
|||
|
||||
| x128 |
|
||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 88 Регистрация: 29.9.2009 Репутация: 5 Всего: 7 |
Значение 1 это как в статье, при значении 0 изменения не внося т.е. оригинал, все остальные значения позволяют отсечь "левые" пикселы. Для картинки Comic Book Guy.png значение порога должно быть 255, для ff-logo-big.png значение должно быть 1 т.к. там изначально правильный альфа-канал.
Не проблема, к тому, что есть добавить или отдельно консольное приложение нужно?
Мне кажется, что ключ /ks будет не лишним =) Хотя... как показали мои эксперименты, лучший фильтр для него понятие не растяжимое т.е. лучший фильтр для optipng не всегда лучший для pngout.
Не уверен, что получится сильно улучшить. С PNG24 особых хитростей нет, проверить на количество используемых цветов и в случае <=256 пробовать записать как PNG8 ну и конечно фильтры, возможно у меня получается лучше их подобрать. С PNG8 ситуация немного другая, тут уже больше возможных вариантов, помимо фильтров и попыток записать как PNG24, очень большую роль играет порядок цветов в палитре. В CQ я не сильно гоняю оптимизаторы с разными ключами, обычно я им передаю уже готовую картинку без дополнительных параметров, исключение только при записи брутом. Это сообщение отредактировал(а) x128 - 16.7.2010, 20:43 |
||||||
|
|||||||
| lorents |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 548 Регистрация: 2.4.2008 Репутация: нет Всего: нет |
x128,
Я даже об этом и не подумал, а как это можно определить программно?
Отдельное консольное приложение, если Вас не затруднит. Так и сделаю
я так и не нашел способа, как без перебора через pngout, можно определить наилучший фильтр для pngout.
а можно поподробнее? Смотрите, есть картинка, Ваша программу оптимизирует сразу наименьший размер, а мой алгоритм только при повторной оптимизации, не знаете, почему так и как это исправить? а какой алгоритм вы используете для PNG Adam7 (Interlaced)? Я там ошибся, я использую optipng.exe -i1 -zw32k -zc1-9 -zm1-9 -zs0-3 -f0-5 и deflopt.exe, т.к. pngout и advpng не поддерживают PNG Adam7 (Interlaced) И еще один вопрос, как Вы дкмаете стоит ли сохранять все картинки в цветовой профиль sRGB? Я очень рад наше встречи на просторах интернета Если хотите, мы можен перенести наш разговор по электронной почте ([email protected]) Так же высылаю Вам мой алгоритм оптимизации Это сообщение отредактировал(а) lorents - 16.7.2010, 23:31 Присоединённый файл ( Кол-во скачиваний: 7 )
Image_Optimizer_1.2.0.0.rar 530,82 Kb |
||||||
|
|||||||
| lorents |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 548 Регистрация: 2.4.2008 Репутация: нет Всего: нет |
забыл спросить, это система удаление "грязных" пикселей, не всегда уменьшает размер картинки
http://www.artlebedev.ru/tools/technogrette/img/png-4/ а иногда и увеличивает размер, отсюда вытекает два вопроса: 1. можно ли сразу определить поможет это функция уменьшению размера картинки или нет; 2. как можно отменить действие этой функции. |
|||
|
||||
| AntonN |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 491 Регистрация: 8.8.2006 Репутация: 7 Всего: 18 |
провести опыт на копии изображения и сравнить
|
|||
|
||||
| lorents |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 548 Регистрация: 2.4.2008 Репутация: нет Всего: нет |
AntonN, это слишком долго
|
|||
|
||||
![]()
|
| Правила форума "Delphi: Звук, графика и видео" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делится вскрытыми компонентами
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Girder, Snowy. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |