getimagesize — 取得图像大小

林继 PHP 技术 5,055 共写了1636个字 (2005-08-06 9:15:19) 没有评论 打印 扫描二维码 百度已收录

getimagesize
(PHP 3, PHP 4, PHP 5)

getimagesize — 取得图像大小

说明

array getimagesize ( string filename [, array imageinfo] )

getimagesize() 函数将测定任何 GIF,JPG,PNG,SWF,SWC,PSD,TIFF,BMP,IFF,JP2,JPX,JB2,JPC,XBM 或 WBMP 图像文件的大小并返回图像的尺寸以及文件类型和一个可以用于普通 HTML 文件中 IMG 标记中的 height/width 文本字符串。

注: 对 JPC,JP2,JPX,JB2,XBM 和 WBMP 的支持自 PHP 4.3.2 起可用。对 SWC 的支持自 PHP 4.3.0 起可用。

返回一个具有四个单元的数组。索引 0 包含图像宽度的像素值,索引 1 包含图像高度的像素值。索引 2 是图像类型的标记:1 = GIF,2 = JPG,3 = PNG,4 = SWF,5 = PSD,6 = BMP,7 = TIFF(intel byte order),8 = TIFF(motorola byte order),9 = JPC,10 = JP2,11 = JPX,12 = JB2,13 = SWC,14 = IFF,15 = WBMP,16 = XBM。这些标记与 PHP 4.3 新加的 IMAGETYPE 常量对应。索引 3 是文本字符串,内容为“height=”yyy” width=”xxx””,可直接用于 IMG 标记。

例子 1. getimagesize (file)

  1. list($width, $height, $type, $attr) = getimagesize("img/flag.jpg");
  2. echo "< i mg src = "img/flag.jpg" $attr>";
  3. ?>

例子 2. getimagesize (URL)

  1. $size = getimagesize("http://www.example.com/gifs/logo.gif");
  2.  
  3. // if the file name has space in it, encode it properly
  4. $size = getimagesize("http://www.example.com/gifs/lo%20go.gif");
  5.  
  6. ?>

对于 JPG 图像,还会多返回两个索引:channels 和 bits。channels 对于 RGB 图像其值为 3,对于 CMYK 图像其值为 4。bits 是每种颜色的位数。

自 PHP 4.3 起,bits 和 channels 对于其它图像类型也存在。但是这些值可能会把人搞糊涂。例如,GIF 总是对每个像素使用 3 个 channel,但是对于动画 GIF 来说每个像素的位数无法通过全局颜色表计算出来。

某些格式可能不包含图像或者包含多个图像。此种情况下,getimagesize() 可能不能用来准确测定图像的大小。此时 getimagesize() 将返回零作为宽度和高度。

自 PHP 4.3 起,getimagesize() 还会返回额外的参数 mime,符合该图像的 MIME 类型。此信息可以用来在 HTTP Content-type 头信息中发送正确的信息:

例子 3. getimagesize() 和 MIME 类型

  1. $size = getimagesize ($filename);
  2. $fp=fopen($filename, "rb");
  3. if ($size && $fp) {
  4.   header("Content-type: {$size['mime']}");
  5.   fpassthru($fp);
  6.   exit;
  7. } else {
  8.   // error
  9. }
  10. ?>

如果不能访问 filename 指定的图像或者它不是合法的图片,getimagesize() 将返回 FALSE 并产生一个警告。

可选的 imageinfo 参数允许从图像文件中提取一些扩展信息。目前,这将以一个关联数组返回不同的 JPG APP 标识。某些程序用这些 APP 标识来在图像中嵌入文本信息。一个非常常见的是 APP13 标识中嵌入的 IPTC http://www.iptc.org/ 信息。可以用 iptcparse() 函数来将二进制的 APP13 标识解析为可读的信息。

例子 4. getimagesize() 返回 IPTC

  1. $size = getimagesize ("testimg.jpg",&$info);
  2. if (isset ($info["APP13"])) {
  3.     $iptc = iptcparse ($info["APP13"]);
  4.     var_dump ($iptc);
  5. }
  6. ?>

注: JPEG 2000 支持是 PHP 4.3.2 添加的。注意 JPC 和 JP2 可以有不同的色彩深度的成分。此情况下,“bits”的值是碰到的最高的位深度。此外,JP2 文件可能包含有多个 JPEG 2000 代码流,此情况下,getimagesize() 返回此文件顶层中碰到的第一个代码流的值。

注: TIFF 支持是 PHP 4.2 添加的。

本函数不需要 GD 图像库。

参见 image_type_to_mime_type(),exif_imagetype(),exif_read_data() 和 exif_thumbnail()。

URL 支持是 PHP 4.0.5 添加的。

如果觉得我的文章对您有用,请随意赞赏。您的支持将鼓励我继续创作!

发表评论

电子邮件地址不会被公开。 必填项已用*标注

< >