我正在尝试编写一个脚本,该脚本需要两个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);
}
?>
答案 0 :(得分:-1)
您正在尝试将html-with-image-inline与原始图像二进制混合在一起,并且由于该header()调用,您告诉浏览器“这是png图像”,而实际上是html +原始png二进制级联。然后浏览器尝试渲染此混乱状态,png渲染器失败,并且出现“损坏的图像”错误。
尝试摆脱html输出和输出缓冲区(又名
)echo "<h1> hello </h1>";
echo "<img src='data:image/png;base64," . $data . "'/>";
和
ob_start(); $image = ob_get_contents();ob_clean();
删除它。您还会收到损坏的图像错误吗?