2010-01-06 102 views
2

我想用PHP GD库控制图像的显示 - 当浏览器请求图像时,我将在其底部添加一些文本,而不是比将文本保存到图像中。在php中使用GD进行图像处理和输出

我知道我可以做到这一点:在标题中设置MIME类型,然后用文件名称调用imagepng(...)只显示图像到浏览器,但我怎么将它嵌入到文档中?像,

<img src='somefile.php?i=1' ... /> 

我只是打电话imagepng与文件名,但没有设置头?

此外,如果有人将图像源从源代码中复制出来并在浏览器中导航到它,那么如果未设置标题,会发生什么情况?图像是否显示为实际图像被请求?

回答

4

如果您在somefile.php上生成图像,当用户试图直接访问该url时,浏览器输出将是图像,除非它们未指定包含图像本身的id /名称的变量。

要在html上使用图像,我只是做<img src='somefile.php?f=FILENAME' />,使其更具可读性(只要您有相关的图像名称)。

确保通过重定向或显示默认图像来处理对somefile.php的非指定访问。

关于标题,这是告诉浏览器它将处理什么类型的文件,所以请确保您指定它们总是。例如:

#somefile.php 

header('content-type: image/jpeg'); 

$watermark = imagecreatefrompng('watermark.png'); 
$watermark_width = imagesx($watermark); 
$watermark_height = imagesy($watermark); 

$image = imagecreatetruecolor($watermark_width, $watermark_height); 
$image = imagecreatefromjpeg($_GET['src']); //Path to the image file 

$size = getimagesize($_GET['src']);   
$dest_x = $size[0] - $watermark_width - 5; 
$dest_y = $size[1] - $watermark_height - 5; 

imagecopymerge($image, $watermark, $dest_x, $dest_y, 0, 0, $watermark_width, $watermark_height, 100); 
imagejpeg($image); 
imagedestroy($image); 
imagedestroy($watermark); 

所以输出与HTML页面上此代码的图像,你会做以下几点:

<img src='somefile.php?src=filePath' /> 

注: 如果你不想JPG只是将其更改为PNG。

有关GD + PHP的更多文档可用here

+0

好的,所以我在PHP文件中指定头文件生成图像,然后输出图像,然后我可以从img标签调用php脚本,它会工作?此外,图像的文件名奇怪地是一个实现细节。所有的文件名都是guid,其中一些不应该被访问,所以默默无闻:) – 2010-01-06 03:59:31

+0

你应该考虑将这些图像名称存储在数据库中,当你调用'somefile.php'时,使$ _GET变量数据库中该特定图像的索引。 – johnnyArt 2010-01-06 05:53:43

+0

数据库中有图像元数据,但图像本身存储在磁盘上 – 2010-01-06 23:11:31