|
 68.9 Кб |
|
| Коллеги, подскажите как заменить черный (любой по выбору) цвет из изображения 1 и слить с текстурой изображения 2 и получить изображение 3? Решение необходимо выполнить средствами gdlib. Хотябы направьте куда копать, самостоятельно не смог ничего нарыть!
Файлы см. в приложении | |
|
|
|
|
 24.4 Кб |
|
|
для: kireyev
(22.03.2011 в 09:25)
| | Здравствуйте, коллега.
Будет небольшая глючность, так как заменяется один цвет, а буква "В" состоит из нескольких, отчасти благодаря сжатию JPEG, отчасти из-за крайчика, который серенький. См. приложение.
<?php
$src = imagecreatefromjpeg("1.jpg"); //изображение с буквами
$und = imagecreatefromjpeg("2.jpg"); //изображение с подложкой
$b = imagecolorallocate($src, 0,0,0); //задаем атрибут черного
imagetruecolortopalette($src, true, 255); //волшебная функция, которую нашел тут же на форуме, без нее не работает
imagecolortransparent($src, $b);//заменяем весь черный прозрачными пихелями
$n = imagecreatetruecolor(174,101);//создаем пустое изображение (размеры - потому что у меня так ваши картинки вырезались)
imagecopy($n, $und, 0,0,0,0,174,101);//слой с подложкой
imagecopy($n, $src, 0,0,0,0,174,101);//слой с дыркой на месте буквы "В"
header("Content-Type: image/png");//кидаем в браузер заголовок
imagejpeg($n, "", 100);//выводим в браузер жпег 100% качества
?>
|
| |
|
|
|
|
 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
(23.03.2011 в 14:28)
| | Неужели никто не сталкивался с такой проблемой? | |
|
|
|
|