【问题标题】:How can I repeat a watermark throughout a requested image using PHP?如何使用 PHP 在整个请求的图像中重复水印?
【发布时间】:2011-09-07 11:27:29
【问题描述】:

我正在尝试为目录中的所有图像添加水印,比如说 www.example.com/private。其中一些图像具有很高的分辨率,而另一些则相对正常,因此目前我的水印对于较小的图像效果很好。即使将水印居中,我仍然会留下较大图像的理想部分容易被裁剪。

所以我的问题是我将如何编写一个 php 脚本来在整个图像中重复水印,无论是垂直还是水平?我对后端开发的了解还不够,只知道需要提供足够的水印保护,所以我在google上四处寻找,只能找到这个http://www.regardadesign.co.uk/blog/post/php-image-manipulation/15,它不起作用。

到目前为止,我已将以下 .htaccess 文件放入 /private 目录:

<IfModule mod_rewrite.c>
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule \.(gif|jpeg|jpg|png)$ /admin/watermark.php [QSA,NC]
</ifModule>"

这是 watermark.php 文件中的脚本:

<?php
ini_set('memory_limit','200M');
$path = $_SERVER['DOCUMENT_ROOT'].$_SERVER['REQUEST_URI'];
$image = imagecreatefromstring(file_get_contents($path));
$w = imagesx($image);
$h = imagesy($image);
$watermark = imagecreatefrompng('watermark.png');
$ww = imagesx($watermark);
$wh = imagesy($watermark);
imagecopy($image, $watermark, (($w/2)-($ww/2)), (($h/2)-($wh/2)), 0, 0, $ww, $wh);
header('Content-type: image/jpeg');
imagejpeg($image);
imagedestroy($image);
imagedestroy($watermark);
exit();
?>

【问题讨论】:

    标签: php image watermark


    【解决方案1】:

    发生这种情况是因为您只插入了一次水印。如果您沿着图像区域重复水印,它就会成功。

    为此替换您的 imagecopy 行:

    $img_paste_x = 0;
    while($img_paste_x < $w){
        $img_paste_y = 0;
        while($img_paste_y < $h){
            imagecopy($image, $watermark, $img_paste_x, $img_paste_y, 0, 0, $ww, $wh);
            $img_paste_y += $wh;
        }
        $img_paste_x += $ww;
    }
    

    【讨论】:

    • 不,很遗憾,这不起作用,它仍然只在中心放置一个水印副本,现在它只是一个纯黑色矩形,而不是我的水印图像。
    • 是的,这确实重复了它,它也不再是黑色矩形了。尽管这是我所要求的,并且您已经适当地编写了脚本,但在某些图像上水印没有显示,或者至少没有显示整个水印。有没有办法让重复水印的中心位于图像的中心,或者这太技术性和不可能了?
    • 在您上次更新答案后,水印重复出现,每个水印副本之间没有任何空格,因此我增加了水印周围的画布大小并留有空白以提供填充。它们现在在较大的图像上看起来很好,但较小的(正常尺寸)图像只显示一半甚至更少的水印。 - 我不确定解决这个问题的最佳方法。填充可以由脚本呈现吗?或者你有什么其他想法?
    • 如果水印大于图像,则使用imagecopyresized 调整水印大小以适合您的图像。 php.net/manual/en/function.imagecopyresized.php
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-24
    • 1970-01-01
    • 2016-08-11
    • 2015-04-15
    • 1970-01-01
    相关资源
    最近更新 更多