【发布时间】:2018-12-05 22:22:58
【问题描述】:
我正在尝试编写一个包含两个 png 图像的脚本,一个是水印,另一个是源图像。代码要做的是调用一个函数,该函数执行图像复制并将两个图像混合为一个,并显示在浏览器上。但是,我总是以损坏的图像结束。
我不想保存图像,我只想让浏览器显示带有水印的源图像。 我还检查了文件权限,该功能本身在单独时可以正常工作。使用 imagepng 显示正确的图像
下面是我的测试代码:
<?php
ob_start();
showimage();
$image = ob_get_contents();
$data = base64_encode($image);
ob_clean();
echo "<h1> hello </h1>";
echo "<img src='data:image/png;base64," . $data . "'/>";
function showimage() {
$target_dir = "./uploads/";
$src = imagecreatefrompng($target_dir.'watermark.png');
$dest = imagecreatefrompng($target_dir.'greenblobburnt.png');
imagealphablending($dest, true);
imagealphablending($src, true);
imagesavealpha($dest, true);
imagesavealpha($src, true);
imagecopy ($dest,$src, 5, imagesy($dest) - (imagesy($src)+5), 0, 0,imagesx($src),imagesy($src));
imagealphablending($dest, true);
imagesavealpha($dest, true);
// Output and free from memory
header('Content-Type: image/png');
imagepng($dest);
imagedestroy($dest);
imagedestroy($src);
}
?>
【问题讨论】:
-
你误会了——不能输出带有img标签的html,也不能在src中包含图片数据。 src 需要一个 url。如果您的代码只是返回没有 html 的图像数据,那么您可以使用单独的标记将该脚本引用为 src= url。
-
@gview 建议您阅读数据 URI。 developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/…
-
去掉
header('Content-Type: image/png');行,否则浏览器会认为您提供的是图像而不是 HTML。它会尝试渲染它并失败。