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 :: Водяной знак с полупрозрачностью [2]

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (3): « 1 [2] 3 »   

> Описание: Решаем проблему совмещения GIF и PNG файлов
deblogger
Отправлено: 05 Ноября, 2013 - 16:11:19
Post Id


Новичок


Покинул форум
Сообщений всего: 59
Дата рег-ции: Нояб. 2013  


Помог: 0 раз(а)

[+]


armancho7777777 пишет:
Безупречный ответ.


Третий пункт реализовать невозможно в принципе, но, если вам удалось избежать

Цитата:
водяной знак становится полностью черным


а среди использованных функций GD ничего чудесного не замечено, то значит так и делается обычно - никто особенностями гифа не париться, библиотека сама его размачивает и смачивает обратно.

Это я и предположил сразу когда не заметил ответов на вопрос что делать с гифами. Если ответов нет - значит и вопроса такого нет.

Однако были вопросы что делать с пингами - как их в гиф с "прозрачностью" записать. Я не читал, потому что было нерелевантно.
 
 Top
armancho7777777 Супермодератор
Отправлено: 05 Ноября, 2013 - 16:14:04
Post Id



Активный участник


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




deblogger пишет:
Такое вообще возможно реализовать - плюсовать объекты?

Я же говорю
armancho7777777 пишет:
deblogger, я не понимаю о чём Вы пишите в своих сообщениях.

У Вас, какая-та, своя терминология, которая меня поражает всё больше с каждым новым вашим сообщением на этом форуме )

deblogger пишет:
библиотека сама его размачивает и смачивает обратно.



deblogger пишет:
Однако были вопросы что делать с пингами - как их в гиф с "прозрачностью" записать.

Так а в чём, собственно, проблема?
Решение я выложил уже час назад, если не больше.
вы даже не обратили внимание на расширения загруженных изображений:
armancho7777777 пишет:
PHP:
скопировать код в буфер обмена
  1. $imageGIF = new Image('sample.gif');
  2. $imagePNG = new Image('sample.png');


deblogger пишет:
Я не читал, потому что было нерелевантно.

Радость
(Добавление)
deblogger пишет:
Третий пункт реализовать невозможно в принципе

Решу в пару строчек кода без проблем.

(Отредактировано автором: 05 Ноября, 2013 - 16:56:52)

 
 Top
deblogger
Отправлено: 05 Ноября, 2013 - 16:29:34
Post Id


Новичок


Покинул форум
Сообщений всего: 59
Дата рег-ции: Нояб. 2013  


Помог: 0 раз(а)

[+]


armancho7777777 пишет:
Читаем в чём заключался вопрос автора.


Это я не вам писал, а вообще. Ну, например тем кто рискнет расширять ваш "функционал".

Ваша проблема в ЧСВ, за которым вы не видите косяков и нелепостей. На вопрос темы вы так и не ответили - делает ваш класс полупрозрачный гиф (см, п. 3) или не делает?

Кто-нить сделайте эксепшн в save() проверить - врет мана или правду говорит.

Вполне понятно применять такое для массовой обработки изображений нельзя.

И опять же я не понял где там лого, а где картинка в примере по именам ImagePNG - ? ImageGIF - ?

Вопрос риторический. Можете не отвечать.
(Добавление)
Цитата:
Третий пункт реализовать невозможно в принципе

Решу в пару строчек кода без проблем


Пошел в гастроном за попкорном. Надеюсь когда нажарю увижу полупрозрачный гиф.
 
 Top
armancho7777777 Супермодератор
Отправлено: 05 Ноября, 2013 - 16:39:55
Post Id



Активный участник


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




deblogger пишет:
Кто-нить сделайте эксепшн в save()

Зачем ?
При вызове из метода __toString() исключения не будет.

deblogger пишет:
И опять же я не понял где там лого, а где картинка в примере по именам ImagePNG - ? ImageGIF - ?

Без разницы.
А Вам тем более.
Вы же любитель потроллить ))
Вон и за попкорном побежали ))
deblogger пишет:
за которым вы не видите косяков и нелепостей


Показываем хоть один(одну) в текущей реализации, прежде чем утверждать, нелепое Вы создание.
(Добавление)
deblogger пишет:
На вопрос темы вы так и не ответили - делает ваш класс полупрозрачный гиф (см, п. 3) или не делает?

armancho7777777 пишет:
Я решил задачу, которая стояла перед автором темы.

Вам на пальцах объяснить ?
(Добавление)
Пример выше обновил.
Може так Вам станет ясно Улыбка

(Отредактировано автором: 05 Ноября, 2013 - 16:59:27)

 
 Top
esterio
Отправлено: 05 Ноября, 2013 - 16:46:12
Post Id



Активный участник


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


Помог: 127 раз(а)




deblogger пишет:
Третий пункт реализовать невозможно в принципе

Спойлер (Отобразить)
 
 Top
armancho7777777 Супермодератор
Отправлено: 05 Ноября, 2013 - 16:47:04
Post Id



Активный участник


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




esterio, третий пункт реализован в классе двумя строчками кода.
Я же писал уже:
armancho7777777 пишет:
Решение реализовано подобным образом, чтобы его можно было расширить другим функционалом.

armancho7777777 пишет:

PHP:
скопировать код в буфер обмена
  1.  
  2. public function opacity($alpha)
  3. {
  4.         imagealphablending($this->__image, false);
  5.         imagefilter($this->__image, IMG_FILTER_COLORIZE, 0, 0, 0, $alpha);
  6.         return $this;
  7. }
  8.  
  9.  

(Отредактировано автором: 05 Ноября, 2013 - 16:49:59)

 
 Top
esterio
Отправлено: 05 Ноября, 2013 - 16:49:13
Post Id



Активный участник


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


Помог: 127 раз(а)




armancho7777777
С GD мало работал, нашол только такой пример прозрачности
(Добавление)
только вот вопрос imagealphablending, зачем выставлять в false
Тоесть сначала в true, а потом в false

(Отредактировано автором: 05 Ноября, 2013 - 16:51:50)

 
 Top
armancho7777777 Супермодератор
Отправлено: 05 Ноября, 2013 - 16:51:01
Post Id



Активный участник


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




esterio пишет:
только вот вопрос imagealphablending, зачем выставлять в false

В противном случае не сработает.
Отключаем, и передаём управление альфа каналом в фильтр, если сказать простыми словами.
(Добавление)
deblogger пишет:
Вполне понятно применять такое для массовой обработки изображений нельзя.

Можно узнать, почему же ? Радость
И второй вопрос:
у Вас есть лучшее решение для поставленной задачи встроенными средствами php ?)
Только пожалуйста в виде кода, а то просто грустно уже становится.
Тро-ло-ло да тро-ло-ло.

(Отредактировано автором: 05 Ноября, 2013 - 17:15:32)

 
 Top
deblogger
Отправлено: 05 Ноября, 2013 - 17:18:59
Post Id


Новичок


Покинул форум
Сообщений всего: 59
Дата рег-ции: Нояб. 2013  


Помог: 0 раз(а)

[+]


Попкрон готов, полупрозрачный гиф - нет.

Знаете почему? Потому что прежде чем писать на php классы с использованием графических функций, надо сперва научиться разбираться в графике. Ну и в классах тоже.

Таким образом вопрос темы остается открытым.

По классу.

Что касается косяков. save() вызывается из scope __toString(). Исключение из save() будет передано в __toString() и далее до ловушки. Но до нее не дойдет, потому что из туСтринга вывалится в фатальную ошибку. Короче вместо исключения получите приключение типа

Цитата:
Fatal error: Method image::__toString() must not throw an exception in...


Нелепость это ФШ на php. Который как известно рожден умереть. Классный автор же создает инстансь, которая изображает из себя документ. Типа вот вам полотно, делайте на нем чего хотите. А что можно сделать-то? Умора. Консольный ФШ это, могучий ход, конечно.

Короче, еще раз для невежд. вы _НЕ_ можете сделать "полупрозрачный" GIF как отмечено в п.3 хотелок ТС, просто потому что полупрозрачность это технология альфа-канала, а в спецификации формата GIF никакой альфы не предусмотрено вообще и не будет отныне.

Если какая-то функция из GD PHP может превратить индексы в RGBA - значит изображение сохраненное в GIF можно композить. Но никакая функция не сможет записать альфу обратно в GIF.

Так уже понятно, или пойдете сами читать про этот никому не нужный отстой - Graphic Interchange Format?
 
 Top
armancho7777777 Супермодератор
Отправлено: 05 Ноября, 2013 - 17:23:35
Post Id



Активный участник


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




deblogger пишет:
Исключение из save() будет передано в __toString()

Повторяю для особо одарённых
armancho7777777 пишет:
При вызове из метода __toString() исключения не будет.

Другими словами: оно (исключение) туду (в __toString()) не попадёт.
Вы бы хоть в коде покапались, запустили бы пример, прежде чем троллить.


deblogger, вопрос по существу к Вам лично:
моя реализация не решает поставленную задачу?
А именно:
Novascriptum пишет:

Задача: проставить на изображение [основу] (jpg / gif / png) водяной знак (gif / png) с полупрозрачностью.
Особенности:
1) Основа может иметь прозрачный фон.
2) Водяной знак, естественно, имеет прозрачный фон.
3) Водяному знаку нужно добавить полупрозрачность.
4) Результирующее изображение можно делать в формате PNG


deblogger пишет:
Попкрон готов, полупрозрачный гиф - нет.

Я разве что-то писал про результат в виде полупрозрачного gif'а ? ))
Я писал, и пишу, что класс позвояет загрузить gif'ку, сделать её полупрозрачной,
и наложить на изображение, которое тоже может быть полупрозрачным.
Не более того.
Я не уточнял, какого формата будет эта самая gif'ка перед самым наложением ))
Зачем ?
Задача не состоит в получении на выходе полупрозрачного gif'а.

deblogger пишет:
А что можно сделать-то?

Достаточно для веба.
Только чтобы понять это, практиковаться надо,
а Вы не потрудились даже просто протестировать готовое решение.
А это и не удивительно: троллю свойственно быть теоретиком-зубрилой.
Только, вот хорошие тролли, они хоть терминологию на зубок знают...

(Отредактировано автором: 05 Ноября, 2013 - 17:57:10)

 
 Top
deblogger
Отправлено: 05 Ноября, 2013 - 18:11:49
Post Id


Новичок


Покинул форум
Сообщений всего: 59
Дата рег-ции: Нояб. 2013  


Помог: 0 раз(а)

[+]


Слив защитан. Все ходы записаны:

armancho7777777 пишет:
esterio, третий пункт реализован в классе двумя строчками кода.


Ничего там не реализовано и быть не может. Вы просто поздно сообразили прочитать что я пишу. В смысле в самом начале написал. И, кстати, с ошибочкой.

Прозрачный индекс лежит не в общей пол-литре, но в расширении формата, а именно тут:

Цитата:
23. Graphic Control Extension.

a. Description. The Graphic Control Extension contains parameters used
when processing a graphic rendering block. The scope of this extension is
the first graphic rendering block to follow. The extension contains only
one data sub-block.


Что и следовало ожидать, поскольку форматы файлов развиваются по общему сценарию. Схема расширения чуть ниже цитаты http://www[dot]w3[dot]org/Graphics/GIF/spec-gif89a[dot]txt

Я не знал и узнавать не собирался, вы заставили. Да, imagecreatefromgif() прозрачно превращает прозрачные индексы в альфу. Поэтому и не было ответов на вопрос как преобразовать гиф в rgba. Потому что нет такого вопроса - берешь функцию имярек и она все конверит.

Следовательно если взять два гифа и сконвертить их оба и сплющить с сохранением альфы, то получится так же RGBA.

Но записать RGBA в гиф нельзя. Я и проверять не собираюсь, но верю что imagegif попросту проиндексирует альфу на thershold 50% Что никак не повлияет на внешний вид результата если изначально это были два индекса ни один из которых _НЕ_ интерполировали.

Иначе, если один был не гиф, а пинг, если один из бывших индексов сжали или растянули методами со сглаживанием (билинейной интерполяцией например), то результат записи в GIF89a окажется плачевным.

В общем господа, вопрос такой: на кой черт вам сдался этот геморрой с "прозрачными" гифами???

Их давно уже нет. В качестве основы изображения - подавно. В качестве штампа, лого, ватермарки - юзайте пинг. Ну годы же мучились дуря браузеры - наконец можно законно профтыкать пинг где хочешь. Нет, блин, тянет на старенькое.

Кстати, спец по графике в пхп знает почему в GD на протяжении ряда лет не было поддержки GIF?
(Добавление)
---

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

Потому что я даже представить не могу изображением чего должна быть картинка с прозрачностью, на которую еще и ватермарку надо налепить.

В отличии от носителя могучего ЧСВ, я в графике провел чуть больше десяти лет и за все время мне не попался ни один деловой и проштампованный гиф. Это же изначально либо хлам, либо чертежи и тексты. Которые штампить смысла нет.

Заштампить ценную анимашку? Одуреть...

Отсюда я предположил что ТС хотел бы это все воткнуть до кучи. Типа все форматы, бла-бла-бла. А сам наверно ни разу гифа живьем не видел. Улыбка

И последнее. Палитра в GD не управляемая. Я видел - писали лет пять-десять назад всякую хрень по растеризации альфы и оптимизации палитры - но поскольку нормального управления цветами нет, то и смысла в этом гифе не остается. Вам прилетит 4 цвета, а вы сделаете 255. Нафига?
(Добавление)
---

В публичных местах делают просто: чего бы ты не закачал - сохранится jpeg и досвидос. Варианты типа синхронизации файлов идут через БД где все равно ради сохранения уникальности имен файлы переименовываются. Так какая разница тогда. Был flower.gif, стал 00008767363.jpg?
 
 Top
armancho7777777 Супермодератор
Отправлено: 05 Ноября, 2013 - 19:41:15
Post Id



Активный участник


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




Вы о чём ?
Вы бредите, deblogger Радость
Задача автора темы была решена несколько часов назад,
а Вы всё доказываете, что gif не поддерживает полупрозрачность, буд-то кто-то Вам обратное доказывает Радость
Если бы разобрали код, Вы бы увидели, что gif'ом там и не пахнет ))
Да кому я говорю, боже мой ...
Автору надо чтобы можно было наложить картинку любого формата, предварительно сделав её полупрозрачной.
А в каком формате она будет перед наложением, никого не колышет.
А раз так, то перегоняем в PNG и делаем с альфа каналом что угодно в рамках GD.

(Отредактировано автором: 05 Ноября, 2013 - 20:09:09)

 
 Top
armancho7777777 Супермодератор
Отправлено: 05 Ноября, 2013 - 21:57:31
Post Id



Активный участник


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




deblogger пишет:
Понятия не имею как обычно оперируют гифами с "прозрачным" цветом

deblogger пишет:
я в графике провел чуть больше десяти лет
 
 Top
deblogger
Отправлено: 06 Ноября, 2013 - 09:30:50
Post Id


Новичок


Покинул форум
Сообщений всего: 59
Дата рег-ции: Нояб. 2013  


Помог: 0 раз(а)

[+]


Вы забыли что именно такой ответ был дан с самого начала. Надо просто читать что написано.

PHP:
скопировать код в буфер обмена
  1. Потому что GIF не несет с собой альфа-канала. Следовательно этот формат сперва надо особо конвертануть в RGBA.


Все на этом. Разумеется я не знаю как на php обходятся с "прозрачными" гифами, потому что мне это не стучит и стучать не будет.

Что требовалось поправить - что никаких особых методов искать не надо - о чем и было высказано предположение. О чем и поведал ваш прелестный класс - в нем все обычно. Так обычно и делают. Ну, попроще, конечно, без гемора с полотнами.

Кстати jpg в расширении адобы может содержать альфа-канал. Приложения, правда, не поддерживают, но техническая возможность имеется и в своем собственном приложении можно воспользоваться.

Другими словами тот самый водяной знак, логотип и прочие метки можно сохранить в jpeg с альфой.
 
 Top
armancho7777777 Супермодератор
Отправлено: 06 Ноября, 2013 - 09:53:26
Post Id



Активный участник


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




deblogger пишет:
Надо просто читать что написано.

armancho7777777 пишет:
я не понимаю о чём Вы пишите в своих сообщениях.


deblogger пишет:
Ну, попроще, конечно, без гемора с полотнами.

armancho7777777 пишет:
Решение реализовано подобным образом, чтобы его можно было расширить другим функционалом.


deblogger пишет:
Так обычно и делают.

deblogger пишет:
Понятия не имею как обычно оперируют гифами с "прозрачным" цветом

Я же говорю, Вы - тролль.

(Отредактировано автором: 06 Ноября, 2013 - 09:59:17)

 
 Top
Страниц (3): « 1 [2] 3 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Графика в PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB