Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: ImageCopy и обрезка прозрачных пикселей
Покинул форум
Сообщений всего: 9
Дата рег-ции: Окт. 2011
Помог: 0 раз(а)
Дело было так:
Имеем две картинки GIF, каждая размером 200х200 пикселей, первая не имеет прозрачных пикселей, вторая представляет собой прозрачный фон с небольшой непрозрачной областью вцентре.
Хотел "слить" вместе эти две картинки функцией ImageCopy (или ImageCopyMerge) так, чтобы вторая картинка легла поверх первой картинки, перекрыв её с учётом прозрачности пикселей (то-есть та непрозрачная область со второй картинки, по идее, должна была появиться в центре первой картинки). Однако в результате php, как будто, обрезал вторую картинку по прозрачным пикселам и как результат её непрозрачное содержимое вставилось ближе к левому верхнему углу первой картинки.
Никак не пойму как решить проблему.
Покинул форум
Сообщений всего: 9
Дата рег-ции: Окт. 2011
Помог: 0 раз(а)
Картинка 1 Прикреплено изображение
P-man
Отправлено: 06 Октября, 2011 - 13:22:54
Новичок
Покинул форум
Сообщений всего: 9
Дата рег-ции: Окт. 2011
Помог: 0 раз(а)
Картинка 2 Прикреплено изображение
P-man
Отправлено: 06 Октября, 2011 - 13:23:29
Новичок
Покинул форум
Сообщений всего: 9
Дата рег-ции: Окт. 2011
Помог: 0 раз(а)
Итоговая картинка получается... Прикреплено изображение
P-man
Отправлено: 06 Октября, 2011 - 14:20:09
Новичок
Покинул форум
Сообщений всего: 9
Дата рег-ции: Окт. 2011
Помог: 0 раз(а)
На всякий случай, если кто не понял, вот какая картинка должна была получиться (в фотошопе слепил) Прикреплено изображение
illy
Отправлено: 15 Октября, 2011 - 16:04:44
Участник
Покинул форум
Сообщений всего: 1117
Дата рег-ции: Июль 2011 Откуда: от верблюда)
Помог: 28 раз(а)
А на php не получилось до сих пор?
----- Всё гениальное - просто
И ещё проще, если ты - индиго
P-man
Отправлено: 17 Октября, 2011 - 11:53:31
Новичок
Покинул форум
Сообщений всего: 9
Дата рег-ции: Окт. 2011
Помог: 0 раз(а)
illy пишет:
А на php не получилось до сих пор?
Пока не получилось, но есть идеи.
Поближе познакомился с форматом GIF и узнал о нём много интересного. Например что в GIF есть такие параметры как "высота/ширина виртуаного экрана (пикс.)" и "левая/верхняя позиция изображения (пикс.)". Собсно "высота/ширина виртуаного экрана" это те размеры картинки какой мы её видим, а "левая/верхняя позиция изображения" это смещение изображения относительно левого верхнего угла картинки. PHP-шная ф-ция ImageCopy (или ImageCopyMerge) не учитывает это смещение изображения, поэтому в моём случае изображение на картинке с прозрачными областями по краям тупо прилипает к верхнему левому углу.
При помощи программы GIF OPENER посмотрел содержимое GIF-ки и узнал где прописываются значения левой и верхней позиции изображения (см. рис. - обведено красным), теперь осталось только отловить их PHP-улькой. У меня с этим проблемы (не знаю как это сделать). Может у кого есть идеи как это сделать? Прикреплено изображение (Нажмите для увеличения)
Покинул форум
Сообщений всего: 9
Дата рег-ции: Окт. 2011
Помог: 0 раз(а)
Вот до чего докопался пока!
Долго гуглил и кое что нагуглил
В итоге немного освоил работу с бинарными файлами. Написал функцию которая выдёргивает из гифа нужную мне инфу (левая/верхняя позиция изображения и ширина/высота изображения).
Вот что теперь получилось:
Прикреплённая картинка это получившийся результат. Как видите стало лучше, но не идеально - изображение стало "резаться" внизу. Сёдня мозг ужо не работает, так что если доковыривать и буду, то не раньше чем завтра. Прикреплено изображение
----- Всё гениальное - просто
И ещё проще, если ты - индиго
P-man
Отправлено: 18 Октября, 2011 - 08:19:20
Новичок
Покинул форум
Сообщений всего: 9
Дата рег-ции: Окт. 2011
Помог: 0 раз(а)
illy пишет:
немного исправил
И это у вас работает ? У меня ваш скрипт сделал те же ошибки что и скрипт приведённый мной изначально - картинка прилипла к левому верхнему краю. Вы его правда запускали? Если да, то попробуйте его "натравить" на приведённый мной исходные картинки и увидите что ничего не сработает (вы-то использовали другие исходные картинки как я вижу и похоже что без тех злополучных прозрачных областей).
Так что вопрос открыт. Буду пока докручивать свой вариант.
P.S. - кстати заливать картинку белым цветом тоже не правильно, т.к. картинки могут быть и с прозрачными областями. (Добавление)
Готово!
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.