PHP:水印不起作用

时间:2013-08-09 16:20:34

标签: php watermark

我创建了一个水印功能,如下所示:

的index.php

<?php
include 'core.inc.php';

do_watermark('bg1.jpg', 'logo1.png');
?>

core.inc.php

<?php
header ( 'Content-type: image/jpeg' );

function do_watermark($source_image, $logo) {

$watermark = imagecreatefrompng ( $logo );
$watermark_width = imagesx ( $logo );
$watermark_height = imagesy ( $logo );

$image = imagecreatetruecolor ( $watermark_width, $watermark_height );
$image = imagecreatefromjpeg ( $source_image );

$image_size = getimagesize ( $source_image );

$x = $image_size [0] - $watermark_width - 10;
$y = $image_size [1] - $watermark_height - 10;

imagecopymerge ( $image, $watermark, $x, $y, 0, 0, $watermark_width, $watermark_height, 40 );
imagejpeg ( $image );
}
?>

但是在致电do_watermark('bg1.jpg', 'logo1.png')时,什么都不显示。

bg1.jpglogo1.png位于index.php

任何帮助都会很棒。

2 个答案:

答案 0 :(得分:2)

水印图像通常不会比带水印的图像小吗?您创建的工作图像是水印的大小而不是源图像的大小 - 这是您真正想要的吗?我不确定x和y坐标 - 水印越大,越往右和(向上或向下?),因为x和y随着水印的大小而增加。我会考虑将它(x和y)定位为图像大小和水印大小的函数。

您还可以对JPEG图像和PNG水印进行硬编码。您可以从文件名或getimagesize()调用('mime'条目)中获取图像类型。考虑以这种方式使其更加灵活。

答案 1 :(得分:1)

您编写的代码中存在一些主要问题,这应该可行,但请将其与您的代码进行比较以查看错误。

<?php

function do_watermark($source_image, $logo) {

    $watermark      = imagecreatefrompng($logo);
    $watermark_width    = imagesx($watermark);
    $watermark_height   = imagesy($watermark);

    $image          = imagecreatefromjpeg($source_image);
    $image_width        = imagesx($image);
    $image_height       = imagesy($image);

    $x = $image_width - $watermark_width - 10;
    $y = $image_height - $watermark_height - 10;

    imagecopymerge($image, $watermark, $x, $y, 0, 0, $watermark_width, $watermark_height, 40 );

    header('Content-Type: image/jpeg');
    imagejpeg($image);

    imagedestroy($image);

}

?>