22.3.3 输出最终图形

可以将一个图像直接输出到浏览器或者一个文件。

在这个例子中,我们将图像直接输出到浏览器。这包括两个步骤。首先,需要告诉Web浏览器我们输出的是一个图像而不是文本或HTML。这可以通过调用Header()函数指定图像的MIME类型来完成:


Header('Content-type:image/png');


通常,当在浏览器中接收一个文件时,Web服务器首先发送的内容是MIME类型。对于一个HTML或PHP页面(执行后),最先发送的是:


Content-type:text/html


它将告诉浏览器如何解释后续的数据。

在这个例子中,我们要告诉浏览器将发送的是一个图像而不是常规的HTML输出。可以调用函数Header()来实现它。该函数我们尚未讨论过。

该函数将发送一个HTML标题字符串。该函数的另一个典型应用是实现HTTP重定向,告诉浏览器来加载一个不同的页面,而不是被请求的那个页面。它们通常应用于删除页面的时候。例如:


Header('Location:http://www.domain.com/new_home_page.html');


值得注意的是,在使用Header()函数时,如果该页的HTTP标题已经被发送了,那么该函数将不会执行。一旦输出任何东西到浏览器,PHP将自动发送一个HTTP标题。因此,如果使用了任何echo语句,或者甚至是在打开PHP标记之前有任何空白区域,该标题都将被发送过去,并且在试图调用Header()的时候,会从PHP接收到一个警告信息。然而,你却可以在同一个脚本里多次调用Header()函数,从而发送多个HTTP标题,尽管它们都必须出现在向浏览器发送任何输出之前。

在我们发送标题数据之后,将通过调用如下函数输出图像数据:


imagepng($im);


该函数以PNG格式将输出内容发送到浏览器。如果希望以不同的格式发送,可以调用Imagejpeg()函数(如果系统支持JPEG的话)。仍需首先发送相应的标题,也就是:


Header('Content-type:image/jpeg');


当然,也有第二选择,那就是:将图像发送到一个文件而不是浏览器。这可以通过将可选的第二个参数加到ImagePNG()函数(或者,与之类似的支持其他格式的函数)来实现:


imagepng($im,$filename);


请记住,在这里,所有PHP的写文件规则都适用(例如,正确地设置文件权限)。