图片处理函数相当占用内存
支持格式 JPEG,PNG,GIF,XBM,XPM,WBMP,WebP,BMP;XPM只支持读取,其他全部支持读写
注:函数的颜色参数全部需要使用imagecolorallocate/imagecolorallocatealpha获取颜色标识符
- 获取图片对象
- 创建/销毁图片对象
- 获取图片信息
- 设置图片颜色
- 拷贝图片颜色
- 设置图片分辨率
- 设置图片抗锯齿
- 图片裁剪
- 图片旋转
- 图片缩放
- 设置图像画笔
- 绘制椭圆
- 绘制多边形
- 绘制线段
- 加载字体
- 获取字体信息
- 绘制文字
- 绘制填充区域
- 图片复制
- 图片过滤算法
- 输出图片
- 转换WBMP格式图片
- windwos环境截图
- 获取GD库信息
获取图片对象
// 获取GIF格式图像文件$filename的图片资源,失败后返回false
imagecreatefromgif(string $filename):resource
// 获取JPEG格式图像文件$filename的图片资源,失败后返回false
imagecreatefromjpeg(string $filename):resource
// 获取PNG格式图像文件$filename的图片资源,失败后返回false
imagecreatefrompng(string $filename):resource
// 获取WBMP格式图像文件$filename的图片资源,失败后返回false
imagecreatefromwbmp(string $filename):resource
// 获取WebP格式图像文件$filename的图片资源,失败后返回false
imagecreatefromwebp(string $filename):resource
// 获取XBM格式图像文件$filename的图片资源,失败后返回false
imagecreatefromxbm(string $filename):resource
// 获取XPM格式图像文件$filename的图片资源,失败后返回false
imagecreatefromxpm(string $filename):resource
// 获取bmp格式图像文件$filename的图片资源,失败后返回false
imagecreatefrombmp(string $filename):resource
// 获取图像内容$image的图片资源,图像格式自动检测;不支持的图像或数据不是图像格式获取图像损坏返回false
imagecreatefromstring(string $image);
创建/销毁图片对象
// 创建一个宽为$x_size高为$y_size的空白图像,失败后返回false
imagecreate($x_size, $y_size);
// 创建一个宽为$x_size高为$y_size的空白图像的黑色图像,失败后返回false
imagecreatetruecolor($x_size, $y_size);
//销毁图像$image,释放关联的内存
imagedestroy($image):bool
获取图片信息
//取得图像宽度
imagesx(resource $image):int
//取得图像高度
imagesy(resource $image):int
// 返回图片文件$filename(文件地址)的尺寸、文件类型和一个用在<img>标签中的height/width文本字符串的索引数组,不需要GD扩展
getimagesize($filename);
// 返回图片内容$imagedata的尺寸、文件类型和一个用在<img>标签中的height/width文本字符串的索引数组,不需要GD扩展
getimagesizefromstring($imagedata);
[
0 => '图片宽',
1 => '图片高',
2 => 'height/width文本',
'mime' => '文件类型',
];
设置图片颜色
// 返回一个指定$red、$green、$blue的颜色标识符,初次调用会为imagecreate()建立的图像资源$image填充背景
// $red、$green、$blue是0-255(10进制)或0x00到0xFF(16进制)
imagecolorallocate($image, $red, $green, $blue);
// 与imagecolorallocate()相同,多个参数透明度$alpha(0不透明 2完全透明)
imagecolorallocatealpha($image, $red, $green, $blue, $alpha);
// 取消图像$image先前由imagecolorallocate()或imagecolorallocatealpha()分配的颜色标识符$color
imagecolordeallocate($image, $color);
// 将image图像中的颜色标识符$color设定为透明色
imagecolortransparent($image, $color = ?);
拷贝图片颜色
//从 source 图像把调色板拷贝到 destination 图像
imagepalettecopy(resource $destination , resource $source):void
设置图片分辨率
// 获取图像$image的分辨率DPI数组
imageresolution($image);
// 以DPI(每英寸点数)设置图像$image的分辨率,$res_y为空时默认等于$res_x
imageresolution($image, $res_x, $res_y = $res_x);
设置图片抗锯齿
// 对线段和多边形$image启用$enabled(true)关闭$enabled(false)快速画图抗锯齿方法。不支持alpha部分
imageantialias($image, $enabled);
图片裁剪
// 将图像$image以数组$rect = ['x' => '', 'y' => '', 'width' => '', 'height' => '']指定的区域进行裁剪并返回裁剪后的图像,失败后返回false
imagecrop($image, $rect);
图片旋转
// 将图像$image旋转$angle度,旋转后空白位置覆盖$bgd_color背景色;$ignore_transparent为0时保留透明色,否则忽略透明色;返回新图像,失败返回false
imagerotate($image, $angle, $bgd_color, $ignore_transparent = 0);
$modes = [
IMG_FLIP_HORIZONTAL, // 水平翻转图像。
IMG_FLIP_VERTICAL, // 垂直翻转图像。
IMG_FLIP_BOTH, // 水平和垂直翻转图像。
];
// 将原图像$image以指定模式$mode翻转,成功返回true,失败时返回false
imageflip($image, $mode);
图片缩放
// 将图像$image已指定宽度$new_width高度$new_height进行缩放,$new_height为-1时根据宽度等比缩放,失败是返回false
imagescale($image, $new_width, $new_height = -1);
设置图像画笔
// 将图像$image的画线函数的画笔图像设置为图像$brush,成功返回true,失败返回false
imagesetbrush($image, $brush);
// 将图像$image的图像绘画函数的画笔线宽设置为$thickness像素,成功返回true,失败返回false
imagesetthickness($image, $thickness);
// 将图像$image的填充贴图设置为图像$tile,当填充函数使用特殊颜色IMG_COLOR_TILED时将使用贴图
imagesettile($image, $tile);
绘制椭圆
// 在图像$image上绘制一个圆心为$cx,$cy宽为$w高为$h起点为$s度终点为$e度颜色为$color的椭圆弧;0°位于三点钟位置,失败时返回 false
imagearc($image, $cx, $cy, $w, $h, $s, $e, $color);
// 在图像$image上绘制一个圆心为$cx,$cy宽为$w高为$h起点为$s度终点为$e度的椭圆弧,使用颜色$color填充;失败时返回 false
$styles = [ // 多个参数可以使用|连接一起使用
IMG_ARC_PIE, // 产生圆形边界,不能与IMG_ARC_CHORD一起使用
IMG_ARC_CHORD, // 用直线连接了起始和结束点
IMG_ARC_NOFILL, // 指明弧或弦只有轮廓,不填充
IMG_ARC_EDGED, // 用直线将起始和结束点与中心点相连,和IMG_ARC_NOFILL一起使用是画饼状图轮廓的好方法。
];
imagefilledarc($image, $cx, $cy, $w, $h, $s, $e, $color, $style);
// 在图像$image上绘制一个圆心为$cx,$cy宽为$w高为$h颜色为$color的椭圆,失败时返回 false
imageellipse($image, $cx, $cy, $w, $h, $color);
// 在图像$image上绘制一个圆心为$cx,$cy宽为$w高为$h的椭圆,使用颜色$color填充,失败时返回 false
imagefilledellipse($image, $cx, $cy, $w, $h, $color);
绘制多边形
// 在图像$image上绘制一个多边形,多边形的各顶点在数组$points中,$num_points为顶点数量,必须大于3,线条颜色为$color,失败时返回 false
// $points是一维数组,顶点值一对一对出现[1, 2, 3, 4, 5, 6]
imagepolygon($image, $points, $num_points, $color);
// 在图像$image上绘制一个多边形,多边形的各顶点在数组$points中,$num_points为顶点数量,必须大于3,填充颜色$color,失败时返回 false
// $points是一维数组,顶点值一对一对出现[1, 2, 3, 4, 5, 6]
imagefilledpolygon($image, $points, $num_points, $color);
// 类似于imagepolygon()多边形是开放的,最后一点和第一个点之间没有画线,失败时返回 false,PHP8以上不需要参数$num_points
imageopenpolygon($image, $points, $num_points, $color);
// 在图像$image绘制一个左上角坐标为$x1,$y1,右下角坐标为$x2,$y2的矩形,填充颜色$color,失败时返回 false
imagefilledrectangle($image, $x1, $y1, $x2, $y2, $color);
// 在图像$image绘制一个左上角坐标为$x1,$y1,右下角坐标为$x2,$y2线条颜色为$color的矩形,失败时返回 false
imagerectangle($image, $x1, $y1, $x2, $y2, $color);
绘制线段
// 在图像$image绘制一个起点坐标为$x1,$y1,终点坐标为$x2,$y2的线段,线段颜色为$color,失败时返回 false
imageline($image, $x1, $y1, $x2, $y2, $color);
加载字体
// 加载字体$file(字体文件路径),返回字体标识符,失败返回flase;不能加载.font和.ttf文件,.gdf文件可以
imageloadfont($file);
获取字体信息
// 返回指定字体标识符的一个字符高度(像素值)
imagefontheight($font);
// 返回指定字体标识符的一个字符宽度(像素值)
imagefontwidth($font);
绘制文字
// 在图像$image的坐标$x,$y处水平写上字体为$font颜色为$color的一个字符串$c;$font为1-5时使用内置的字体,其他字体为imageloadfont载入的返回值,中文需要使用中文字体,失败时返回 false
imagechar($image, $font, $x, $y, $c, $color);
// 在图像$image的坐标$x,$y处垂直写上字体为$font颜色为$color的一个字符串$c;$font为1-5时使用内置的字体,其他字体为imageloadfont载入的返回值,中文需要使用中文字体,失败时返回 false
imagecharup($image, $font, $x, $y, $c, $color);
// 在图像$image的坐标$x,$y处水平写上字体为$font颜色为$color的一行字符串$s;$font为1-5时使用内置的字体,其他字体为imageloadfont载入的返回值,中文需要使用中文字体,失败时返回 false
imagestring($image, $font, $x, $y, $s, $color);
// 在图像$image的坐标$x,$y处垂直写上字体为$font颜色为$color的一行字符串$s;$font为1-5时使用内置的字体,其他字体为imageloadfont载入的返回值,中文需要使用中文字体,失败时返回 false
imagestringup($image, $font, $x, $y, $s, $color);
// 返回指定字体$fontfile像素$size角度$angle的字符串$text所占据的像素边界框,返回8个元素的数组,元素两两一组,分别代表左下角、右下角、右上角、左上角
// $fontfile可以时字体文件名/url
// 90度表示从下向上读的文本
imagettfbbox($size, $angle, $fontfile, $text);
// 用FreeType字体在图像$image的$x,$y坐标绘制颜色为$color,大小为$size磅角度为$angle字体路径为$fontfile的字符串$text
// 返回8个元素的数组,元素两两一组,分别代表左下角、右下角、右上角、左上角,代表字符串占据的像素框大小
// 90度表示从下向上读的文本
imagettftext($image, $size, $angle, $x, $y, $color, $fontfile, $text);
// 返回指定字体$fontfile像素$size角度$angle的字符串$text所占据的freettype2形式的像素边界框,返回8个元素的数组,元素两两一组,分别代表左下角、右下角、右上角、左上角
// $fontfile可以时字体文件名/url
// 90度表示从下向上读的文本
imageftbbox($size, $angle, $fontfile, $text);
// 用FreeType 2字体在图像$image的$x,$y坐标绘制颜色为$color,大小为$size磅角度为$angle字体路径为$fontfile的字符串$text
// 返回8个元素的数组,元素两两一组,分别代表左下角、右下角、右上角、左上角,代表字符串占据的像素框大小
// 90度表示从下向上读的文本
imagefttext($image, $size, $angle, $x, $y, $color, $fontfile, $text);
绘制填充区域
// 在图像$image的$x,$y坐标及其周围1像素的点用$color颜色填充,成功返回true,失败返回false;使用时需要填充多个点效果才明显
imagefill($image, $x, $y, $color);
// 在图像$image的$x,$y坐标开始填充颜色$color,直到到达颜色为$border的边界,成功返回true,失败返回false
imagefilltoborder($image, $x, $y, $border, $color);
图片复制
// 将图像$src_im的坐标$src_x,$src_y开始宽为$src_w高为$src_h的部分复制到图像$dst_im上,从坐标$dst_x,$dst_y开始(对应$src_x,$src_y)
imagecopy($dst_im, $src_im, $dst_x, $dst_y, $src_x, $src_y, $src_w, $src_h);
// 将图像$src_im的坐标$src_x,$src_y开始宽为$src_w高为$src_h的部分复制到图像$dst_im上,从坐标$dst_x,$dst_y开始(对应$src_x,$src_y)
// $pct为透明度,为0时复制的图像显示不出来,100与imagecopy相同
// 合并时通过在拷贝操作前将目标像素转换为灰度级来保留了原色度
imagecopymergegray($dst_im, $src_im, $dst_x, $dst_y, $src_x, $src_y, $src_w, $src_h, $pct);
// 将图像$src_im的坐标$src_x,$src_y开始宽为$src_w高为$src_h的部分复制到图像$dst_im上,从坐标$dst_x,$dst_y开始(对应$src_x,$src_y)复制到宽为$dst_w高为$dst_h的区域内
// $src_im和$dst_im图像的宽高不同时,图像会自动收缩拉伸
// 函数会平滑地插入像素值,因此减小了图像的大小仍然可以保持极大的清晰度。
imagecopyresampled($dst_im, $src_im, $dst_x, $dst_y, $src_x, $src_y, $dst_w, $dst_h, $src_w, $src_h);
图片过滤
$filtertypes = [
IMG_FILTER_NEGATE, // 反转图像所有颜色
IMG_FILTER_GRAYSCALE, // 转换图像颜色为灰度
IMG_FILTER_BRIGHTNESS, // 将图像亮度调整为$arg1
IMG_FILTER_CONTRAST, // 将图像对比度调整为$arg1
IMG_FILTER_COLORIZE, // 转换图像颜色为$arg1,$arg2,$arg3指定的rgb颜色,并且可指定透明度$arg4
IMG_FILTER_EDGEDETECT, // 使用边缘检测突出图像边缘
IMG_FILTER_EMBOSS, // 使图像浮雕化
IMG_FILTER_GAUSSIAN_BLUR, // 使用用高斯算法模糊图像。
IMG_FILTER_SELECTIVE_BLUR, // 模糊图像。
IMG_FILTER_MEAN_REMOVAL, // 用平均移除法来达到轮廓效果
IMG_FILTER_SMOOTH, // 将图像柔滑度调整为$arg1
];
// 在$src_im图像上使用$filtertype过滤器,$arg1, $arg2, $arg3根据需要传递参数,可不传
imagefilter($src_im, $filtertype, $arg1, $arg2, $arg3);
输出图片
// 指定$filename时将$image保存为$filename,否则将直接输出图像流,成功返回true。失败返回flase
// 输出GD图像
imagegd($image, $filename);
// 输出gif图像
imagegif($image, $filename);
// 输出jpeg图像,$quality为图片质量(0-100)默认75,100最佳质量
imagejpeg($image, $filename, $quality);
// 输出PNG图像
imagepng($image, $filename);
// 输出WBMP图像
imagewbmp($image, $filename);
// 输出WebP图像,$quality为图片质量(0-100)默认75,100最佳质量
imagewebp($image, $filename, $quality);
// 输出XBM图像,$foreground为前景色,默认黑色
imagexbm($image, $filename, $foreground);
// 输出BMP图像,$compressed为是否使用游程编码(RLE)压缩BMP
imagebmp($image, $filename, $compressed);
// 输出GD2图像
imagegd2($image, $filename);
转换WBMP格式图片
// 将JPEG图像文件$jpegname转换为宽$dest_width高$dest_height的WBMP图像文件$wbmpname,$threshold为0-8的阈值;成功返回true,失败返回flase
jpeg2wbmp($jpegname, $wbmpname, $dest_height, $dest_width, $threshold);
// 将PNG图像文件$jpegname转换为宽$dest_width高$dest_height的WBMP图像文件$wbmpname,$threshold为0-8的阈值;成功返回true,失败返回flase
png2wbmp($pngname, $wbmpname, $dest_height, $dest_width, $threshold);
windwos环境截图
// 截图当前屏幕,返回截图的图片对象,失败时返回false
imagegrabscreen();
// 截图指定窗口$handle,返回截图的图片对象,失败时返回false;$handle为COM实例中的HWND属性
$browser = new COM('InternetExplorer.Application');
$handle = $browser->HWND;
$browser->Visible = true;
$im = imagegrabwindow($handle);
$browser->Quit();
imagepng($im, 'iesnap.png');
imagedestroy($im);
获取GD库信息
// 获取GD库的版本和功能的信息数组
gd_info()