使用 GD 批量水印图像

Posted

技术标签:

【中文标题】使用 GD 批量水印图像【英文标题】:Batch Watermark images using GD 【发布时间】:2014-08-10 12:16:33 【问题描述】:

我一直在互联网上到处寻找用于在文件夹中批量添加水印图像的代码。我想为它们添加一个透明的 .png 水印,但我能找到的唯一脚本是用于一 (1) 个单个文件,而不是全部在一个目录中。

我试图搜索谷歌,但正如我在上面的文字中提到的那样,根本没有运气,

【问题讨论】:

因此,获取为一张图像执行此操作的代码,并用一些代码包装它以处理文件夹中的所有图像文件 我尝试了以下代码,但无法为我文件夹中的所有图像添加水印:/ runnable.com/UnF5hbIOBM91AAAb/… 【参考方案1】:

我制作了这段代码,它将水印粘贴在另一张图片的中间。 它在浏览器中可以正常工作,但不能在命令行中 我希望它对你有用。

$dir_to_img='Wallpapers_Azul';
$watermark = "angel.png";
$dir_to_new_image='watered';

    if(is_dir($dir_to_img))
        if($dir = opendir($dir_to_img))
            while(($archivo = readdir($dir)) !== false)
                if($archivo != '.' && $archivo != '..' && $archivo != '.htaccess')
                    if(substr($archivo, -4) == '.jpg' || substr($archivo, -4) == '.JPG') //only jpg files

            $im = imagecreatefrompng($watermark);
            $im2 = imagecreatefromjpeg($dir_to_img."/".$archivo);

                imagecopy($im2, $im, (imagesx($im2)/2)-(imagesx($im)/2), (imagesy($im2)/2)-(imagesy($im)/2), 0, 0, imagesx($im), imagesy($im));

        if(!is_dir($dir_to_new_image))   //save to another dir
            mkdir($dir_to_new_image, 0777, true);
        

        imagejpeg($im2,"$dir_to_new_image/$archivo",90);
        imagedestroy($im);
        imagedestroy($im2);
                
            
        closedir($dir);
        
    

结果:

原创

之后

【讨论】:

非常感谢,我刚刚试了一下,但出现以下错误! :/ 注意:未定义变量:第 20 行 /home/gallery/test/test.php 中的 image_in_folder 警告:第 20 行 /home/gallery/test/test.php 中为 foreach() 提供的参数无效 @user2406918 现在检查代码,我可以从命令运行它(Windows 8)【参考方案2】:

将此代码用于TopiLib:

<?php 
function renderToImage($inputImagePath, $watermarkImagePath)

require './topi.lib.min';
$panel = new \TopiLib\TopiPanel('png transparent', 9, 0, 0, 0);
$panel->createFromPNG($inputImagePath);
$img = new \TopiLib\TopiImage($watermarkImagePath, 'transparent png');
$img->position = 'left-bottom';      //You can use 'fill', 'fit', 'stretch', 'tile', 'center', 'right', 'right-top', 'right-bottom', 'left', 'left-top', 'left-bottom'.
//Or you can change startX and startY properties
//For text watermark use TopiText object
$panel->addImage($img);    
$panel->renderToImage($inputImagePath . "Edited." . pathinfo($inputImagePath, PATHINFO_EXTENSION));

?>

【讨论】:

以上是关于使用 GD 批量水印图像的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 GD 和 PHP 重复水印图像?

PHP GD 图像水印质量

php基础之gd图像生成缩放logo水印和简单验证码实现

PHP使用GD库实现 图像生成缩放logo水印和简单验证码

如何在 PHP 中(使用 GD)已经重新采样的图像上叠加水印?

GD图像处理——水印图实现