Я пытаюсь написать небольшую функцию php, чтобы сделать изображение и применить изображение типа водяного знака поверх изображения, и они сохраняют их как 1 изображение, этот код работает с 0 ошибками, но не использует изображение водяного знака, есть ли что-то очевидное что настаивает на том, почему это не будет?
<?PHP $source_file_path ='http://cache2.mycrib.net/images/image_group92/0/43/653807d5727a46498180e8ef57fdf7819b2b0c.jpg'; $watermark_image='fpwatermark.gif'; // the watermark image $destination_image ='coooolgif.gif'; // where to save new file $imagesize = getimagesize($destination_image); $watermarksize = getimagesize($watermark_image); $watermark_x = $imagesize[0] - $watermarksize[0] - 2; $watermark_y = $imagesize[1] - $watermarksize[1] - 2; //run function watermark_img($watermark_image, $destination_image, $watermark_x, $watermark_y, $watermark_w, $watermarksize[0], $watermarksize[1], $source_file_path); function watermark_img($watermark_src, $image_src, $watermark_x, $watermark_y, $watermark_w,$watermark_h, $source_file_path) { //Determine what type of image we're working with list($width, $height, $type) = getimagesize($image_src); $image_ext = $type; switch (strtolower($image_ext)) { #gif case 1: $image = imagecreatefromgif($image_src); break; #jpg case 2: $image = imagecreatefromjpeg($image_src); imageAlphaBlending($image, true); break; #png case 3: $image = imagecreatefrompng($image_src); imageAlphaBlending($image, true); break; default: return false; } //Create an instance of the watermark in memory if (!($watermark = imagecreatefromgif($watermark_src))) return false; //Make sure your Watermark is a GIF //Add watermark to the image if (!(imagecopy($image, $watermark, $watermark_x, $watermark_y, 0, 0, $watermark_w, $watermark_h))) return false; //Resave the image with the watermark now in place if (!(imagejpeg($image, $image_src))) return false; //Destroy instaces of images to free up RAM imagedestroy($image); imagedestroy($watermark); //Apparently everything went well. return $image_ext; } ?>
Я думаю, вам нужно изменить это (вот простой учебник http://www.cafewebmaster.com/image-watermark-php ):
//Add watermark to the image if (!(imagecopy($image, $watermark, $watermark_x, $watermark_y, 0, 0, $watermark_w, $watermark_h)))
с:
//Add watermark to the image if (!(imagecopymerge($image, $watermark, $watermark_x, $watermark_y, 0, 0, $watermark_w, $watermark_h, 100)))
или используйте wideImage 😉
Вот учебник о том, как сделать это с водяного знака с помощью прозрачного изображения PNG: http://www.sitepoint.com/article/watermark-images-php/
Я использовал это раньше, и он работает. Проблема с кодом, который у вас есть, вероятно, заключается в том, что вы пытаетесь создать jpeg, но расширение файла является gif, поэтому оно не отображается правильно. Может быть, ошибаюсь.
Если это просто не сохранение окончательного изображения, то это просто проблема с правами доступа к папке. В этом случае вам, скорее всего, придется установить папку на 777 через chmod.