Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Создание вотермарка

Сообщения:  [1-10]   [11-13] 

 
 автор: darkozoid   (01.07.2013 в 14:09)   письмо автору
 
   для: confirm   (01.07.2013 в 09:45)
 

>А как же быть с этим тогда - header('Content-Type: image/jpeg');?
упс... упустил...


вот спасибо!

  Ответить  
 
 автор: confirm   (01.07.2013 в 09:45)   письмо автору
 
   для: darkozoid   (01.07.2013 в 08:46)
 

>а как же быть если это пользовательская функция и надо дать возможность накладывать png логотипы на jpg картинки?

А как же быть с этим тогда - header('Content-Type: image/jpeg');?

Вы ведь старательно открываете каждый тип соответствующей функцией, а отдаете в одном и том же формате. Согласитесь, ваш вопрос в таком случае не имеет смысла.

Если и отдавать всегда в одном формате независимо от входного, то смысла распознавать входной формат нет. В этом случае лучше поступать так:
<?
if($im = @imagecreatefromstring(file_get_contents('image.ext'))) {
    
//$im - открытый ресурс в формате GD 
}
Но нужно знать, что JPEG формат, это оптимальный выбор для изображения с плавными переходами яркости и цвета. GIF формат, а также PNG8, это ограниченная палитра, и JPEG компрессор для этого типа изображения не лучший вариант - качество будет далеко не лучшее, а вот размер изображения намного будет превышать размер исходного.

Отсюда следует, что сохранять нужно как минимум в двух форматах - JPEG для полноцветных изображений (.jpg, .png), и GIF (PNG) для основанных на палитре. Ну или в трех форматах, и загружать для каждого свой логотип (хотя для .jpg вполне годится наложение png с альфа каналом, так как исходное изображение truecolor, а при его открытии будет создан альфа канал по умолчанию).

Узнать какому типу относится изображение (основанное на палитре или truecolor) можно функцией imageistruecolor() и получать соответствующий логотип.

Что касается вывода, почему так получается. А потому, что вывод вод здесь - imagejpeg($im);, и в первом вашем случае все как положено и происходит - print выводит в браузер строку описывающую изображение, а изображение получает бинарные данные тела.
Во втором случае бардак - если это так и есть как и написано, то вообще не понять кому отдается поток, и к тому же вы разбиваете поток. Вот поэтому такое и происходит.
Если вы хотите сразу выгрузить на страницу изображение с телом, то это можно сделать так:
<img src="data:image/gif;base64,<?=base64_encode($wm->mark(...))?>" />
Но при этом нужно буферизировать вывод изображения и учитывать, что браузеры ограничивают эту величину, каждый своим размером, которая составляет не более нескольких десятков КБ, а бинарные данные в base64, это размер в три раза больше исходного.

  Ответить  
 
 автор: darkozoid   (01.07.2013 в 08:46)   письмо автору
 
   для: confirm   (28.06.2013 в 17:47)
 

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

  Ответить  
 
 автор: confirm   (29.06.2013 в 05:15)   письмо автору
 
   для: Deed   (28.06.2013 в 23:46)
 

Какой это переменной и что даст? Зачем вы советуете, если не понимаете в чем причина?

  Ответить  
 
 автор: Deed   (28.06.2013 в 23:46)   письмо автору
 
   для: darkozoid   (28.06.2013 в 17:24)
 

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

  Ответить  
 
 автор: confirm   (28.06.2013 в 17:47)   письмо автору
 
   для: darkozoid   (28.06.2013 в 17:19)
 

Я не о том, умеете вы или нет, я о том что вы делаете.

Изображения бывают двух типов - основанные на палитре и полноцветные. А вы производите наложение без учета этого, совсем не заботясь о том, что в итоге получится. Судите сами - исходное изображение gif (и может быть и png), это ограниченная палитра. Что в итоге получится если на нее наложить png с альфа каналом? Если смысл наложения на палитру полноцветных изображений и наоборот? Если у вас так все универсально, то зачем иметь налагаемое в трех форматах?

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

  Ответить  
 
 автор: darkozoid   (28.06.2013 в 17:24)   письмо автору
 
   для: Deed   (28.06.2013 в 15:05)
 

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

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

  Ответить  
 
 автор: darkozoid   (28.06.2013 в 17:19)   письмо автору
 
   для: confirm   (28.06.2013 в 10:56)
 

>Ну если не важно, тогда и сказать нечего.
>Вы свой класс в помойку, и просто делайте для примера наложения разных типов с разными свойствами друг на друга и смотрите результат. Может тогда и "не важно" в помойку. )
>
>А если бы я написал кода эдак строк 300, вы бы его тоже процитировали? )

а я пишу как умею... не хотите помогать... не помогайте....

типы может и разные, но при сохранении все работает а при прямом выводе нет....

  Ответить  
 
 автор: Deed   (28.06.2013 в 15:05)   письмо автору
 
   для: darkozoid   (27.06.2013 в 13:35)
 

http://php.net/manual/en/image.examples.merged-watermark.php
"На пальцах": http://www.sitepoint.com/watermark-images-php/

  Ответить  
 
 автор: confirm   (28.06.2013 в 10:56)   письмо автору
 
   для: darkozoid   (28.06.2013 в 08:49)
 

Ну если не важно, тогда и сказать нечего.
Вы свой класс в помойку, и просто делайте для примера наложения разных типов с разными свойствами друг на друга и смотрите результат. Может тогда и "не важно" в помойку. )

А если бы я написал кода эдак строк 300, вы бы его тоже процитировали? )

  Ответить  

Сообщения:  [1-10]   [11-13] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования