一、图片类型和数据表示
在php中,常见的图片类型有jpeg、gif、png等。不同类型的图片,其数据结构也不同。比如jpeg图片的数据就是基于dct变换的系数,而png图片的数据则是基于像素的颜色值。在php中,我们需要利用不同的扩展库来解析和处理不同类型的图片,主要包括gd2和imagick两大扩展。
无论是使用gd2还是imagick,我们都需要将图片数据载入内存中进行处理。因此,在使用图片处理函数时,首先需要将图片数据转换为相应的数据类型。以gd2为例,常见的图片数据载入方式如下:
//加载jpeg图片$image = imagecreatefromjpeg('image.jpg');//加载png图片$image = imagecreatefrompng('image.png');//加载gif图片$image = imagecreatefromgif('image.gif');
在使用imagick时,图片数据则需要通过imagick对象进行载入和处理。例如:
//实例化imagick对象并加载图片$im = new imagick('image.jpg');//调整图片大小$im->resizeimage(320, 240, imagick::filter_lanczos, 1);//输出图片header('content-type: image/jpeg');echo $im;
二、基本操作
调整图片大小图片大小调整是常见的图片处理需求,无论是缩小还是放大。在gd2中,可以使用imagecopyresampled()函数实现图片大小调整。该函数会将原始图片按照指定尺寸进行缩放,并输出调整后的图片数据。例如:
//打开原始图片$src = imagecreatefromjpeg('image.jpg');//设置目标图片尺寸$dst_width = 320;//目标宽度$dst_height = 240;//目标高度//创建目标图片$dst = imagecreatetruecolor($dst_width, $dst_height);//缩放图片imagecopyresampled($dst, $src, 0, 0, 0, 0, $dst_width, $dst_height, imagesx($src), imagesy($src));//输出图片header('content-type: image/jpeg');imagejpeg($dst);//释放内存imagedestroy($src);imagedestroy($dst);
在imagick中,图片大小调整则是通过resizeimage()方法实现的。例如:
//打开原始图片$im = new imagick('image.jpg');//设置目标图片尺寸$im->resizeimage(320, 240, imagick::filter_lanczos, 1);//输出图片header('content-type: image/jpeg');echo $im;
图片剪切图片剪切通常用来实现图片的裁剪和截取。在gd2中,可以使用imagecopy()函数实现图片剪切。该函数会将原始图片指定区域内的像素复制到目标图片中,并输出剪切后的图片数据。例如:
//打开原始图片$src = imagecreatefromjpeg('image.jpg');//设置目标图片尺寸$dst_width = 320;//目标宽度$dst_height = 240;//目标高度//设置剪切位置和尺寸$x = 100;//起始x坐标$y = 100;//起始y坐标$width = 160;//剪切宽度$height = 120;//剪切高度//创建目标图片$dst = imagecreatetruecolor($dst_width, $dst_height);//剪切图片imagecopy($dst, $src, 0, 0, $x, $y, $width, $height);//输出图片header('content-type: image/jpeg');imagejpeg($dst);//释放内存imagedestroy($src);imagedestroy($dst);
在imagick中,图片剪切则是通过cropimage()方法实现的。例如:
//打开原始图片$im = new imagick('image.jpg');//设置剪切位置和尺寸$x = 100;//起始x坐标$y = 100;//起始y坐标$width = 160;//剪切宽度$height = 120;//剪切高度//剪切图片$im->cropimage($width, $height, $x, $y);//输出图片header('content-type: image/jpeg');echo $im;
三、进阶操作
文字水印文字水印是一种常见的图片特效,在生成缩略图、批量上传图片等场景中经常被使用。在gd2中,可以使用imagettftext()函数实现文字水印。该函数会在图片上绘制指定的文本,并输出水印后的图片数据。例如:
//打开原始图片$src = imagecreatefromjpeg('image.jpg');//设置文本颜色$color = imagecolorallocate($src, 255, 0, 0);//设置字体文件路径$font = 'arial.ttf';//设置字体大小$size = 20;//设置水印文本$text = 'www.example.com';//计算文本位置$bbox = imagettfbbox($size, 0, $font, $text);$x = imagesx($src) - $bbox[2] - 5;$y = imagesy($src) - $bbox[1] - 5;//添加水印imagettftext($src, $size, 0, $x, $y, $color, $font, $text);//输出图片header('content-type: image/jpeg');imagejpeg($src);//释放内存imagedestroy($src);
在imagick中,文字水印则是通过annotateimage()方法实现的。例如:
//打开原始图片$im = new imagick('image.jpg');//创建画笔对象$draw = new imagickdraw();//设置字体路径和大小$draw->setfont('arial.ttf');$draw->setfontsize(20);//设置文本位置和颜色$draw->setgravity(imagick::gravity_southeast);$draw->setfillcolor('red');//添加水印文本$draw->annotation(5, 5, 'www.example.com');//绘制水印$im->drawimage($draw);//输出图片header('content-type: image/jpeg');echo $im;
图片特效图片特效是图片处理的重点和难点,例如模糊、锐化、浮雕等效果,需要通过算法对图片进行处理。在gd2中,可以使用imagefilter()函数实现图片特效。该函数会对原图进行滤波操作,并输出特效后的图片数据。例如:
//打开原始图片$src = imagecreatefromjpeg('image.jpg');//创建滤镜$filter = img_filter_grayscale;//灰度滤镜//应用滤镜imagefilter($src, $filter);//输出图片header('content-type: image/jpeg');imagejpeg($src);//释放内存imagedestroy($src);
在imagick中,图片特效则是通过不同的方法实现的。例如,使用gaussianblurimage()方法实现高斯模糊效果:
//打开原始图片$im = new imagick('image.jpg');//应用高斯模糊滤镜$im->gaussianblurimage(10, 5);//输出图片header('content-type: image/jpeg');echo $im;
四、总结
本文介绍了php中常见的图片处理函数,包括基本操作和进阶操作。无论是图片大小调整、剪切还是文字水印、图片特效,都可以通过gd2和imagick两大扩展库实现。在使用这些函数时,我们需要注意图片类型和数据表示的差异,并根据实际需求选择合适的函数和参数。同时,还需要关注内存占用和性能等问题,以免对服务器造成压力。
以上就是php应用之图片处理函数的详细内容。
