用PHP添加水印

时间:2012-09-21 12:24:21

标签: php image gd php-gd

这是我的PHP水印功能:

function img_watermark($image) {
    $stamp = imagecreatefrompng('images/wm.png');
    $im = imagecreatefromjpeg($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);
}

这是我的HTML代码:

<img src="<?php img_watermark('images/ornek.jpeg');?>" />

但它只是给了我这样的东西:

  

.......&lt;, u /,R M 7 a4 3eY&amp;k Tƃ#Ki ' S ^ A 2_^ L* \ LMSOݺ7 “@ \ k *) 4I 5 &lt; C LP / W 2w qopwnnnw3e ҂g QB\ _ȋc # F $ `4;; [T b - XssΩ( J “ G; O =它*˗&GT; NWO#¨8JwzVW??? &gt;有{#Z 2 / 7VWoCRVS3ӷ޶? ڝ } O=q ~ ? IY ?MvN Y k 7[ hwg &lt; / O s7o u ? 3F8 | 〜ᗟ} v' #g 6 / | 〜ᫍ( ?p( B _? sY G&gt; | ŗ޸ V)% \Z J 7/。 ..........

我想让它向我展示水印图像。我该如何解决这个问题?

3 个答案:

答案 0 :(得分:3)

你的错误集。您的HTML应如下所示:

<img src="image.php?src=images/ornek.jpeg" />

image.php应该是这样的:

$stamp = imagecreatefromjpeg('images/wm.png');
$im = imagecreatefromjpeg($_GET['src']); 
$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);

答案 1 :(得分:2)

您不能将二进制数据放入图像标记的src属性中。

src属性通常需要图片的网址。

您可以使用base64编码执行此操作:

$file = base64_encode(img_watermark('images/ornek.jpeg'));
echo "<img src='data:image/jpeg;base64,".$file."' alt='watermarked image'>";

并删除函数中的header行,除非您的PHP文件应该发送图像数据而不是HTML。最好不要混淆这些:(

答案 2 :(得分:0)

将此设置为标题:

header("Content-type:image/jpeg");

而不是:

header("Content-type:image/png");