用户上传的图片,通常都不会原封不动的存到服务器中,而是会对其进行一些识别处理:有的图片太大,我们要对它进行裁剪、剪切;有的需要保护用户发布内容的原创性,所以我们要为其打上水印;有的还需要在上面写上注解文字等等。这些需求都可以通过php的GD库来实现。
一、php图像GD库配置
GD库是php的图像处理函数,是一个php扩展,使用的话需要在php.ini中打开它:
extension=php_gd2.dll
然后重启服务器,如果在phpinfo中看到如下信息,则代表GD库开启成功了:
或者使用gd_info()函数查看GD库的信息:
可以看到GD库的版本以及对各种图像类型支持的情况。
二、php图像处理
然后我们就可以它来做各种图像的处理工作了,kano之后将用下面这一副小小的风景画作为例子来为大家介绍。
(图片路径“./temp/hua.jpg”)
1. 获取图像大小
$size = getimagesize('./temp/hua.jpg'); print_r($size);
使用getimagesize方法可以获取图像大小,使用方法也非常简单,如上面的代码所示,参数即为图片的路径。可以看到获得的信息除了宽高还有一些别的内容,下面来详细解释一下:
索引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)
索引3:可以直接用在<img>标签中的宽高
bits:颜色的位数
channels:通道,RGB图像为3,CMYK图像为4
mime:图像的MIME类型
还有一个getimagesizefromstring函数,作用与getimagesize相同,不过参数是图像的字符串表达,而不是文件名:
$img_str = file_get_contents('./temp/hua.jpg'); $size = getimagesizefromstring($img_str); print_r($size);
不过效果与getimagesize是相同的。
2. 创建图像对象
图像的操作很多都需要先根据文件创建出一个文件对象来。
$img = imagecreatefromjpeg('./temp/hua.jpg');
这里我们的图像是jpeg图像,所以使用了imagecreatefromjpeg,对于不同类型的图像,GD给出了一系列的“imagecreatefrom<xxx>”函数(imagecreatefrombmp, imagecreatefromgd, imagecreatefrompng, imagecreatefromwebp, imagecreatefromgif等等)。
3. 在图像上写入文本
$img = imagecreatefromjpeg('./temp/hua.jpg'); $word_color = imagecolorallocate($img, 255, 255, 255); imagefttext($img, 12, 0, 25, 25, $word_color, './temp/PingFang-Regular.ttf', '啊啊啊'); imagejpeg($img, './temp/hua2.jpg');
可以看到文字“啊啊啊”写到了图片中,用到了几个我们上面没有见到过的函数:
imagecolorallocate:创建一个颜色,这对于写入文字这种操作来说是必须的,第一个参数是我们要操作的图片资源,后面3个参数则是我们经常会用到的RGB值。
imagefttext:将文字写入图片,因为参数较多,还请大家自行查阅手册,这里就不一一说明了。有两点需要注意,参数2是文字的size,单位是点(point),这意味着12实际上是16px的文字;第5个参数是文字在图片中的y值——但并非文字的上边距离图片顶部的距离,而是基线(baseline)距离顶部的距离。
imagejpeg:根据图片资源输出一副图片,如果未设置第二个参数则会直接输出图像资源流,设置了的话则会以此文件名生成一个图像文件,注意图像如果已存在则会被覆盖掉。
本篇kano个人博客介绍了php中使用GD库进行基本的图像操作,下一篇还会继续介绍更多的图像操作方法,希望大家届时继续收看。