能够用于读取,转换,写入多种不同格式的图像,包含 DPX, EXR, GIF, JPEG, JPEG-2000, PDF, PhotoCD, PNG, Postscript, SVG, 和 TIFF;Imagemagick需要ghostscript来执行PDF操作
安装ImageMagick:http://www.imagemagick.org/ ImageMagick >= 6.2.4
安装扩展:https://pecl.php.net/package/imagick
常量
//黑色
imagick::COLOR_BLACK
//蓝色
imagick::COLOR_BLUE
//青色
imagick::COLOR_CYAN
//绿色
imagick::COLOR_GREEN
//红色
imagick::COLOR_RED
//黄色
imagick::COLOR_YELLOW
//洋红色
imagick::COLOR_MAGENTA
Imagick类
创建图像对象
// 创建图片$files的Imagick实例,$files是array时Imagick为一组图片的实例
new Imagick($files);
// 创建一个宽$columns高$rows,图像内容为$pseudoString的图像实例
$imagick = new Imagick();
$imagick->newPseudoImage($columns, $rows, $pseudoString);
清除资源
//清除与Imagick对象关联的所有资源
$imagick->clear():bool
读取图像
$imagick = new Imagick();
// 读取文件$filename创建图像
$imagick->readImage($filename);
// 读取文件资源$filehandle创建图像
$imagick->readImageFile($filehandle);
图像写入
// 将图像写入文件$filename,文件类型根据文件后缀自读取或指定文件类型与文件名(jpg:test.png)
$imagick->writeImage($filename);
// 将图像写入文件资源$filehandle
$imagick->writeImageFile($filehandle);
// 将设定的单张或多张图像写入文件$filename中,$adjoin为true时依次创建已文件名$filename为主以数字累加的文件,为false时图像将保存在一个文件中
$imagick->writeImages($filename, $adjoin);
添加隐藏图像
// 在图像上添加隐藏图像$watermark_wand,$offset为隐藏图像的开始位置
$imagick->steganoImage($watermark_wand, $offset);
图像模糊
// 为图像添加自适应模糊滤镜,自适应模糊在图像边缘效果降低,$radius为模糊半径,$sigma为标准偏差,单位像素
$imagick->adaptiveBlurImage($radius, $sigma);
// 为图像添加模糊滤镜,$radius为模糊半径,$sigma为标准偏差,单位像素
$imagick->blurImage($radius, $sigma);
// 为图像添加模拟运动模糊,$radius为模糊半径,$sigma为标准偏差,单位像素,$angle为应用效果角度,$radius应大于$sigma;使用高斯算法
$imagick->motionBlurImage($radius, $sigma, $angle);
图像锐化
// 自适应锐化图像,$radius为模糊半径,$sigma为标准偏差,单位像素;$radius为0时自动选择
$imagick->adaptiveSharpenImage($radius, $sigma);
// 锐化图像,$radius为模糊半径,$sigma为标准偏差;使用高斯算法
$imagick->sharpenImage($radius, $sigma);
图像裁剪
// 将原图像从坐标$x,$y开始截取宽$width高$height的图像
$imagick->cropImage($width, $height, $x, $y);
// 将原图像截取宽$x_shear高$y_shear的平行四边形图像,其余部分填充$background颜色
$imagick->shearImage($background, $x_shear, $y_shear);
// 删除图像区域坐标$x,$y宽$width高$height的部分并折叠图像以占据删除的部分
$imagick->chopImage($width, $height, $x, $y);
// 截取图像,新图像从坐标$x,$y开始宽为$width高为$height
$imagick->extentImage($width, $height, $x, $y);
图片放大/缩小
// 图像将自适应的变换为宽$columns高$rows的图像
// 将尺寸调整为仅比之前的图像尺寸略小的尺寸时效果最佳
$imagick->adaptiveResizeImage($columns, $rows);
// 将图像大小改为$columns,$rows;$bestfit为true时宽高将按比例缩小,直到宽高其中一项达到指定大小
$imagick->thumbnailImage($columns, $rows, $bestfit = false);
// 将图片放大或缩小到指定尺寸$width,$height
$imagick->cropThumbnailImage($width, $height);
// 使用液体缩放方法缩放图像(接缝雕刻技术)到指定尺寸$width,$height
// $delta_x表示接缝可以在x轴上移动多少。传递0会使接缝变直。
// $rigidity为非直缝引入偏斜。此参数通常为0
$imagick->liquidRescaleImage($width, $height, $delta_x, $rigidity);
// 将图像按比例放大两倍
$imagick->magnifyImage();
// 将图像按比例缩小一半
$imagick->minifyImage();
// 使用滤镜将图像缩放到尺寸$columns,$rows
// $filter为过滤常数
// $blur大于1时为模糊,小于1时为锐利
$imagick->resizeImage($columns, $rows, $filter, $blur);
// 将图像缩小到尺寸$cols,$rows,其中一个参数为0时将根据另一个参数的比例同比缩放
$imagick->scaleImage($cols, $rows);
图像旋转
// 将图像按照反射中心x轴垂直镜像
$imagick->flipImage();
// 将图像按照反射中心y轴垂直镜像
$imagick->flopImage();
// 将图像旋转$degrees度,空余位置填充$background颜色
$imagick->rotateImage($background, $degrees);
// 将图像垂直镜像
$imagick->transposeImage();
// 将图像水平镜像
$imagick->transverseImage();
图像变化
// 将图像移动$x,$y,移出的部分将在另一侧移入
$imagick->rollImage($x, $y);
// 将图像$radius半径的块中的每个像素随机替换
$imagick->spreadImage($radius);
// 将图像根据中心将元素旋转$degrees度
$imagick->swirlImage($degrees);
图像滤镜
// 将图像应用波形滤镜;波的振幅$amplitude,波浪的长度$length
$imagick->waveImage($amplitude = 100, $length = 300);
// 模拟图像阴影
$imagick->ShadowImage($opacity, $sigma, $x, $y);
// 模拟月光场景
$imagick->blueShiftImage($factor= 1.5);
// 模拟木炭画,高斯半径为$radius,高斯标准偏差为$sigma,单位像素
$imagick->charcoalImage($radius, $sigma);
// 模拟油画;圆形邻域的半径$radius
// 每个像素都替换为在半径定义的圆形区域中出现的最频繁的颜色。
$imagick->oilPaintImage($radius);
// 模拟宝丽来图片;$properties为ImagickDraw实例,$angle为角度
$imagick->polaroidImage($properties, $angle);
// 模拟铅笔素描,高斯半径为$radius,高斯标准偏差为$sigma,单位像素,$angle为角度
$imagick->sketchImage($radius, $sigma, $angle);
// 对图像施加特殊效果,增加曝光度$threshold(0到QuantumRange)
$imagick->solarizeImage($threshold);
图像干扰
//向图像添加随机噪声
Imagick::addNoiseImage(int $noise_type ,int $channel= Imagick::CHANNEL_DEFAULT):bool
noise_type 噪声的类型
图像边缘调整
// 删除图像边缘像素
$imagick->shaveImage($columns, $rows);
// 移除图像中背景颜色的边缘颜色$fuzz,$fuzz应与背景颜色较小的偏差
$imagick->trimImage($fuzz);
// 保留图像边缘的同时减少图片中的斑点噪声
$imagick->despeckleImage();
图像边框
// 给图像设置边框。边框宽$width高$height颜色$bordercolor
$imagick->borderImage($bordercolor, $width, $height);
图像合成
// 将图像$composite_object合并在本图像,从坐标$x,$y开始合并;$composite为合并常量在php文档中可查
$imagick->compositeImage($composite_object, $composite, $x, $y);
// 将图像$offset_wand与本图像合并为一左一右的图像,返回一张新图像,两张图像大小应当一致
$imagick->stereoImage($offset_wand);
设置图像信息
// 设置图像默认背景色为$background
$imagick->setBackgroundColor($background);
// 设置图像默认压缩类型为$background(Imagick::COMPRESSION_*常量)
$imagick->setBackgroundColor($background);
// 设置图像默认压缩质量为$quality(1-100:高到低)
$imagick->setCompressionQuality($quality);
// 设置图像压缩类型为$background(Imagick::COMPRESSION_*常量)
$imagick->setImageCompression($background);
// 设置图像压缩质量为$quality(1-100:高到低)
$imagick->setImageCompressionQuality($quality);
// 设置图像属性键为$name,值为$value
$imagick->setImageProperty($name, $value);
// 设置图像分辨率为$x_resolution,$y_resolution
$imagick->setImageResolution($x_resolution, $y_resolution);
获取图像信息
// 获取图像的高度
$imagick->getImageHeight();
// 获取图像的宽度
$imagick->getImageWidth();
// 获取图像的宽度
$imagick->getResource();
// 获取图像的匹配$pattern的关联属性,$include_values为false只返回属性名
$imagick->getImageProperties($pattern = '*', $include_values = true);
// 获取图像的宽高、大小、格式等等;$appendRawOutput为true时返回原始数据
$imagick->identifyImage($appendRawOutput = false);
图像加解密
// 将图像$imagick使用$passphrase密码加密
$imagick->encipherImage(111111);
// 将图像$imagick使用$passphrase密码解密,必须时使用encipherImage方法加密的才能解
$imagick->decipherImage(111111);
图像颜色
// 调整图像的亮度$brightness、饱和度$saturation、色调$hue;色调为当前位置开始的旋转百分比,50:逆时针旋转90度,150:顺时针旋转90度,0和200:旋转180度
$imagick->modulateImage($brightness, $saturation, $hue);
// 增强彩色图像的对比度
$imagick->normalizeImage();
// 使用非线性S形对比度算法调整图像的对比度;
// $sharpen为true增加对比度,为false减少对比度;$alpha为增加对比度的程度(1很小,5是很大的量,20是极端);$beta为渐变的中点所在的位置(0为白色;50为中灰;100为黑色)
// 此算法不会使高光或阴影饱和
$imagick->sigmoidalContrastImage($sharpen, $alpha, $beta);
// 从坐标$x,$y开始增加宽$width高$height的与图像背景颜色图像,使用前可以先使用setImageBackgroundColor()设置背景颜色
$imagick->spliceImage(100, 100, 0, 0);
渲染绘画
//把ImagickDraw对象$draw渲染到当前图片上
$imagick->drawImage($draw);
// 清除所有的绘画
$imagick->render($draw);
获取图像流
// 设置图像的格式
$Imagick->setImageFormat($format);
// 以字符串的形式返回图像,作为一个blob,blob格式根据setImageFormat设置
$Imagick->getImageBlob();
ImagickPixel颜色类
Imagick、ImagickDraw类中方法的颜色参数都可以使用此对象
构造颜色对象
// 初始化颜色对象
new ImagickPixel($color);
设置/获取颜色
// 设置颜色
$ImagickPixel->setColor($color);
// 设置颜色的色相$hue(0-1,0为红色),饱和度$saturation(0-1,1为完全饱和度)和亮度$luminosity(0-1,0黑色,1白色)
$ImagickPixel->setHSL($hue, $saturation, $luminosity);
// 获取颜色值的RGBA值的数组,A为透明度;
$ImagickPixel->getColor();
// 获取颜色字符串
$ImagickPixel->getColorAsString();
清除颜色资源
// 删除颜色,删除后不应再调用次对象实例
$ImagickPixel->destroy($hue, $saturation, $luminosity);
// 清除与此对象关联的资源
$ImagickPixel->clear();
ImagickDraw绘画类
绘画不会直接在图像上作画,绘画类只是存储了多个要在图像上进行绘制的图像、线条等等、需要调用$imagick->drawImage才能将图像绘制在图像上
创建绘画对象
// 创建绘画对象实例
new ImagickDraw();
// 克隆一个新的绘画对象实例
$ImagickDraw->clone();
清除/释放资源
// 获取堆栈中最后一个绘画对象实例,并将其从堆栈中删除
$ImagickDraw->pop();
// 清除绘画内容
$ImagickDraw->clear();
// 释放绘画对象
$ImagickDraw->destroy();
设置绘画笔触
// 设置绘画笔触不透明度为$opacity
$ImagickDraw->setStrokeAlpha($opacity);
// 设置绘画笔触轮廓是否抗锯齿,默认抗锯齿;$stroke_antialias为布尔值
$ImagickDraw->setStrokeAntialias($stroke_antialias);
// 设置绘画笔触颜色为$stroke_pixel(ImagickPixel对象)
$ImagickDraw->setStrokeColor($stroke_pixel);
// 设置绘画笔触宽度为$stroke_width
$ImagickDraw->setStrokeWidth($stroke_width);
绘制点、线、多边形
// 在坐标$x,$y绘制一个点
$ImagickDraw->point($x, $y);
// 根据$coordinates绘制折线;$coordinates示例:array(array('x'=> 3,'y'=> 4), array('x'=> 2, 'y'=> 6));一个数组为一个坐标点
$ImagickDraw->polyline($coordinates);
// 使用$coordinates绘制贝塞尔曲线,$coordinates示例:array(array('x'=> 3,'y'=> 4), array('x'=> 2, 'y'=> 6));一个数组为一个坐标点
$ImagickDraw->bezier($coordinates);
// 根据$coordinates绘制多边形;$coordinates示例:array(array('x'=> 3,'y'=> 4), array('x'=> 2, 'y'=> 6));一个数组为一个坐标点
$ImagickDraw->polygon($coordinates);
// 绘制一个左上角坐标为$x1,$y1,右下角坐标为$x2,$y2的矩形
$ImagickDraw->rectangle($x1, $y1, $x2, $y2);
// 绘制一个左上角坐标为$x1,$y1,右下角坐标为$x2,$y2的圆角矩形
$ImagickDraw->roundRectangle($x1, $y1, $x2, $y2, $rx, $ry);
绘制圆
// 绘制一个从图像坐标$sx,$sy开始到坐标$ex,$ey结束起始弧度为$sd结束弧度为$ed的圆弧
$ImagickDraw->arc($sx, $sy, $ex, $ey, $sd, $ed);
// 以图像坐标$sx,$sy为原点,宽$ex高$ey起始弧度为$sd结束弧度为$ed的椭圆
$ImagickDraw->ellipse($sx, $sy, $ex, $ey, $sd, $ed);
// 以图像坐标$ox,$oy为原点,周长坐标为$px,$py的圆
$ImagickDraw->circle($ox, $oy, $px, $py);
使用点连续绘制
//开启绘画
$ImagickDraw->pathStart();
// 从当前点绘制一条到绝对坐标为$x,$y的直线,结束点将作为下次绘画的起点
$ImagickDraw->pathLineToAbsolute($x, $y);
// 从当前点绘制一条到相对坐标为$x,$y的直线,结束点将作为下次绘画的起点
$ImagickDraw->pathLineToRelative($x);
// 从当前点绘制一条到绝对水平坐标为$x的水平直线,结束点将作为下次绘画的起点
$ImagickDraw->pathLineToHorizontalAbsolute($x);
// 从当前点绘制一条到相对水平坐标为$x的水平直线,结束点将作为下次绘画的起点
$ImagickDraw->pathLineToHorizontalRelative($x);
// 从当前点绘制一条到绝对垂直坐标为$y的垂直直线,结束点将作为下次绘画的起点
$ImagickDraw->pathLineToVerticalAbsolute($y);
// 从当前点绘制一条到相对垂直坐标为$y的垂直直线,结束点将作为下次绘画的起点
$ImagickDraw->pathLineToVerticalRelative($y);
// 在绝对坐标$x,$y处开始新的绘画,结束点将作为下次绘画的起点
$ImagickDraw->pathMoveToAbsolute($x, $y);
// 使用绝对坐标$x1,$y1作为控制点,绘制从当前点到坐标$x,$y的二次贝塞尔曲线;$x,$y将作为下次绘画的起点
$ImagickDraw->pathCurveToQuadraticBezierAbsolute($x1, $y1, $x, $y);
// 使用相对坐标$x1,$y1作为控制点,绘制从当前点到坐标$x,$y的二次贝塞尔曲线;$x,$y将作为下次绘画的起点
$ImagickDraw->pathCurveToQuadraticBezierRelative($x1, $y1, $x, $y);
// 使用绝对坐标$x1,$y1为起点控制点,$x2,$y2为终点控制点,绘制从当前点到坐标$x,$y的三次贝塞尔曲线;$x,$y将作为下次绘画的起点
$ImagickDraw->pathCurveToAbsolute($x1, $y1, $x2, $y2, $x, $y);
//结束绘画
$ImagickDraw->pathFinish();
绘制文本
// 设置图像绘制文字的字体文件$font_name
$ImagickDraw->setFont($font_name);
// 设置图像绘制文字的字体名称$font_family
$ImagickDraw->setFontFamily($font_family);
// 设置图像绘制文字的字体大小$pointsize磅
$ImagickDraw->setFontSize($pointsize);
// 设置图像绘制文字的字体样式(IMGTYPE_*常量)
$styles = [
imagick::IMGTYPE_GRAYSCALE, // 斜体
imagick::IMGTYPE_GRAYSCALEMATTE, // 斜体
];
$ImagickDraw->setFontStyle($style);
// 设置图像绘制文字的对齐方式(ALIGN_*常量)
$alignments = [
imagick::ALIGN_UNDEFINED, //
imagick::ALIGN_LEFT, //
imagick::ALIGN_CENTER, //
imagick::ALIGN_RIGHT, //
];
$ImagickDraw->setTextAlignment($alignment);
// 设置图像绘制文字的背景颜色$under_color(ImagickPixel对象)
$ImagickDraw->setTextUnderColor($under_color);
// 设置图像绘制文字粗细$font_weight
$ImagickDraw->setFontWeight($font_weight);
// 设置图像绘制文字是否抗锯齿,默认抗锯齿;$font_weight为布尔值
$ImagickDraw->setTextAntialias($font_weight);
// 在图像的坐标$x,$y上绘制文字$text
$ImagickDraw->annotation($x, $y, $text);
绘制填充
// 设置绘制对象填充颜色或纹理的不透明度$opacity,完全不透明为1.0
$ImagickDraw->setFillOpacity($fillOpacity);
// 设置绘制对象填充颜色$fill_pixel(ImagickPixel对象)
$ImagickDraw->setFillColor($fill_pixel);
// 从坐标$x,$y开始填充$paintMethod
$paintMethods = [
imagick::PAINT_POINT, // 填充一个点
imagick::PAINT_REPLACE, // 填充背景颜色
];
$ImagickDraw->color($x, $y, $paintMethod);
渲染图像
// 使用合成运算符$compose(COMPOSITE_常量)将图像$compositeWand从位置$x,$y开始截取宽$width高$height的图像合成在当前图像
$ImagickDraw->composite($compose, $x, $y, $width, $height, $compositeWand);
// 将绘制命令渲染在图像上
$ImagickDraw->render();