图片处理也是实际开发中常用的功能,一般用到的有生成缩略图、裁切、加水印等。为了使用方便,还是自己写了一个。
使用方法很简单,实例化一个处理对象,参数是要处理的图片。如果是在文件上传中使用,将上传的临时文件地址传进去也是可以的。如:
$obj = new Image($_FILES['upload-file']['tmp_name']);
对象提供一个获取图片信息的方法:getInfo(),返回有关这张图片的宽高、类型、mime、格式、后缀等信息,如:
array(9) {
[0]=>
int(1252)
[1]=>
int(800)
[2]=>
int(2)
[3]=>
string(25) "width="1252" height="800""
["bits"]=>
int(8)
["channels"]=>
int(3)
["mime"]=>
string(10) "image/jpeg"
["format"]=>
string(4) "jpeg"
["ext"]=>
string(4) ".jpg"
}
只支持jpg,png,gif这三种格式,其实网络上流行的也基本这三种了,足够。获取信息可用于为后边的处理提供数据或在处理之前进行一些判断之类。该类提供的处理方法有以下,一一介绍。
save($targetFile),保存图片到某位置。
参数:$targetFile,string类型,目标位置(包含文件名,不必带后缀,会自动判断格式)。这是各种处理后必须调用的方法,否则不会保存。在图片上传时惹不想处理,可直接调用该方法进行保存。
举例:
$obj->save('./upload/测试纯上传');
save()方法
thumb($width, $height, $thumbType = self::THUMB_FIT_2, $color = array(255, 255, 255, 0)),生成缩略图。
参数:
$width,缩略图宽度。
$height,缩略图高度。
$thumbType,生成方式。有THUMB_FIT_1、THUMB_FIT_2、THUMB_FIT_3、THUMB_FILL 4种方式,在原图与缩略图宽高比例不一致时会有作用,FIT的3个表示对图片进行裁切,1是保留左边/上边部分,2是保留中间部分,3是保留右边/下边部分。FILL则是全部保留不足的以颜色填充,填充的颜色是$color。
$color,填充颜色。当$thumbType为FILL且缩略图宽高比例跟原图不一致时会起作用,四个值对应RGBA。当图片格式是png时,默认填充色是透明,其他则是白色。
举例:
$obj->thumb(100, 100, 4)->save('./upload/fill');
thumb()方法
crop($dx, $dy, $width, $height),图片裁切。
参数:
$dx,裁切矩形左上角距原图片左边的距离。
$dy,裁切矩形左上角距原片顶上边的距离。
$width,裁切矩形宽度,也就是目标图片宽度。
$height,裁切矩形高度,也就是目标图片高度。
举例:
$obj->crop(400, 100, 200, 200)->save('./upload/crop');
crop()方法
rotate($angle, $color = array(255, 255, 255, 0), $ignore_transparent = 0),图片旋转。
参数:
$angle,旋转角度,正数为逆时针旋转。
$color,图片没有覆盖到部分的填充色,RGBA,透明度是[0,100]。
$ignore_transparent,如果被设为非零值,则透明色会被忽略(否则会被保留)。
举例:
$obj->rotate(45)->save('./upload/rotate');
rotate()方法
flip($flipType = self::FLIP_Y),图片翻转。
参数:$flipType,翻转方式,有FLIP_X(沿X轴翻转)与FLIP_Y(沿Y轴翻转)两种。默认FLIP_X。
举例:
$obj->flip(2)->save('./upload/flip_y')
flip()方法
textMask($text, $fontSize = 16, array $color = array(0, 0, 0, 100), $position = self::POS_RIGHT_BOTTOM, $offset_x = 20, $offset_y = 20, $fontFile = ”),文字水印。
参数:
$text,要添加的水印上的文字。
$fontSize,文字的大小。
$color,文字颜色。RGBA,透明度是[0,100]默认黑色。
$position,文字位置,有LEFT_TOP、TOP、RIGHT_TOP、RIGHT、RIGHT_BUTTOM、BUTTOM、LEFT_BUTTOM、LEFT、CENTER9种。默认RIGHT_BUTTOM。
$offset_x,水平方向margin,也就是水平方向离边缘的距离。默认20。
$offset_y,垂直方向margin,也就是垂直方向离边缘的距离。默认20。
$fontFile,字体文件,所使用的字体。中文时注意要字体本身支持中文。默认微软雅黑,在类文件目录下的fonts文件夹。
举例:
$obj->textMask('from xiaomlove.com|小喵爱你', 20, array(50, 50, 50, 80))->save('./upload/test_mask');
testMask()方法
imageMask($srcImg, $opacity = 100, $position = self::POS_RIGHT_BOTTOM, $offset_x = 20, $offset_y = 20),图片水印。
参数:
$srcImg,水印图片。
$opacity,水印透明度,[0,100]。
$position,同textMask。
$offset_x,同testMask。
$offset_y,同testMask。
举例:
$obj->imageMask('./22.jpg', 50, 9)->save('./upload/image_mask');
image_mask()方法
以上是基本的功能,其实可以多个操作一起进行。如:
$obj->save('./original/original')->thumb(150, 100)->textMask('xiaomiao')->save('./upload/thumb_textmask');
以上操作是:将上传的文件,保存一份原图到original文件夹下,生成缩略图,为缩略图添加水印,最后保存水印图片到upload文件夹。
注意:链式写法返回的是对象最后一个操作后的状态,所以添加水印是在缩略图上进行的,要清楚。
好了,以上就是我这个处理类的基本功能,大体能用,可能某些小细节还不太满人意,遇到再改吧。自己写的东西好处就是想怎么改就怎么改!代码600多行就不上了,否则文章太乱。