首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP水印脚本生成空白水印

PHP水印脚本生成空白水印
EN

Stack Overflow用户
提问于 2013-08-07 16:58:41
回答 2查看 1.4K关注 0票数 0

我试图在上传到我的网站后,将水印添加到图像中,但水印似乎一直以黑色对象的形式出现,没有任何细节。我相信这个脚本有一点效果,因为如果不是的话,我可能不会看到任何水印,否则脚本就会失败。

到目前为止,这是我的剧本:

代码语言:javascript
复制
$watermark = imagecreatefrompng('preview-watermark.png');  
$watermark_width = imagesx($watermark);  
$watermark_height = imagesy($watermark);        
$image = imagecreatetruecolor($watermark_width, $watermark_height);  
$image = imagecreatefromjpeg($portfolio_preview_dir.'/'.$file);  
$size = getimagesize($portfolio_preview_dir.'/'.$file);  
$dest_x = $size[0] - $watermark_width - 5;  
$dest_y = $size[1] - $watermark_height - 5;  
imagecopymerge($image, $watermark, $dest_x, $dest_y, 0, 0, $watermark_width, $watermark_height, 100);  
imagejpeg($image, $portfolio_preview_dir.'/'.$file);  
imagedestroy($image); 
imagedestroy($watermark);

这就是它正在产生的东西。水印的形状是正确的,因为水印是325x37像素:

我试着玩水印图像本身。我的第一次尝试是使用'save‘保存photoshop水印(使用透明bg),并选择'PNG-24’。这不起作用,所以我将它保存为一个普通的PNG (没有“为web保存”),它仍然失败。

我不确定是剧本还是图像!有人能和我分享一些知识并帮助解决这个问题吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-08-07 17:10:10

代码语言:javascript
复制
$watermark = imagecreatefrompng('preview-watermark.png');
imagealphablending($watermark , false);
imagesavealpha($watermark , true);
$watermark_width = imagesx($watermark);  
$watermark_height = imagesy($watermark);        
$image = imagecreatetruecolor($watermark_width, $watermark_height);  
$image = imagecreatefromjpeg($portfolio_preview_dir.'/'.$file);  
$size = getimagesize($portfolio_preview_dir.'/'.$file);  
$dest_x = $size[0] - $watermark_width - 5;  
$dest_y = $size[1] - $watermark_height - 5;  
imagecopy($image, $watermark, $dest_x, $dest_y, 0, 0, $watermark_width, $watermark_height);  
imagejpeg($image, $portfolio_preview_dir.'/'.$file);  
imagedestroy($image); 
imagedestroy($watermark);

有些事情:

  1. imagecopymerge不允许PNG-24的透明度。

(资料来源:https://drupal.org/node/80369)

  1. 图像遮挡+图像遮挡混合允许节省透明度

(资料来源:http://php.net/manual/en/function.imagesavealpha.php)

我希望它能解决你的问题。

你还输出了JPEG,为什么?保持与PNG和你的形象将支持透明水印,现在它没有!

票数 1
EN

Stack Overflow用户

发布于 2013-08-07 17:03:13

在SO和php.net上也有很多解决方案。这是 (没有创建新的图像本身)

代码语言:javascript
复制
// Load the stamp and the photo to apply the watermark to
$stamp = imagecreatefrompng('stamp.png');
$im = imagecreatefromjpeg('photo.jpeg');

// Set the margins for the stamp and get the height/width of the stamp image
$marge_right = 10;
$marge_bottom = 10;
$sx = imagesx($stamp);
$sy = imagesy($stamp);

// Copy the stamp image onto our photo using the margin offsets and the photo 
// width to calculate positioning of the stamp. 
imagecopy($im, $stamp, imagesx($im) - $sx - $marge_right, imagesy($im) - $sy - $marge_bottom, 0, 0, imagesx($stamp), imagesy($stamp));

// Output and free memory
header('Content-type: image/png');
imagepng($im);
imagedestroy($im);

编辑

水印应使用alpha channek (透明)保存。Photoshop既然CS2 (为网络保存)应该做的事情,也GIMP的工作伟大。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18109343

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档