|
|
|
| Нужно сохранить прозрачность при работе с GIF изображениями в GDLib. Посмотрел решения на этом форуме, но решил пойти своим путём. Сначала проверил как будет вести себя gif, если сохранить его в png. Код:
$img = "gif+transp+rastr.gif";
$img_src = imagecreatefromgif($img);
imagepng($img_src, "img_trans.png");
|
работает, на выходе получаю PNG с полность аналогичной прозрачностью как в оригинале. Исходя из этого делаю так: создаю полноцветное изображение, заменяю чёрный цвет на прозрачность при помощи imagecolortransparent(), на это созданное изображение копирую прозрачный GIF с помощью imagecopyresampled() и сохраняю в PNG, дабы прозрачные части сохранялись. Вот код:
$img_dst = imagecreatetruecolor(600, 550);
$black = imagecolorallocate($img_dst, 0, 0, 0);
imagecolortransparent($img_dst, $black);
$img = "image.gif"; // original
$img_src = imagecreatefromgif($img);
imagecopyresampled($img_dst, $img_src, 0, 0, 0, 0, 600, 550, 600, 550);
imagepng($img_dst, "img_result.png");
echo "<body bgcolor='grey'><img src='img_result.png'>";
|
Проблема заключается в том, что если на оригинальном изображении имеются черные цвета, то они тоже заменяются на прозрачность. И никак не могу понять почему, ведь я заменяю черный цвет только на изображении $img_dst, а эффект распространяется на весь оригинал $img_src.
Вот к примеру такое изображение: http://zel-writers.zuta.net/image.gif (по идее чёрный квадрат не должен заменяться на прозрачность, а только прозрачный участок в центре). Результат работы скрипта будет таким: http://zel-writers.zuta.net/test.php
Собственно помогите разобраться, почему imagecolortransparent() действует не только на указанное изображение в 1-ом параметре, но и на все последующие изображения? Буду примного благодарен | |
|
|
|
|
|
|
|
для: NIK
(12.09.2007 в 22:28)
| | что, никто не подскажет? | |
|
|
|
|
|
|
|
для: NIK
(14.09.2007 в 14:58)
| | Зачем png делайте gif | |
|
|
|
|
|
|
|
для: mihdan
(14.09.2007 в 17:00)
| | пробовал разные варианты решения для gif с этого форума - и с разной палитрой и без, но так и не понял. Может покажите на этом куске кода как сделать? | |
|
|
|