使用imagick在PHP中实现各种图像效果实例

imagick是一个功能强大的图像处理库。

可以说,翻译是对imagick主要功能的简要介绍,或引进和使用功能的功能,我觉得更实用。

因为我的英语是有限的,所以它被描述得比较流行或者比较接近应用语言。

享受一组炫目的效果:



偏置图像:



实例uff1a

复制代码代码如下所示:

< PHP

ini_set('display_errors ',1);

头('content-type:图像/ JPEG);

图像=新imagick美元(1 .jpg);

$图像-> rollimage(20,39);

回波图像;

>



thumbnailimage($宽度、高度变化美元)大小的图片

例子:

复制代码代码如下所示:

< PHP

ini_set('display_errors ',1);

头('content-type:图像/ JPEG);

图像=新imagick美元(1 .jpg);

$图像-> thumbnailimage(100,0);

回波图像;

>



addnoiseimage(int,int noise_type {美元,美元imagick通道::channel_all });

功能:

向图像添加随机噪声

α干扰素

复制代码代码如下所示:

噪声系数($ noise_type型)

Imagick:: NOISE_UNIFORM (integer)

Imagick::noise_gaussian(整数)

Imagick::noise_multiplicativegaussian(整数)

Imagick::noise_impulse(整数)

Imagick::noise_laplacian(整数)

Imagick::noise_poisson(整数)

通道常量($通道类型)

Imagick::channel_undefined(整数)

Imagick::channel_red(整数)

Imagick::channel_gray(整数)

Imagick::channel_cyan(整数)

Imagick::channel_green(整数)

Imagick::channel_magenta(整数)

Imagick::channel_blue(整数)

Imagick::channel_yellow(整数)

Imagick::channel_alpha(整数)

Imagick::channel_opacity(整数)

Imagick::channel_matte(整数)

Imagick::channel_black(整数)

Imagick::channel_index(整数)

Imagick::channel_all(整数)



实例uff1a

复制代码代码如下所示:

< PHP

ini_set('display_errors ',1);

头('content-type:图像/ JPEG);

图像=新imagick美元(1 .jpg);

$图像-> thumbnailimage(100,0);

$图像-> addnoiseimage(imagick::::noise_poisson,imagick channel_opacity);

回波图像;

>



annotateimage创建文本图像

例子:

复制代码代码如下所示:

< PHP

图像=新imagick(美元);

画=新imagickdraw(美元);

像素=新imagickpixel美元('gray);

$图像->图像(800, 75,$像素);

$像素->设置颜色(黑的);

为绘制->设置字体('bookman-demiitalic);

美元setfontsize画>(30);

图像-> annotateimage美元(合画,10, 45, 0,敏捷的棕色狐狸跳过懒惰的狗);

$图像-> setimageformat('png);

头('content-type:图像/格式);

回波图像;

>



模糊像(浮动美元浮动半径,∑{ int美元,美元通道})

图像模糊滤波的模糊处理

参数:

复制代码代码如下所示:

通道$:

Imagick::channel_undefined(整数)

Imagick::channel_red(整数)

Imagick::channel_gray(整数)

Imagick::channel_cyan(整数)

Imagick::channel_green(整数)

Imagick::channel_magenta(整数)

Imagick::channel_blue(整数)

Imagick::channel_yellow(整数)

Imagick::channel_alpha(整数)

Imagick::channel_opacity(整数)

Imagick::channel_matte(整数)

Imagick::channel_black(整数)

Imagick::channel_index(整数)

Imagick::channel_all(整数)



复制代码代码如下所示:

< PHP

ini_set('display_errors ',1);

头('content-type:图像/ JPEG);

图像=新imagick美元(1 .jpg);

$图像->模糊像(5,3);

回波图像;

>



对borderimage图像边缘处理(混合BorderColor美元美元美元,int int宽度,高度)

例子:

复制代码代码如下所示:

< PHP

ini_set('display_errors ',1);

头('content-type:图像/ JPEG);

图像=新imagick美元(1 .jpg);

颜色=新imagickpixel(美元);

$color->setColor (RGB (220220220));

图像-> borderimage美元(美元的颜色,5,4);



$图像->模糊像(5,5,imagick::channel_green);

回波图像;

>



对charcoalimage图像图形处理(浮动美元浮动美元半径,σ)

参数描述:

半径:越小越薄。

西格玛:墨水越大,反之亦然。

例子:

复制代码代码如下所示:

< PHP

ini_set('display_errors ',1);

头('content-type:图像/ JPEG);

图像=新imagick美元(1 .jpg);

颜色=新imagickpixel(美元);

$颜色->设置颜色(RGB(220220220));

图像-> borderimage美元(美元的颜色,5,4);

$图像-> charcoalimage(0.0001,0.001);

/ / $图像->模糊像(5,5,imagick::channel_green);

回波图像;

>



ChopImage(int,int美元美元的宽度,高度,int x美元,int Y元)

参数描述:删除一定范围的图像区域

我不做参数说明,请看一眼。



混色填充colorizeimage(混合着色混合美元,美元不透明度)

$着色颜色

opacit美元的透明度

例子:

复制代码代码如下所示:

< PHP

*

电影胶片效果

* /

ini_set('display_errors ',1);

头('content-type:图像/ JPEG);

图像=新imagick美元(1 .jpg);

$图像-> negateimage(假);

为图像-> colorizeimage(' # 000 ',1);

回波图像;

>



EmbossImage(浮为半径,浮$∑)

功能:返回灰度三维图像是不好的。

例子:

复制代码代码如下所示:

< PHP

ini_set('display_errors ',1);

头('content-type:图像/ JPEG);

图像=新imagick美元(1 .jpg);

$图像-> embossimage(1,1);

回波图像;

>



(两张效果图)



FlipImage(void)

功能:创建图像反转(垂直翻转)

例子:

复制代码代码如下所示:

< PHP

ini_set('display_errors ',1);

头('content-type:图像/ JPEG);

图像=新imagick美元(1 .jpg);

图像-> flipimage(美元);

回波图像;

>



FlopImage(void)

功能:图像水平水平翻转

复制代码代码如下所示:

< PHP

ini_set('display_errors ',1);

头('content-type:图像/ JPEG);

图像=新imagick美元(1 .jpg);

图像-> flopimage(美元);

回波图像;

>



图像(混合matte_color美元美元美元,int int宽度,高度,int int inner_bevel美元,美元outer_bevel)

功能:创建3D图像边框

参数描述:

matte_color美元:颜色

的inner_bevel美元内斜:框架

outer_bevel:美元的外部边界的倾向

实例uff1a

复制代码代码如下所示:

< PHP

ini_set('display_errors ',1);

头('content-type:图像/ JPEG);

图像=新imagick美元(1 .jpg);

颜色=新imagickpixel(美元);

$颜色->设置颜色(RGB(220220220));

图像->图像美元(美元的颜色,11,11,1,10);

回波图像;

>





注意事项:

$宽度(宽度)不应小于inner_bevel美元(的框架内倾斜)

Imagick::gammaimage(浮γ{ int美元,美元imagick通道::channel_all })

功能:调整图像的灰度系数。

参数描述:

浮点数:灰色系统值

美元imagick::channel_all通道默认

Imagick::channel_all

例1:

复制代码代码如下所示:

< PHP

ini_set('display_errors ',1);

头('content-type:图像/ JPEG);

图像=新imagick美元(1 .jpg);

图像-> gammaimage美元(30);

回波图像;

>





例2:

复制代码代码如下所示:

< PHP

ini_set('display_errors ',1);

头('content-type:图像/ JPEG);

图像=新imagick美元(1 .jpg);

图像-> gammaimage美元(30);

回波图像;

>



GaussianBlurImage(浮为半径,浮∑{ int美元,美元imagick通道::channel_all })

功能:高斯模糊处理与高斯模糊的照片相似。

参数描述:

浮动$半径:高斯的模糊半径,像素,不包括中央像素。

浮点数:高斯的标准偏差,以像素为单位,我认为这个参数是最重要的。

通道:图像颜色模式。

复制代码代码如下所示:

< PHP

ini_set('display_errors ',1);

头('content-type:图像/ JPEG);

图像=新imagick美元(1 .jpg);

$图像-> gaussianblurimage(30,3);

回波图像;

>



图像(浮blackpoint美元,美元浮动浮动γ,美元{ int白点相匹配,imagick::信=美元channel_all })

功能:调整图像颜色(调整图像的水平)

参数描述

复制代码代码如下所示:

< PHP

ini_set('display_errors ',1);

头('content-type:图像/ JPEG);

图像=新imagick美元(1 .jpg);

$图像->图像(4.4.4);

回波图像;

>



例2:

复制代码代码如下所示:

< PHP

ini_set('display_errors ',1);

头('content-type:图像/ JPEG);

图像=新imagick美元(1 .jpg);

$图像->图像(200200200,imagick::channel_green);

回波图像;

>



magnifyimage(void)

功能描述:一个简单的图像等于2倍放大(是一种方便的方法,比例缩放图像的两倍)。

例子:

复制代码代码如下所示:

< PHP

ini_set('display_errors ',1);

头('content-type:图像/ JPEG);

图像=新imagick美元(1 .jpg);

($图像-> magnifyimage);

回波图像;

>



medianfilterimage(浮为半径)

功能:特殊的过滤器是一个有点像PS图象处理软件着色刀滤波器

复制代码代码如下所示:

< PHP

ini_set('display_errors ',1);

头('content-type:图像/ JPEG);

图像=新imagick美元(1 .jpg);

颜色=新imagickpixel(美元);

$颜色->设置颜色(RGB(220220220));

图像-> medianfilterimage美元(5);

回波图像;

>



minifyimage(void)

功能:图形小双打(按比例将图像缩放到其大小的一半)

例子:

复制代码代码如下所示:

< PHP

ini_set('display_errors ',1);

头('content-type:图像/ JPEG);

图像=新imagick美元(1 .jpg);

图像-> minifyimage(美元);

回波图像;

>



modulateimage(浮动美元美元浮动浮动亮度,饱和度,色调美元)

功能:控制图像的亮度、饱和度和色调。

参数描述:

亮度:亮度

浮点$饱和:饱和

浮动色相

例1:

复制代码代码如下所示:

< PHP

ini_set('display_errors ',1);

头('content-type:图像/ JPEG);

图像=新imagick美元(1 .jpg);

图像-> modulateimage美元(1001100);

回波图像;

>



例2:

复制代码代码如下所示:

< PHP

ini_set('display_errors ',1);

头('content-type:图像/ JPEG);

图像=新imagick美元(1 .jpg);

图像-> modulateimage美元(2501250);

回波图像;

>



MotionBlurImagemotionBlurImage(浮为半径,浮$西格玛,浮角{ int美元,美元imagick通道::channel_default })

功能:模拟运动模糊(模拟运动模糊),一个运动模糊过滤器类似PS图象处理软件的功能

参数描述:

浮动半径:高斯半径,而不是中心像素。

浮点数:标准偏差的高斯,以像素为单位。{重要参数}

浮动角度:模糊角度。

int $通道:图像的色彩模式,默认的是imagick::channel_default

例1:

复制代码代码如下所示:

< PHP

ini_set('display_errors ',1);

头('content-type:图像/ JPEG);

图像=新imagick美元(1 .jpg);

颜色=新imagickpixel(美元);

$颜色->设置颜色(RGB(220220220));

$图像-> motionblurimage(61,10,10);

回波图像;

>



例2:

复制代码代码如下所示:

< PHP

ini_set('display_errors ',1);

头('content-type:图像/ JPEG);

图像=新imagick美元(1 .jpg);

颜色=新imagickpixel(美元);

$颜色->设置颜色(RGB(220220220));

图像-> motionblurimage美元(20110100);

回波图像;

>



OilPaintImage(浮为半径):

功能描述:模拟油画

例子:

复制代码代码如下所示:

< PHP

ini_set('display_errors ',1);

头('content-type:图像/ JPEG);

图像=新imagick美元(1 .jpg);

颜色=新imagickpixel(美元);

$颜色->设置颜色(RGB(220220220));

图像-> oilpaintimage美元(1);

回波图像;

>



radialblurimage(浮角{ int美元,美元imagick通道::channel_all })

功能:径向模糊(径向模糊图像)

复制代码代码如下所示:

< PHP

ini_set('display_errors ',1);

头('content-type:图像/ JPEG);

图像=新imagick美元(1 .jpg);

颜色=新imagickpixel(美元);

$颜色->设置颜色(RGB(220220220));

图像-> radialblurimage美元(30);

回波图像;

>





RaiseImage(int,int美元美元的宽度,高度,int x美元,int Y元,为提高)

功能描述:创建3D图像按钮(创建一个模拟的3D按钮效果)

复制代码代码如下所示:

< PHP

ini_set('display_errors ',1);

头('content-type:图像/ JPEG);

图像=新imagick美元(1 .jpg);

颜色=新imagickpixel(美元);

$颜色->设置颜色(RGB(220220220));

$图像-> raiseimage(10,10,3,5,6);

回波图像;

>



附1:需要减少图片的大小,添加半透明边框,读取EXIF信息,并显示在指定的图片。

复制代码代码如下所示:

$宽= '500;

随身高成正美元= '700 '; / /调整大小允许的最大宽度和高度的图片集

可用美元= '。 / / / b.jpg ';定义一个图像文件的路径

/ / $图像-> writeimage('。 / b.jpg .bak); / /这张照片你可以备份

myimage =新imagick美元(合源文件); / /读取图像文件

exifobject = my_exif美元(美元myimage); / /写函数来读取exif信息(拍摄数据),EXIF信息,根据自己的需要设置,返回的对象

/ / $ myimage -> setimageformat('jpeg '); / /图片JPG格式

myimage美元-> setcompressionquality(100); / /套JPG压缩质量,1 - 100

($ myimage ->增强图像); / /噪声

sourcewidth美元=美元myimage -> getimagewidth(); / /读取原始图像的大小

如果($ sourcewidth > $宽)

{

myimage美元->图像(美元与宽、随身高成正美元,true); / /调整图片大小

}

myimage美元-> raiseimage(8, 8, 0,0, 1); / /加半透明边框

resizewidth美元=($ myimage -> getimagewidth); / /读调整后的图片大小

resizeheight美元=美元myimage -> getimageheight();

$缺点=新(imagickdraw); / /实例化一个绘画对象,绘制半透明的黑色背景信息,EXIF

缺点- > setfillcolor美元(新imagickpixel(' # 000000)); / /黑色设置填充颜色

缺点- > setfillopacity美元(0.6); / /填充不透明度为0.6参数0.1-1,透明度1。

缺点- >矩形美元(美元resizewidth / 2 - 190美元- 50美元,resizeheight,resizewidth / 2 + 190,resizeheight美元12); / /矩形绘图参数,分别的X,Y,X,Y的左上角,右下角

myimage美元-> DrawImage(美元退税); / /确认的矩形框架图的绘制

为画=新(imagickdraw); / /实例化一个图形对象,绘制文本信息嵌入EXIF图片

为绘制->设置字体('。 / xianhei。TTF '); / /设置文本的字体,TTF或TTC字体可以绝对或相对

为绘制-> setfontsize(11); / /集名称

为绘制-> settextalignment(2); / /文本对齐2。

为绘制-> setfillcolor(' # ffffff '); / /文字颜色

myimage美元-> annotateimage(合画,resizewidth美元/ 2美元- 39, 0美元,resizeheight,exifobject -> row1); / /画第一行文本,中心

myimage美元-> annotateimage(合画,resizewidth美元/ 2美元- 27, 0美元,resizeheight,exifobject -> row2); / /绘制文本的第二行,。

myimage美元-> annotateimage(合画,resizewidth美元/ 2美元- 15, 0美元,resizeheight,exifobject -> row3; / /)绘制文本第三行,。

用头部输出图像

头('content-type:图像/ JPEG '); / / PHP文件输出MIME类型是JPEG图片

echo $ myimage; / /在当前的PHP页面输出图片

/ / $图像-> writeimage('。 /新.jpg); / /如果图像不需要在当前的PHP程序的输出,用图像到磁盘功能,以上设置也可以删除页眉

myimage美元->明确();

($ myimage ->破坏); / /释放资源

/ / write functions to read EXIF information, return the object

功能my_exif($ myimage)

{

exifarray美元=阵列('exif:模式= 'exif:datetimeoriginal= > '未知','未知','未知' = > 'exif:曝光软体,'exif:fnumber= 0 / 10,'exif:时间= 0 / 10,'exif:isospeedratings= >未知',

的EXIF:MeteringMode = > 'exif:闪光= > '未知','闪光','未知' = 'exif:焦距,'exif:exifimagewidth= 'exif:exifimagelength= > '未知','未知'); / /初始化信息,防止误操作的发生无法读取照片的EXIF信息

exifarray美元=美元myimage -> getimageproperties(EXIF:*); / /读取存储在$ exifarray阵列图像的EXIF信息。

如果你需要显示原始数组 / /可以使用print_r($ exifarray);

$ R -> row1 =相机。exifarray美元'exif:{模型};

$ R -> row1 = r -> row1。拍摄时间。exifarray美元{ 'exif:datetimeoriginal};

开关($ exifarray { 'exif:曝光软体的})

{

案例1:

exifarray美元{ 'exif:曝光软体} =手动(M);

中断;手动控制

案例2:

exifarray美元{ 'exif:曝光软体} = 程序自动(P);

中断;程序正常

案例3:

exifarray美元{ 'exif:曝光软体} =光圈优先(A,AV);

中断;光圈优先

案例4:

exifarray美元{ 'exif:曝光软体} =快门优先(S,电视);

中断;快门优先

案例5:

exifarray美元{ 'exif:曝光软体} =慢快门;

中断;程序创新(慢程序)

案例6:

exifarray美元{ 'exif:曝光软体} =运动模式;

中断;程序动作(高速程序)

案例7:

exifarray美元{ 'exif:曝光软体} =画像;

打断

案例8:

exifarray美元{ 'exif:曝光软体} =风景;

中断;

违约:

exifarray美元{ 'exif:曝光软体} =其他;

}

$ R -> row1 = r -> row1。模式。exifarray美元{ 'exif:曝光软体};

exifarray美元{ 'exif:fnumber} =(爆炸,exifarray美元数量的快速增加的'exif:{ });

exifarray美元{ 'exif:fnumber} = { 'exif:exifarray美元数量的快速增加的} { 0 } / $ exifarray { 'exif:fnumber} { 1 };

$ R -> row2 =光圈:F /。exifarray美元数量的快速增加的'exif:{ };

exifarray美元{ 'exif:时间的} =(爆炸,exifarray美元'exif时间:{ });

如果(($ exifarray { 'exif:时间的} { 0 } / $ exifarray { 'exif:时间的} { 1 })> = 1)

{

exifarray美元{ 'exif:时间的} = sprintf(%。1fs

别的}

{

exifarray美元{ 'exif:时间的} = sprintf(1 / % DS

}

$ R -> row2 = r -> row2。快门。exifarray美元'exif时间:{ };

$ R -> row2 = r -> row2。国际标准化组织。exifarray美元{ 'exif:isospeedratings};

exifarray美元{ 'exif:exposurebiasvalue} =爆炸( /

exifarray美元{ 'exif:exposurebiasvalue} = sprintf((% 1.1fev),((浮动)$ exifarray { 'exif:exposurebiasvalue} { 0 } / $ exifarray { 'exif:exposurebiasvalue} { 1 }×100)/ 100)。

如果((浮动)$ exifarray { 'exif:exposurebiasvalue} > 0)

{

exifarray美元{ 'exif:exposurebiasvalue} =+。exifarray美元{ 'exif:exposurebiasvalue};

}

$ R -> row2 = r -> row2。补偿。exifarray美元{ 'exif:exposurebiasvalue};

开关($ exifarray 'exif:{ MeteringMode })

{

案例0:

exifarray美元'exif:{ MeteringMode } =未知;

打破;

案例1:

exifarray美元'exif:{ MeteringMode } =矩阵;

打破;

案例2:

exifarray美元'exif:{ MeteringMode } =焦点;

打破;

案例3:

exifarray美元'exif:{ MeteringMode } =点测光;

打破;

案例4:

exifarray美元'exif:{ MeteringMode } =多点光测量;

打破;

违约:

exifarray美元'exif:{ MeteringMode } =其他;

}

$ R -> row2 = r -> row2。光度法。exifarray美元'exif:{ MeteringMode };

开关($ exifarray { 'exif:闪光的})

{

案例1:

exifarray美元{ 'exif:闪光的} =打开闪光灯;

打破;

}

$ R -> row2 = r -> row2。美元exifarray { 'exif:闪光。};

如果($ exifarray { 'exif:focallengthin35mmfilm})

{

$ R -> row3 =等效焦距:'。exifarray美元{ 'exif:focallengthin35mmfilm}。mm;

别的}

{

exifarray美元{ 'exif:焦距的} =爆炸( /

exifarray美元{ 'exif:焦距的} = sprintf(% 4.1fmm

$ R -> row3 =焦距:'。exifarray美元{ 'exif:焦距};

}

$ R -> row3 = r - >在第3行。原始像素。exifarray美元{ 'exif:exifimagewidth x'}。exifarray美元{ 'exif:exifimagelength}。'px;

如果($ exifarray { 'exif:软件})

{

$ R -> row3 = r - >在第3行。后来。exifarray美元{ 'exif:软件};

}

返回$ r;

}



附2:处理图片水印

复制代码代码如下所示:

< PHP

获取水印图像

十元=新imagick(罗。png);

罗美元-> setimageresolution(0.01,0.03);



/ /创建一个imagick对象,并获得源图

我的新imagick美元=(old_large_img_2 .jpg);



获取源图像的宽度和高度

srcwh美元=美元-> getimagegeometry(IM);



图片缩放比例/宽度和高度设置

如果($ srcwh { 'width} > 710){

美元'width} = 710 SRCW {;

等所有'height} = {美元美元/ 'width'} SRCW { } { 'width srcwh美元的美元srcwh { 'height};

其他{ }

'width} = { $ SRCW美元'widthsrcwh { };

等所有'height} = {美元美元'heightsrcwh { };

}



按照缩放比例

我thumbnailimage美元->($ SRCW { 'width},{SRCH美元'height },真的);



创建一个缩略图大小的彩色图片

画布=新imagick(美元);

$帆布->景新($ SRCW { 'width},{ } 'height SRCH美元,,'jpg '); / /粉红色,布莱克



添加水印

$我->完成(合罗,imagick::composite_over SRCW { 'width'},美元280,美元'height SRCH {'} - 77);

美元setcompressionquality画布>(91);

带有图片

$帆布->完成(合我,imagick::composite_over,0, 0);



输出画面

页眉(内容类型:图像);

画布;



生成图像

$帆布-> writeimage(test_img / old_large_img_2_96 .jpg);

>