如何将图像添加到 PHP 中的图像上,如水印

Posted

技术标签:

【中文标题】如何将图像添加到 PHP 中的图像上,如水印【英文标题】:How can I add an image onto an image in PHP like a watermark 【发布时间】:2009-08-02 00:02:53 【问题描述】:

我正在尝试编写一个小的 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;

?>

【问题讨论】:

【参考方案1】:

我认为你需要改变这个(这里有一个简单的教程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 ;)

【讨论】:

【参考方案2】:

这是一个关于如何使用透明 PNG 图像从水印制作它的教程:http://www.sitepoint.com/article/watermark-images-php/

我以前用过它,它可以工作。您拥有的代码的问题可能是您正在尝试生成 jpeg,但文件扩展名是 gif,因此无法正确呈现。不过可能是错的。

如果它只是没有保存最终图像,那么这只是文件夹的权限问题。在这种情况下,您很可能必须通过 chmod 将文件夹设置为 777。

【讨论】:

以上是关于如何将图像添加到 PHP 中的图像上,如水印的主要内容,如果未能解决你的问题,请参考以下文章

将 CSS 中的背景图像添加到高级自定义字段 (ACF)

如何使用 php 将人脸图像添加到视频中

jquery - 如何使用通过 AJAX 从 MySQL 和 PHP 检索的数据将图像添加到 Select2 下拉列表?

如何将我计算机上的图像添加到 css 或 html 中的站点?

用户控制:如何在 setter/getter 中的按钮上添加背景图像

如何使用图像组件将图像动态添加到 Gatsby 中的页面?