在PHP中为图像添加水印

时间:2012-01-12 03:16:11

标签: php watermark

基本上,我有2个PHP脚本。其中1个是PHP脚本,另一个是水印功能。

我使用这个PHP来显示带有水印的图像:

<img src="watermark1.php?image=photo.jpg>

这是我的watermark1.php:

<?php
// this tells the browser to render jpg image
header('content-type: image/jpeg'); 

// getting the image name from GET variable
$image = $_GET['image']; 

// creating png image of watermark
$watermark = imagecreatefrompng('watermark.png');   

// getting dimensions of watermark image
$watermark_width = imagesx($watermark);
$watermark_height = imagesy($watermark);  

// creating jpg from original image
$image_path =  $image;
$image = imagecreatefromjpeg($image_path);
//something went wrong
if ($image === false) {
    return false;
}
// getting the dimensions of original image
$size = getimagesize($image_path);
// placing the watermark 5px from bottom and right
$dest_x = $size[0] - $watermark_width - 5;
$dest_y = $size[1] - $watermark_height - 5;
// blending the images together
imagealphablending($image, true);
imagealphablending($watermark, true);
// creating the new image
imagecopy($image, $watermark, $dest_x, $dest_y, 0, 0, $watermark_width, $watermark_height);
imagejpeg($image);
// destroying and freeing memory
imagedestroy($image);
imagedestroy($watermark);
?>

但是,无法显示带水印的图像。我听说过GDLibrary和ImageMagicK,但我不知道这两个是什么。有没有办法只添加PHP代码来添加水印,或者是导入GDLibrary / ImageMagicK必须的。

感谢您抽出宝贵时间。

6 个答案:

答案 0 :(得分:0)

GDLibrary是一个PHP扩展,它为PHP添加了图像生成功能,例如imagejpeg或imagecopy等。 为了生成图像,您必须确保在服务器上安装并启用GD。

<强>更新

Here您可以找到有关安装GD的信息。

答案 1 :(得分:0)

ImageMagick是一个用于图像处理的软件。它比GD更强大,对于某些事情来说效果要差很多(例如,ImageMagick可以更好地完成图像缩放)。对于ImageMagick的PHP包装,请查看this链接,对于GD,请查看this链接。此外,如果你决定使用ImageMagick,请确保你符合要求(你在发布的链接中有它们)...有害的你需要在服务器上安装ImageMagick。

答案 2 :(得分:0)

我使用的不同之处就像我的魅力一样,是用javascript操纵图像。如果你坚持在服务器(PHP)上进行图像处理,那么只需在javascript文件中嵌入javascript即可。

有两种途径,但当然,我选择了jQuery。

直接Javascript:http://www.patrick-wied.at/static/watermarkjs/

Jquery:http://www.patrick-wied.at/static/watermarkjs/jq/

这种方法的技巧是通过调用.js文件在脚本末尾(之前)运行代码,然后使用$ .ready.document()进行水印配置。瞧!瞧!

答案 3 :(得分:0)

您可以使用与TopiLib一起使用的简单php代码添加和自定义输出图片:(您也可以添加图像和文本水印)

<?php require '../topi.lib.min';
$panel = new \TopiLib\TopiPanel('png transparent', 9, 0, 0, 0);
$panel->createFromPNG($_GET['image'], true);
$img = new \TopiLib\TopiImage('watermark.png', 'transparent png');
$img->startX = 100;  //your custom start X position
$img->startY = 100;  //your custom start Y position
$panel->addImage($img);
$panel->render(); ?>

答案 4 :(得分:0)

这是代码,

<?php

header('content-type: image/jpeg');
$src = $_GET['src'];
$path = pathinfo($src);
$watermark = imagecreatefrompng('watermark.png'); 
$watermark_width = imagesx($watermark); 
$watermark_height = imagesy($watermark); 
$image = imagecreatetruecolor($watermark_width, $watermark_height); 
if ($path['extension']=='png') 
$image = imagecreatefrompng($src); 
else if ($path['extension']=='jpg'||$path['extension']=='jpeg') 
$image = imagecreatefromjpeg($src); 
$size = getimagesize($_GET['src']); 
$dest_x = $size[0] - $watermark_width-10; 
$dest_y = $size[1] - $watermark_height-10; 
imagecopymerge($image, $watermark, $dest_x, $dest_y, 0, 0, $watermark_width, $watermark_height, 50); 
imagejpeg($image); 
imagedestroy($image); 
imagedestroy($watermark); 

?> 

详细信息,Image watermark in PHP

答案 5 :(得分:0)

您可以使用此解决方案。这里[$ SourceFile,$ DestinationFile]是本地目录的绝对路径。 $ imgUrl是基于 HTTP 的URL。 水印将放置在图片的顶部。

在此示例中,您必须提供存储实际图像的路径位置。然后“目标文件”将在该位置存储该水印图像

此外,请注意,您必须为字体 arial.ttf提供公共/绝对路径

解决方案已在 Laravel 5.8 中进行了测试。

function watermarkImage ($SourceFile, $WaterMarkText, $DestinationFile,$imgUrl) {
    list($width, $height) = getimagesize($SourceFile);
    $image_p = imagecreatetruecolor($width, $height);
    $image = imagecreatefromjpeg($SourceFile);
    imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width, $height, $width, $height);
    $black = imagecolorallocate($image_p, 255, 255, 255);
    $font = public_path('fonts/arial.ttf');
    $font_size = 8;
    imagettftext($image_p, $font_size, 0, 10, 20, $black,$font , $WaterMarkText);
    if ($DestinationFile <> '') {
        imagejpeg ($image_p, $DestinationFile, 100);
    } else {
        header('Content-Type: image/jpeg');
        imagejpeg($image_p, null, 100);
    };
    imagedestroy($image);
    imagedestroy($image_p);
    return  $imgUrl;
}