Накладываю водяной знак (PNG) на GIF, получается черный фон вместо прозрачности. Как убрать черный фон? Код (Text): <? //имя файла $f_name = time(); //папка $path_directory = 'avatars/'; //проверка формата исходного изображения if(preg_match('/[.](JPG)|(jpg)|(jpeg)|(JPEG)|(gif)|(GIF)|(png)|(PNG)$/',$_FILES['imgupload']['name'])){ $fil = $_FILES['imgupload']['name']; //расширение файла $filename = $f_name.".".substr($fil, strrpos($fil, '.') + 1); $source = $_FILES['imgupload']['tmp_name']; $target = $path_directory . $filename; move_uploaded_file($source, $target); //загрузка оригинала в папку $path_directory if(preg_match('/[.](GIF)|(gif)$/', $filename)) { $im = imagecreatefromgif($path_directory.$filename) ; //если оригинал был в формате gif, то создаем изображение в этом же формате. Необходимо для последующего сжатия } if(preg_match('/[.](PNG)|(png)$/', $filename)) { $im = imagecreatefrompng($path_directory.$filename) ; //если оригинал был в формате png, то создаем изображение в этом же формате. Необходимо для последующего сжатия } if(preg_match('/[.](JPG)|(jpg)|(jpeg)|(JPEG)$/', $filename)) { $im = imagecreatefromjpeg($path_directory.$filename); //если оригинал был в формате jpg, то создаем изображение в этом же формате. Необходимо для последующего сжатия } //Создаем ВОДЯНОЙ ЗНАК - - - - - - - - - - - - //ЕСЛИ НЕ НУЖЕН ВОДЯНОЙ ЗНАК - УДАЛИТЬ ЭТОТ БЛОК! //если ширина оригинального изображения больше 300 пикселей, ставим водяной знак if(imagesx($im) >= 300){ $stamp = imagecreatefrompng('watermark.png'); // Установка полей для штампа и получение высоты/ширины штампа $marge_right = 10; $marge_bottom = 10; $sx = imagesx($stamp); $sy = imagesy($stamp); // Копирование изображения штампа на фотографию с помощью смещения края // и ширины фотографии для расчета позиционирования штампа. imagecopy($im, $stamp, imagesx($im) - $sx - $marge_right, imagesy($im) - $sy - $marge_bottom, 0, 0, $sx, $sy); imagejpeg($im, $path_directory.$f_name.".jpg"); //здесь конвертируем gif, png в jpg и удаляем оригиналы if(preg_match('/[.](GIF)|(gif)|(PNG)|(png)$/', $filename)) { imagejpeg($im, $path_directory.$f_name.".jpg"); unlink($target); } }//if //Конец кода ВОДЯНОЙ ЗНАК - - - - - - - - - - - - // МИНИАТЮРА // dest - результирующее изображение // w - ширина изображения // ratio - коэффициент пропорциональности $w = 250; $w_src = imagesx($im); //вычисляем ширину $h_src = imagesy($im); //вычисляем высоту $ratio = $w_src/$w; $w_dest = round($w_src/$ratio); $h_dest = round($h_src/$ratio); $dest = imagecreatetruecolor($w_dest,$h_dest); // важно именно truecolor!, иначе будем иметь 8-битный результат imagecopyresampled($dest, $im, 0, 0, 0, 0, $w_dest, $h_dest, $w_src, $h_src); //создаем миниатюру imagejpeg($dest, $path_directory.$f_name."_small.jpg"); $avatar = $path_directory.$f_name."_small.jpg"; }else{ //в случае несоответствия формата, выдаем соответствующее сообщение exit ("Аватар должен быть в формате <strong>JPG,GIF или PNG</strong>"); //останавливаем выполнение сценариев } echo "<img width='500' src='avatars/".$f_name.".jpg' />"; echo "<br/>"; echo "<img src='avatars/".$f_name."_small.jpg' />"; ?> <br /> <a href="index.php">назад</a>
пробовал сделать так: Код (Text): imagecolortransparent($im, imagecolorallocatealpha($im, 0, 0, 0, 127)); imagealphablending($im, false); imagesavealpha($im, true); не получилось
поищи в гугле. сорри, но я уже лет 8 как ушел от GD в пользу более качественных изображений и более широкого функционала. но то что ватермарк накладывается в пару простых решений - это точно. я конечно могу поднять древние проекты, но ты быстрее нагуглишь.