我想在多个图像上添加水印,并在浏览器上显示它们。下面是我的一段代码:
<?php
include('admin/connect.php');
$q = mysql_query("select * from ring");
while($row=mysql_fetch_array($q)){
$img = 'admin/'.$row['Image'];
$stamp = imagecreatefrompng('admin/image/watermark.png');
$im = imagecreatefromjpeg($img);
$marge_right= 20;
$marge_bottom = 50;
$sx = imagesx($stamp);
$sy = imagesy($stamp);
imagecopy($im, $stamp, imagesx($im) - $sx - $marge_right, imagesy($im) - $sy - $marge_bottom, 0, 0, imagesx($stamp), imagesy($stamp));
header('Content-type: image/png');
imagepng($im);
imagedestroy($im);
}
?>我在代码中使用了header('Content-type: image/png');,因此无法显示所有图像。在这里,我从数据库中提取图像,然后添加水印,但这将是更好的,如果你们中的任何人可以帮助我添加水印,然后保存在数据库中。提前谢谢。
发布于 2015-02-25 06:52:33
您不能在一个页面中有多个标题作为header('Content-type: image/png') (每个页面只能有一个Content-Type ),但您可以有多个标签。如果您想要修改原始图像,则不需要在数据库中进行更新,在本例中,这是代码。
<?php
include('admin/connect.php');
$q = mysql_query("select * from ring");
while($row=mysql_fetch_array($q)){
$img = 'admin/'.$row['Image'];
$stamp = imagecreatefrompng('admin/image/watermark.png');
$im = imagecreatefromjpeg($img);
$marge_right= 20;
$marge_bottom = 50;
$sx = imagesx($stamp);
$sy = imagesy($stamp);
imagecopy($im, $stamp, imagesx($im) - $sx - $marge_right, imagesy($im) - $sy - $marge_bottom, 0, 0, imagesx($stamp), imagesy($stamp));
imagejpeg($im, 'admin/' . $row['Image']); //This overwrite your original image
echo "<img src='admin/" . $row['Image'] . "' /><br/>";
</div>
}
?>如果你想保留你的原始图像,你必须用另一个名字保存你的图像,然后在数据库中更新这个名字,在这种情况下,你可以这样做:
<?php
include('admin/connect.php');
$q = mysql_query("select * from ring");
while($row=mysql_fetch_array($q)){
$img = 'admin/'.$row['Image'];
$stamp = imagecreatefrompng('admin/image/watermark.png');
$im = imagecreatefromjpeg($img);
$marge_right= 20;
$marge_bottom = 50;
$sx = imagesx($stamp);
$sy = imagesy($stamp);
imagecopy($im, $stamp, imagesx($im) - $sx - $marge_right, imagesy($im) - $sy - $marge_bottom, 0, 0, imagesx($stamp), imagesy($stamp));
imagejpeg($im, 'admin/' . 'wm-' . $row['Image']); //Saving the watermarked with the prefix wm
echo "<img src='admin/" . 'wm-' . $row['Image'] . "' /><br/>";
</div>
}
mysql_query("UPDATE ring SET Image = CONCAT('wm-', Image)"); //Updating all your image with the prefix wm-
?>发布于 2015-03-01 05:23:00
在国际海事组织,您永远不应该(几乎永远不)将图像保存到数据库中。将路径保存到数据库并将其存储在本地或亚马逊S3等云解决方案上
发布于 2015-03-01 15:29:39
您不能在一个请求中发送多个镜像。在我的选项中,您有三个选项。
(要获取变量中的图像数据,必须使用输出缓冲)
<?php
include('admin/connect.php');
$q = mysql_query("select * from ring");
while ($row = mysql_fetch_array($q)) {
$img = 'admin/' . $row['Image'];
$stamp = imagecreatefrompng('admin/image/watermark.png');
$im = imagecreatefromjpeg($img);
$marge_right = 20;
$marge_bottom = 50;
$sx = imagesx($stamp);
$sy = imagesy($stamp);
imagecopy(
$im,
$stamp,
imagesx($im) - $sx - $marge_right,
imagesy($im) - $sy - $marge_bottom,
0,
0,
imagesx($stamp),
imagesy($stamp)
);
ob_start();
imagepng($im);
$image_data = ob_get_clean();
echo '<img src="data:image/png;base64,' . base64_encode($image_data) . '">';
imagedestroy($im);
}借助一些js的魔力,你可以将html内容包含到你的文件中(比如https://stackoverflow.com/a/9003363/3972213)
https://stackoverflow.com/questions/28514146
复制相似问题