PHP并不仅限于创建HTML输出,也可以创建和处理包括GIF、PNG、JPEG、WBMP以及XPM在内的多种格式的图像。更加方便的是,PHP可以直接将图像数据流输出到浏览器。要想在PHP中使用图像处理功能,需要连带GD库一起来编译PHP,可以通过访问phpinfo()函数查看是否安装了GD库。GD库和PHP可能需要其他的库,这取决于你要处理的图像格式。
你可以使用PHP中的图像函数来获取下列格式图像的大小:JPEG、GIF、PNG、SWF、TIFF和JPEG2000。
12.1 获取图像信息
可以通过以下4个函数获取图像的相关信息。
1. getimagesize取得图像大小
function getimagesize ($filename, array &$imageinfo = null) array|false
getimagesize() 函数将测定任何GIF、JPG、PNG、SWF、SWC、PSD、TIFF、BMP、IFF、JP2、JPX、JB2、JPC、XBM或WBMP图像文件的大小并返回图像的尺寸以及文件类型和一个可以用于普通HTML文件中IMG标记中的height/width文本字符串。
如果不能访问filename指定的图像或者不是有效的图像,getimagesize()将返回false并产生一条E_WARNING级的错误。
该函数返回一个至少具有4个单元的数组。索引0包含图像宽度的像素值。索引1包含图像高度的像素值。索引2是图像类型的标记:1=GIF,2=JPG,3=PNG,4=SWF,5=PSD,6=BMP, 7=TIFF(intel byteorder),8=TIFF(motorola byte order),9=JPC,10=JP2,11=PX,12=JB2,13=SWC,14=IFF,15=WBMP,16=XBM。这些标记与PHP 4.3.0新加的IMAGETYPE常量对应。索引3是文本字符串,内容为"height="yyy" width="xxx"",可直接用于IMG标记。
getimagesize()还会返回额外的参数mime,符合该图像的MIME类型。此信息可以用来在HTTP Content-type头信息中发送正确的信息。对于JPG图像,还会多返回两个索引:channels和bits。对于RGB图像,channels值为3;对于CMYK图像,channels值为4。bits是每种颜色的位数。
示例如下:
//phpinfo();
echo "<pre>";
print_r(getimagesize('11.jpg'));
执行以上程序的输出结果如下:
Array
(
[0] => 1920
[1] => 1080
[2] => 2
[3] => width="1920" height="1080"
[bits] => 8
[channels] => 3
[mime] => image/jpeg
)
由打印的数组可知,此图像宽度的像素值是961,图像高度的像素值是640,索引2的值为2说明图像是JPG的图像,除此之外,还获得了图像的channels、bits以及mime类型。
2. getimagesizefromstring从字符串中获取图像尺寸信息
与getimagesize()函数的参数和返回结果相同,区别是getimagesizefromstring()的第一个参数是图像数据的字符串表达,而不是文件名。
示例如下:
<?php
$img = '1.jpg';
//以文件方式打开
$size_info1 = getimagesize($img);
//以字符串格式打开
$data = file_get_contents($img);
//var_dump($data);
$size_info2 = getimagesizefromstring($data);
echo "<pre>";
print_r($size_info1);
print_r($size_info2);
执行以上程序的结果如下:
Array
(
[0] => 1920
[1] => 1080
[2] => 2
[3] => width="1920" height="1080"
[bits] => 8
[channels] => 3
[mime] => image/jpeg
)
Array
(
[0] => 1920
[1] => 1080
[2] => 2
[3] => width="1920" height="1080"
[bits] => 8
[channels] => 3
[mime] => image/jpeg
)
两个函数的返回结果一致,区别是在使用函数的时候打开图像文件的方式不同。
3. imagesx取得图像的宽度
function imagesx ($image) false|int
4. imagesy取得图像的高度
function imagesy ($image) false|int
$img = imagecreatetruecolor(300,100);
echo imagesx($img);//300
echo imagesy($img);//200
其中,imagecreatetruecolor()用来创建一个图像资源。