ImageMagick显示乱码文本而不是图像

时间:2015-07-18 12:19:18

标签: php imagemagick

我正在尝试在PHP中使用ImageMagick类函数。 为了熟悉ImageMagick,我在PHP中编写了几行代码,在浏览器中显示一个红色方块。

我没有显示红色方块,而是出现乱码。 我知道ImageMagick已安装,因为我可以使用ImageMagick函数将红色方块保存到文件中。

提前感谢ImageMagick和StackOverflow对这个新手的任何帮助!

这是我的PHP代码:

$image = new Imagick();
$image->newImage(100, 100, new ImagickPixel('red'));
$image->setImageFormat('png');
$image->writeImage("MyOutput.png");

header('Content-type: image/png');
echo $image;  //This causes just raw text to be displayed. :(

echo '<img src=MyOutput.png>'; //Displays a 100x100 red image!
                               //..So, ImageMagick IS installed.

这是我的完整PHP文件。

<!DOCTYPE html>
<head>
    <title>ImageMagick Test</title>
</head>
<body>
<?php

$image = new Imagick();
$image->newImage(100, 100, new ImagickPixel('red'));
$image->setImageFormat('png');

header('Content-type: image/png');
echo $image;
?>

</body>
</html>

1 个答案:

答案 0 :(得分:1)

您遇到的主要问题是您在输出一些内容后发送Content-Type: image/png。一旦你输出任何输出,PHP立即发送所有响应头并继续到响应的正文部分。大多数服务器上的默认Content-Typetext/html,因此您的浏览器会将图片内容解释为HTML,这也就是您看到垃圾的原因。这有点像在记事本中打开PNG文件。

See this question for more information about sending response headers

此外,您无法在一次请求时返回HTML和图片内容,因此不会在您的图片生成文件中添加任何HTML 。该图像是独立的文件,它必须由它自己的单独请求返回,仅包含标题,图像字节,仅此而已。

这应该有效:

<?php
$image = new Imagick();
$image->newImage(100, 100, new ImagickPixel('red'));
$image->setImageFormat('png');

header('Content-type: image/png');
echo $image;

请注意,这是整个PHP文件,您既不能从<?php ?>之外发送任何其他输出,也不能通过回显。

如果要将图像包含到HTML中,则需要第二个文件(可能是纯HTML),其外观如下:

<!DOCTYPE html>
<head>
    <title>ImageMagick Test</title>
</head>
<body>
    <!-- here we're including our image-generating PHP script -->
    <img src="imagickTest.php">
</body>
</html>

如果您想要查看放入HTML上下文中的图像,您可以参考PHP文件,如果您只想查看图像或HTML文件。