我正在尝试在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>
答案 0 :(得分:1)
您遇到的主要问题是您在输出一些内容后发送Content-Type: image/png
。一旦你输出任何输出,PHP立即发送所有响应头并继续到响应的正文部分。大多数服务器上的默认Content-Type
为text/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文件。