0

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

索引.php

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

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

核心.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.jpg并且logo1.png是沿着index.php

任何帮助都会很棒。

4

2 回答 2

2

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

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

于 2013-08-09T16:33:27.150 回答
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);

}

?>
于 2013-08-09T16:32:48.167 回答