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

Форум PHP

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

 

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

вид форума:
Линейный форум Структурный форум

тема: Замена цвета на текстуру средствами gdlib
 
 автор: kireyev   (22.03.2011 в 09:25)   письмо автору
68.9 Кб
 
 

Коллеги, подскажите как заменить черный (любой по выбору) цвет из изображения 1 и слить с текстурой изображения 2 и получить изображение 3? Решение необходимо выполнить средствами gdlib. Хотябы направьте куда копать, самостоятельно не смог ничего нарыть!

Файлы см. в приложении

  Ответить  
 
 автор: DJ Paltus   (22.03.2011 в 12:07)   письмо автору
24.4 Кб
 
   для: kireyev   (22.03.2011 в 09:25)
 

Здравствуйте, коллега.
Будет небольшая глючность, так как заменяется один цвет, а буква "В" состоит из нескольких, отчасти благодаря сжатию JPEG, отчасти из-за крайчика, который серенький. См. приложение.
<?php
$src 
imagecreatefromjpeg("1.jpg"); //изображение с буквами
$und imagecreatefromjpeg("2.jpg"); //изображение с подложкой
$b imagecolorallocate($src0,0,0); //задаем атрибут черного
imagetruecolortopalette($srctrue255); //волшебная функция, которую нашел тут же на форуме, без нее не работает
imagecolortransparent($src$b);//заменяем весь черный прозрачными пихелями
$n imagecreatetruecolor(174,101);//создаем пустое изображение (размеры - потому что у меня так ваши картинки вырезались)
imagecopy($n$und0,0,0,0,174,101);//слой с подложкой
imagecopy($n$src0,0,0,0,174,101);//слой с дыркой на месте буквы "В"
header("Content-Type: image/png");//кидаем в браузер заголовок
imagejpeg($n""100);//выводим в браузер жпег 100% качества
?>

  Ответить  
 
 автор: kireyev   (23.03.2011 в 14:28)   письмо автору
8.6 Кб
 
   для: DJ Paltus   (22.03.2011 в 12:07)
 

Отличное решение, спасибо!!!
К сожалению при использовании этого алгоритма появились еще пара проблем:
$color_filename_sql = mysql_query("SELECT `color`.`filename` FROM color WHERE `color`.`id` = '$color_id'");
$color_filename = mysql_fetch_assoc($color_filename_sql);

$und = imagecreatefrompng("../colors/".$color_filename['filename']);
$black = imagecolorallocate($src, 0,0,0);
imagetruecolortopalette($src, true, 255);
imagecolortransparent($src, $black);
$im = imagecreatetruecolor(200,200);

imagecopyresampled($im, $und, 0,0,0,0,200,200,1000,1000);
imagecopyresampled($im, $src, 0,0,0,0,200,200,1000,1000);
$del = imagecolorat($im,0,0);
imagecolortransparent($im, $del);
Header("Content-type: image/png");
imagepng($im); 
ImageDestroy($im);


1. Вместо белого/прозрачного фона появился серый фон, но эту проблему удалось решить так:
$del = imagecolorat($im,0,0);
imagecolortransparent($im, $del);

2. Вокруг наложенной текстуры (там где мы заменили черный цвет на картинку) появилась белая полоска.

Возможно эти проблемы связаны с функцией: imagecopyresampled?

  Ответить  
 
 автор: kireyev   (24.03.2011 в 08:06)   письмо автору
 
   для: kireyev   (23.03.2011 в 14:28)
 

Неужели никто не сталкивался с такой проблемой?

  Ответить  
Rambler's Top100
вверх

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