PHP GD库处理图片的相关常用函数(二)
本节主要总结一下对于特定式(png. jpg, gif)图片的一些处理。应用场景:处理用户的上传头像,处理上传图片…… imagecreatefromgif(); imagecreatefrompng(); imagecreatefromjpeg(); 上面三个函数表示打开一个图像资源,参数是传入相应的图片地址。 ?php$im
本节主要总结一下对于特定格式(png. jpg, gif)图片的一些处理。应用场景:处理用户的上传头像,处理上传图片……
imagecreatefromgif();
imagecreatefrompng();
imagecreatefromjpeg();
上面三个函数表示打开一个图像资源,参数是传入相应的图片地址。
'; //获取图像的宽度,需要一个资源参数才能获取 echo 'height:', imagesy($img), '上面的代码在浏览器里的输出结果是:
'; $arr = getimagesize('./clock.gif'); //直接是一个文件名就可以获取图片的信息 print_r($arr); //下标2代表图像类型 echo '
width:', $arr[0], '
'; //获取图像的宽度 echo 'height:', $arr[1], '
'; imagegif($img, './dealed/clock.gif'); imagedestroy($img); ?>
width:550
height:400
Array ( [0] => 550 [1] => 400 [2] => 1 [3] => width="550" height="400" [bits] => 7 [channels] => 3 [mime] => image/gif )
width:550
height:400
一、图片的缩放及透明处理
上面的代码就会在dealed目录下有一个缩放的图像。
下面是一个按一定比例缩放的代码:
$ratio) //最大输出图像比例和原来的图像的比例进行对比 { $width = $height * $ratio; //说明高较大 } else { $height = $width / $ratio; //说明宽较大 } $new_s = imagecreatetruecolor($width, $height); $img = imagecreatefromjpeg($source); imagecopyresampled($new_s, $img, 0, 0, 0, 0, $width, $height, $source_w, $source_h); imagejpeg($new_s, $newFileName, 100); imagedestroy($new_s); imagedestroy($img); } //这个例子会以最大宽度高度为 200 像素显示一个图像 resample_pic('./fire.jpg', 200, 200, './dealed/fire1.jpg'); ?>imagecopyresampled(),采用插值算法平滑的插入图像,速度较imagecopyresized()慢,如果对缩略图要求不高,可以使用imagecopyresized()。
但这有个问题,就是在缩放gif格式的图片时,缩放后的gif透明度不正常,而png和jpeg的图片透明色正常。那如何处理gif图片呢?看代码:
$ratio) //最大输出图像比例和原来的图像的比例进行对比 { $width = $height * $ratio; //说明高较大 } else { $height = $width / $ratio; //说明宽较大 } /** * imagecolortransparent(resource $image [, int color]), 将某个颜色定义为透明色,如果省略color则返回当前透明色的标识符, * 和 int imagecolorat ( resource $image , int $x , int $y ) 返回值一样 * imagecolorstotal(resource $image), 取得一幅图像的调色板中颜色的数目 * imagecolorsforindex(resource $image, int $index) 取得某索引的颜色,本函数返回一个具有 red,green,blue 和 alpha * 的键名的关联数组,包含了指定颜色索引的相应的值, **/ $new_s = imagecreatetruecolor($width, $height); $img = imagecreatefromgif($source); //关于缩放gif图片后透明色有不足的解决之道: $trans_index = imagecolortransparent($img); //返回当前图片的透明色标示符 if ($trans_index >= 0 && $trans_index
二、图片的裁剪
三、加水印(文字,图片)
加文字的水印:
效果:
效果图:
效果如下面的图片。
沿Y轴:
效果如下图片:沿X轴:
效果如图:
六、图像特效
bool imagefilter (resource$src_im
,
int$filtertype
[,
int$arg1
[,int$arg2
[,int$arg3
]]] )
访问更多特效,请看http://www.php.net/manual/zh/function.imagefilter.php
看图:
最后再来看几个比较有意思的函数:
'; imagefill($img, 0, 0, $hotpink); $index_tran = imagecolortransparent($img, $hotpink);//将某个颜色定义为透明色 echo $index_tran, '输出结果如:
'; $index_at = imagecolorat($img, 200, 200); //取得具体位置像素的颜色索引值 echo $index_tran, '
'; $index_exact = imagecolorexact($img, 255, 105, 180); //取得指定颜色的索引值 echo $index_exact; imagepng($img, './test.png'); imagedestroy($img); ?>
16738740
16738740
16738740
16738740
可以看出它们的相似点了吧?
上面就是我学习php GD扩展库的相应的一些练习,如果有问题,还请大家多多指教。