php - 用php给图像加水印

标签 php image upload watermark

我的网站(全部用 html 和 php 编码)包含允许某些用户上传图片的功能。使用此代码调整图片大小并加水印:

function watermarkpic($filename) {

ini_set('max_input_time', 300);

require 'config.php';  

$watermark = imagecreatefrompng('watermarknew.png');
$watermarkwidth = imagesx($watermark);
$watermarkheight = imagesy($watermark);

if(preg_match('/[.](jpg)$/', $filename)) {  
        $originalimage = imagecreatefromjpeg($path_to_image_directory . $filename);  
    } else if (preg_match('/[.](gif)$/', $filename)) {  
        $originalimage = imagecreatefromgif($path_to_image_directory . $filename);  
    } else if (preg_match('/[.](png)$/', $filename)) {  
        $originalimage = imagecreatefrompng($path_to_image_directory . $filename);  
    }  

$originalwidth = imagesx($originalimage);
$originalheight = imagesy($originalimage);

$maxsize = 800;
$imgratio = $originalwidth / $originalheight;

if($imgratio > 1) {
    $finalwidth = $maxsize;
    $finalheight = $maxsize / $imgratio;
}
else {
    $finalheight = $maxsize;
    $finalwidth = $maxsize * $imgratio;
}   

$finalimage = imagecreatetruecolor($finalwidth,$finalheight);

imagecopyresampled($finalimage, $originalimage, 0,0,0,0,$finalwidth,$finalheight,$originalwidth,$originalheight);

imagecopymerge($finalimage, $watermark, 0, 0, 0, 0, $watermarkwidth, $watermarkheight, 100);

//now move the file where it needs to go
if(!file_exists($path_to_medimage_directory)) {  
        if(!mkdir($path_to_medimage_directory)) {  
                die("There was a problem. Please try again!");  
        }  
     } 

 imagejpeg($finalimage, $path_to_medimage_directory . $filename);   
}

问题是水印具有透明背景,但在图像上显示为黑色背景。我看过有关 alpha 混合等的内容,但我真的不知道这是什么。我想了解我在做什么,并解决问题,使水印像它应该的那样透明。真实的图片应该填满空间。

提前致谢。

最佳答案

Scott,这里可以进行很多事情。

  1. 您需要确保使用未索引的 alpha 透明度保存 PNG。索引透明度基本上表示“这种颜色(可能是黑色)将在整个图像中显示为透明。”当通过浏览器或图像编辑器读取时,它可能是透明的,但特别是如果您将它与 JPG 合并,透明度将不会得到尊重。想了解更多,试试http://www.idux.com/2011/02/27/what-are-index-and-alpha-transparency/

  2. 确保为两张图片获取正确的尺寸。参见 Transparent PNG over JPG in PHP以确保您不会遇到同样的问题。

  3. 如果您仍然遇到问题,您可能想在这里查看:http://php.net/manual/en/image.examples.merged-watermark.php因为它显示了如何更改图像的不透明度。它可能与您想要完成的目标很接近,或者可能会引起其他想法。

关于php - 用php给图像加水印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9433566/

相关文章:

javascript - Electron 上传进度

php - 为什么我的 php 没有显示任何内容? (包含代码)

php - 不创建缩略图?

php - 借助 PHP - Image Magick 转换 .SVG 图像

jQuery:向元素添加标题属性并从以下元素插入文本

forms - Joomla 自定义组件上传表单

php - Zend Framework 在 Application.ini 中包含princexml路径

php - 如何使用 docker 卷与主机共享容器文件?

php - 使用 mysql 获取正在进行的月份的下个月记录

c# - 上传超过 16kb 的图片 vs2010 c# asp.net