如何在PHP中向右下角的图像添加水印?

如何在PHP中向右下角的图像添加水印?,php,image,watermark,Php,Image,Watermark,我正在尝试在PHP中将水印添加到图像中。我正在使用下面的代码,工作良好。但我在以下方面面临挑战 <?php function watermark_image($target, $wtrmrk_file, $newcopy) { $watermark = imagecreatefrompng($wtrmrk_file); imagealphablending($watermark, false); imagesavealpha($watermark, true);

我正在尝试在PHP中将水印添加到图像中。我正在使用下面的代码,工作良好。但我在以下方面面临挑战

<?php

 function watermark_image($target, $wtrmrk_file, $newcopy) {
    $watermark = imagecreatefrompng($wtrmrk_file);
    imagealphablending($watermark, false);
    imagesavealpha($watermark, true);
    $img = imagecreatefromjpeg($target);
    $img_w = imagesx($img);
    $img_h = imagesy($img);
    $wtrmrk_w = imagesx($watermark);
    $wtrmrk_h = imagesy($watermark);
    imagecopy($img, $watermark, 500, 200, 0, 0, 100, 100);
    imagejpeg($img, $newcopy, 100);
    imagedestroy($img);
    imagedestroy($watermark);
}

watermark_image('1.jpg','assets/images/watermark.png', 'new_image_name.jpg');

exit();
?>

我试图实现一个代码,在其中我可以将水印应用于右下角的任何图像。具有150x150的固定高度和宽度。我从过去的两个小时开始尝试,但没有成功地将其准确放置


有人有主意吗?如何实现?这将非常有用。

您将水印图像放置在错误的位置。它需要与源图像的宽度和高度以及水印图像的尺寸相关。这就解决了您的问题:

  imagecopy($img, $watermark, $img_w - $wtrmrk_w, $img_h - $wtrmrk_h, 0, 0, $wtrmrk_w, $wtrmrk_h);

您将水印图像放置在错误的位置。它需要与源图像的宽度和高度以及水印图像的尺寸相关。这就解决了您的问题:

  imagecopy($img, $watermark, $img_w - $wtrmrk_w, $img_h - $wtrmrk_h, 0, 0, $wtrmrk_w, $wtrmrk_h);


这段代码会发生什么?如果您实际使用的是PHP5.3,那么您不应该这样做。它多年来一直没有得到支持。PHP7.1是目前应该使用的最低版本。我使用的是PHP7.0版本,这段代码是我从长期项目中获得的。你能帮我更新一个吗?@miken32它将水印放在图像的中心。这段代码中的任何内容都不会因为PHP版本而改变。这段代码会发生什么?如果你实际使用的是PHP5.3,你不应该这样做。它多年来一直没有得到支持。PHP7.1是目前应该使用的最低版本。我使用的是PHP7.0版本,这段代码是我从长期项目中获得的。你能帮我更新一个吗?@miken32它将水印放在图像的中心。这段代码中的任何内容都不会因为PHP版本而改变。上面的代码工作得很好,它位于右下角,只是搞不清楚如何设置100x100的高度watermark@AkshayShrivastav您已经编写了确定水印尺寸的代码:
$wtrmrk\u w=imagesx($watermark)$wtrmrk_h=图像系统($水印)我只是在计算中使用了这些值。如果我的回答回答了你的问题,请考虑把它标记为解决方案。非常感谢。您好@kmoser,实际上,我面临一个挑战,我想在我上传的任何图像的右下角制作一个100x100的水印,无论大小,我都面临一个挑战。你能帮我更新代码吗?@AkshayShrivastav我提供的代码将完全满足你的要求。它使用上载图像的尺寸以及水印将水印放置在图像的右下角,而不管上载图像或水印的大小。我当前的水印为420 x 340,因此在放置水印时它会变得非常大,所以我想把它做成100x100有没有可能我可以用代码或者我必须把水印大小做成100x100上面的代码工作得很好,它在右下角,只是搞不清楚如何设置100x100的高度watermark@AkshayShrivastav您已经编写了确定水印尺寸的代码:
$wtrmrk\u w=imagesx($watermark)$wtrmrk_h=图像系统($水印)我只是在计算中使用了这些值。如果我的回答回答了你的问题,请考虑把它标记为解决方案。非常感谢。您好@kmoser,实际上,我面临一个挑战,我想在我上传的任何图像的右下角制作一个100x100的水印,无论大小,我都面临一个挑战。你能帮我更新代码吗?@AkshayShrivastav我提供的代码将完全满足你的要求。它使用上载图像的尺寸以及水印将水印放置在图像的右下角,而不管上载图像或水印的大小。我当前的水印为420 x 340,因此在放置水印时它会变得非常大,所以我想把它做成100x100有没有可能我可以用代码或者我必须把水印大小做成100x100