PHP中使用Imagick实现各种图片效果实例
《:PHP中使用Imagick实现各种图片效果实例》要点: imagick是一个功能强大的图像处理库.?
代码如下:
? ?
<?php? ini_set('display_errors',1);? header('Content-type: image/jpeg');? $image = new Imagick('1.jpg');? $image->rollImage(20,39);? echo $image;? ?>? thumbnailImage($width,$height) 改变图片大小?
代码如下:
<?php? ini_set('display_errors',1);? header('Content-type: image/jpeg');? $image = new Imagick('1.jpg');? $image->thumbnailImage(100,0);? echo $image;? ?>? addNoiseImage(int $noise_type [,int $channel= Imagick::CHANNEL_ALL ]);?
代码如下:
Noise constants ( $noise_type 类型)? imagick::NOISE_UNIFORM (integer)? imagick::NOISE_GAUSSIAN (integer)? imagick::NOISE_MULTIPLICATIVEGAUSSIAN (integer)? imagick::NOISE_IMPULSE (integer)? imagick::NOISE_LAPLACIAN (integer)? imagick::NOISE_POISSON (integer)? Channel constants ( $channel 类型)? imagick::CHANNEL_UNDEFINED (integer)? imagick::CHANNEL_RED (integer)? imagick::CHANNEL_GRAY (integer)? imagick::CHANNEL_CYAN (integer)? imagick::CHANNEL_GREEN (integer)? imagick::CHANNEL_MAGENTA (integer)? imagick::CHANNEL_BLUE (integer)? imagick::CHANNEL_YELLOW (integer)? imagick::CHANNEL_ALPHA (integer)? imagick::CHANNEL_OPACITY (integer)? imagick::CHANNEL_MATTE (integer)? imagick::CHANNEL_BLACK (integer)? imagick::CHANNEL_INDEX (integer)? imagick::CHANNEL_ALL (integer)? 例子:
代码如下:
<?php? ini_set('display_errors',0);? $image->addNoiseImage(imagick::NOISE_POISSON,imagick::CHANNEL_OPACITY);? echo $image;? ?>? annotateImage 创建文本图像? 例子:?
代码如下:
<?php? $image = new Imagick();? $draw = new ImagickDraw();? $pixel = new ImagickPixel( 'gray' );? $image->newImage(800,75,$pixel);? $pixel->setColor('black');? $draw->setFont('Bookman-DemiItalic');? $draw->setFontSize( 30 );? $image->annotateImage($draw,10,45,'The quick brown fox jumps over the lazy dog');? $image->setImageFormat('png');? header('Content-type: image/png');? echo $image;? ?>? blurImage(float $radius,float $sigma [,int $channel ])?
代码如下:
int $channel :? imagick::CHANNEL_UNDEFINED (integer)? imagick::CHANNEL_RED (integer)? imagick::CHANNEL_GRAY (integer)? imagick::CHANNEL_CYAN (integer)? imagick::CHANNEL_GREEN (integer)? imagick::CHANNEL_MAGENTA (integer)? imagick::CHANNEL_BLUE (integer)? imagick::CHANNEL_YELLOW (integer)? imagick::CHANNEL_ALPHA (integer)? imagick::CHANNEL_OPACITY (integer)? imagick::CHANNEL_MATTE (integer)? imagick::CHANNEL_BLACK (integer)? imagick::CHANNEL_INDEX (integer)? imagick::CHANNEL_ALL (integer)?
代码如下:
<?php? ini_set('display_errors',1);? header('Content-type: image/jpeg');? $image = new Imagick('1.jpg');? $image->blurImage(5,3);? echo $image;? ?>? borderImage ( mixed $bordercolor,int $width,int $height ) 图片边框处理? 例子:?
代码如下:
<?php? ini_set('display_errors',1);? header('Content-type: image/jpeg');? $image = new Imagick('1.jpg');? $color=new ImagickPixel();? $color->setColor("rgb(220,220,220)");? $image->borderImage($color,5,4);? ? $image->blurImage(5,imagick::CHANNEL_GREEN);? echo $image;? ?>? charcoalImage ( float $radius,float $sigma ) 图像素描处理?
代码如下:
<?php? ini_set('display_errors',4);? $image->charcoalImage(0.0001,0.001);? //$image->blurImage(5,imagick::CHANNEL_GREEN);? echo $image;? ?>? chopImage ( int $width,int $height,int $x,int $y )?
代码如下:
<?php? /* 胶卷底片效果 */? ini_set('display_errors',1);? header('Content-type: image/jpeg');? $image = new Imagick('1.jpg');? $image->negateImage(false);? $image->colorizeImage('#000',1.0);? echo $image;? ?>? embossImage ( float $radius,float $sigma )? 功能: 返回一个灰度级3D图像 不太好.? 例子:?
代码如下:
<?php? ini_set('display_errors',1);? header('Content-type: image/jpeg');? $image = new Imagick('1.jpg');? $image->embossImage(1,1);? echo $image;? ?>? (两张效果图)??
代码如下:
<?php? ini_set('display_errors',1);? header('Content-type: image/jpeg');? $image = new Imagick('1.jpg');? $image->flipImage();? echo $image;? ?>? flopImage ( void )? 功能: 图像水平横向翻转?
代码如下:
<?php? ini_set('display_errors',1);? header('Content-type: image/jpeg');? $image = new Imagick('1.jpg');? $image->flopImage();? echo $image;? ?>? frameImage(mixed $matte_color,int $inner_bevel,int $outer_bevel)? 功能:创建3D图像边框? 参数说明:? $matte_color:颜色? $inner_bevel:边框内部倾斜度? $outer_bevel:外部边框倾斜度? 例子:
代码如下:
<?php? ini_set('display_errors',220)");? $image->frameImage($color,11,1,10);? echo $image;? ?>? ? 注意事项:? $width(宽度)不能小于$inner_bevel(边框内部倾斜度)?? Imagick::gammaImage (float $gamma [,int $channel= Imagick::CHANNEL_ALL])? 功能:调整图像灰度系数? 参数说明:? float $gamma :灰度系数值? $channel 默认为 Imagick::CHANNEL_ALL? Imagick::CHANNEL_ALL? 例子 1:?
代码如下:
<?php? ini_set('display_errors',1);? header('Content-type: image/jpeg');? $image = new Imagick('1.jpg');? $image->gammaImage(30);? echo $image;? ?>? ?? 例子 2:
代码如下:
<?php? ini_set('display_errors',1);? header('Content-type: image/jpeg');? $image = new Imagick('1.jpg');? $image->gammaImage(30);? echo $image;? ?>? gaussianBlurImage ( float $radius,int $channel= Imagick::CHANNEL_ALL ] )? 功能:高斯模糊处理 类似于photo的高斯模糊? 参数说明:? float $radius:高斯模糊的半径,像素,不包括中心象素.? float $sigma :高斯的标准偏差,以像素为单位.我觉得这个参数最重要.? int $channel :图像颜色模式.?
代码如下:
<?php? ini_set('display_errors',1);? header('Content-type: image/jpeg');? $image = new Imagick('1.jpg');? $image->gaussianBlurImage(30,3);? echo $image;? ?>? levelImage ( float $blackPoint,float $gamma,float $whitePoint [,int $channel= Imagick::CHANNEL_ALL ] )? 功能: 调整图像的色阶(Adjusts the levels of an image)? 参数说明?
代码如下:
? ??<?php? ini_set('display_errors',1);? header('Content-type: image/jpeg');? $image = new Imagick('1.jpg');? $image->levelImage(4,4,4);? echo $image;? ?>? 例子2:?
代码如下:
?
<?php? ini_set('display_errors',1);? header('Content-type: image/jpeg');? $image = new Imagick('1.jpg');? $image->levelImage(200,200,imagick::CHANNEL_GREEN);? echo $image;? ?>? magnifyImage( void )?
代码如下:
<?php? ini_set('display_errors',1);? header('Content-type: image/jpeg');? $image = new Imagick('1.jpg');? $image->magnifyImage ();? echo $image;? ?>? medianFilterImage ( float $radius )? 功能:特是的滤镜 有点像photoshop 调色刀滤镜?
代码如下:
<?php? ini_set('display_errors',220)");? $image->medianFilterImage(5);? echo $image;? ?>? minifyImage(void)?? 功能:图小缩小一倍(Scales an image proportionally to half its size)? 例子:?
代码如下:
<?php? ini_set('display_errors',1);? header('Content-type: image/jpeg');? $image = new Imagick('1.jpg');? $image->minifyImage();? echo $image;? ?>? modulateImage ( float $brightness,float $saturation,float $hue )? 功能:控制调整图像的 亮度、饱和度、色调.? 参数说明:? float $brightness: 亮度? float $saturation :饱和度? float $hue 色调? 例子1:?
代码如下:
<?php? ini_set('display_errors',1);? header('Content-type: image/jpeg');? $image = new Imagick('1.jpg');? $image->modulateImage(100,100);? echo $image;? ?>? 例子2:
代码如下:
<?php? ini_set('display_errors',1);? header('Content-type: image/jpeg');? $image = new Imagick('1.jpg');? $image->modulateImage(250,250);? echo $image;? ?>? motionBlurImagemotionBlurImage ( float $radius,float $sigma,float $angle [,int $channel= Imagick::CHANNEL_DEFAULT ] )? 功能:模拟运动模糊(Simulates motion blur),类似photoshop的动感模糊滤镜功能? 参数说明:? float $radius: 高斯 半径,不包过中心像素.? float $sigma:标准偏差的高斯,以像素为单位.【重要参数】? float $angle:模糊角度.? int $channel:图像颜色模式.默认为 Imagick::CHANNEL_DEFAULT? 例子1:?
代码如下:
<?php? ini_set('display_errors',220)");? $image->motionBlurImage (61,10);? echo $image;? ?>? 例子2:?
代码如下:
? ??<?php? ini_set('display_errors',220)");? $image->motionBlurImage (201,100);? echo $image;? ?>? oilPaintImage ( float $radius ):? 功能说明: 模拟油画滤镜(Simulates an oil painting)? 例子:?
代码如下:
<?php? ini_set('display_errors',220)");? $image->oilPaintImage(1);? echo $image;? ?> radialBlurImage ( float $angle [,int $channel= Imagick::CHANNEL_ALL ] )? 功能: 径向模糊(Radial blurs an image)?
代码如下:
<?php? ini_set('display_errors',220)");? $image->radialBlurImage(30);? echo $image;? ?>? raiseImage ( int $width,int $y,bool $raise )?
代码如下:
<?php? ini_set('display_errors',220)");? $image->raiseImage(10,3,6);? echo $image;? ?>? 附1:要求缩小图片尺寸、增加半透明边框,读入exif信息,按指定要求显示在图片上
代码如下:
$towidth = '500';? $toheight = '700'; //设置图片调整大小时允许的最大宽度和高度? $sourcefile = './b.jpg'; //定义一个图像文件路径? //$image->writeImage('./b.jpg.bak'); //可以备份这个图片? $myimage = new Imagick( $sourcefile ); //读入该图像文件? $exifobject = my_exif( $myimage ); //自写函数,读取exif信息(拍摄数据),按自己的要求排列exif信息,返回对象? //$myimage->setImageFormat('jpeg'); //把图片转为jpg格式? $myimage->setCompressionQuality( 100 ); //设置jpg压缩质量,1 - 100? $myimage->enhanceImage(); //去噪点? $sourcewidth = $myimage->getImageWidth(); //获取读入图像原始大小? if ( $sourcewidth > $towidth )? {? ? $myimage->scaleImage( $towidth,$toheight,true ); //调整图片大小? }? $myimage->raiseImage( 8,8,1 ); //加半透明边框? $resizewidth = $myimage->getImageWidth(); //读出调整之后的图片大小? $resizeheight = $myimage->getImageHeight();? $drawback = new ImagickDraw(); //实例化一个绘画对象,绘制半透明黑色背景给exif信息用? $drawback->setFillColor( new ImagickPixel('#000000') ); //设置填充颜色为黑色? $drawback->setFillOpacity( 0.6 ); //填充透明度为0.6,参数0.1-1,1为不透明? $drawback->rectangle( $resizewidth / 2 - 190,$resizeheight - 50,$resizewidth / 2 + 190,$resizeheight - 12 ); //绘制矩形参数,分别为左上角x、y,右下角x、y? $myimage->drawImage( $drawback ); //确认到image中绘制该矩形框? $draw = new ImagickDraw(); //实例化一个绘画对象,绘制exif文本信息嵌入图片中? $draw->setFont( './xianhei.ttf' ); //设置文本字体,要求ttf或者ttc字体,可以绝对或者相对路径? $draw->setFontSize( 11 ); //设置字号? $draw->setTextAlignment( 2 ); //文字对齐方式,2为居中? $draw->setFillColor( '#FFFFFF' ); //文字填充颜色? $myimage->annotateImage( $draw,$resizewidth / 2,$resizeheight - 39,$exifobject->row1 ); //绘制第一行文本,居中? $myimage->annotateImage( $draw,$resizeheight - 27,$exifobject->row2 ); //绘制第二行文本,$resizeheight - 15,$exifobject->row3 ); //绘制第三行文本,居中? /* Output the image with headers */? header( 'Content-type: image/jpeg' ); //php文件输出mime类型为jpeg图片? echo $myimage; //在当前php页面输出图片? //$image->writeImage('./b.new.jpg'); //如果图片不需要在当前php程序中输出,使用写入图片到磁盘函数,上面的设置header也可以去除? $myimage->clear();? $myimage->destroy(); //释放资源? //自写函数,读取exif信息,返回对象? function my_exif( $myimage )? {? ? $exifArray = array( 'exif:Model' => '未知','exif:DateTimeOriginal' => '未知','exif:ExposureProgram' => '未知','exif:FNumber' => '0/10','exif:ExposureTime' => '0/10','exif:ISOSpeedRatings' => '未知',? ??? 'exif:MeteringMode' => '未知','exif:Flash' => '关闭闪光灯','exif:FocalLength' => '未知','exif:ExifImageWidth' => '未知','exif:ExifImageLength' => '未知' ); //初始化部分信息,防止无法读取照片exif信息时运算发生错误? ? $exifArray = $myimage->getImageProperties( "exif:*" ); //读取图片的exif信息,存入$exifArray数组? ? //如果需要显示原数组可以使用print_r($exifArray);? ? $r->row1 = '相机:' . $exifArray['exif:Model'];? ? $r->row1 = $r->row1 . ' 拍摄时间:' . $exifArray['exif:DateTimeOriginal'];? ? switch ( $exifArray['exif:ExposureProgram'] )? ? {? ??? case 1:? ????? $exifArray['exif:ExposureProgram'] = "手动(M)";? ????? break; //Manual Control? ??? case 2:? ????? $exifArray['exif:ExposureProgram'] = "程序自动(P)";? ????? break; //Program Normal? ??? case 3:? ????? $exifArray['exif:ExposureProgram'] = "光圈优先(A,Av)";? ????? break; //Aperture Priority? ??? case 4:? ????? $exifArray['exif:ExposureProgram'] = "快门优先(S,Tv)";? ????? break; //Shutter Priority? ??? case 5:? ????? $exifArray['exif:ExposureProgram'] = "慢速快门";? ????? break; //Program Creative (Slow Program)? ??? case 6:? ????? $exifArray['exif:ExposureProgram'] = "运动模式";? ????? break; //Program Action(High-Speed Program)? ??? case 7:? ????? $exifArray['exif:ExposureProgram'] = "人像";? ????? break; //Portrait? ??? case 8:? ????? $exifArray['exif:ExposureProgram'] = "风景";? ????? break; //Landscape? ??? default:? ????? $exifArray['exif:ExposureProgram'] = "其它";? ? }? ? $r->row1 = $r->row1 . ' 模式:' . $exifArray['exif:ExposureProgram'];? ? $exifArray['exif:FNumber'] = explode( '/',$exifArray['exif:FNumber'] );? ? $exifArray['exif:FNumber'] = $exifArray['exif:FNumber'][0] / $exifArray['exif:FNumber'][1];? ? $r->row2 = '光圈:F/' . $exifArray['exif:FNumber'];? ? $exifArray['exif:ExposureTime'] = explode( '/',$exifArray['exif:ExposureTime'] );? ? if ( ($exifArray['exif:ExposureTime'][0] / $exifArray['exif:ExposureTime'][1]) >= 1 )? ? {? ??? $exifArray['exif:ExposureTime'] = sprintf( "%.1fs",(float)$exifArray['exif:ExposureTime'][0] / $exifArray['exif:ExposureTime'][1] );? ? } else? ? {? ??? $exifArray['exif:ExposureTime'] = sprintf( "1/%ds",$exifArray['exif:ExposureTime'][1] / $exifArray['exif:ExposureTime'][0] );? ? }? ? $r->row2 = $r->row2 . ' 快门:' . $exifArray['exif:ExposureTime'];? ? $r->row2 = $r->row2 . ' ISO:' . $exifArray['exif:ISOSpeedRatings'];? ? $exifArray['exif:ExposureBiasValue'] = explode( "/",$exifArray['exif:ExposureBiasValue'] );? ? $exifArray['exif:ExposureBiasValue'] = sprintf( "%1.1feV",((float)$exifArray['exif:ExposureBiasValue'][0] / $exifArray['exif:ExposureBiasValue'][1] * 100) / 100 );? ? if ( (float)$exifArray['exif:ExposureBiasValue'] > 0 )? ? {? ??? $exifArray['exif:ExposureBiasValue'] = "+" . $exifArray['exif:ExposureBiasValue'];? ? }? ? $r->row2 = $r->row2 . ' 补偿:' . $exifArray['exif:ExposureBiasValue'];? ? switch ( $exifArray['exif:MeteringMode'] )? ? {? ??? case 0:? ????? $exifArray['exif:MeteringMode'] = "未知";? ????? break;? ??? case 1:? ????? $exifArray['exif:MeteringMode'] = "矩阵";? ????? break;? ??? case 2:? ????? $exifArray['exif:MeteringMode'] = "中央重点平均";? ????? break;? ??? case 3:? ????? $exifArray['exif:MeteringMode'] = "点测光";? ????? break;? ??? case 4:? ????? $exifArray['exif:MeteringMode'] = "多点测光";? ????? break;? ??? default:? ????? $exifArray['exif:MeteringMode'] = "其它";? ? }? ? $r->row2 = $r->row2 . ' 测光:' . $exifArray['exif:MeteringMode'];? ? switch ( $exifArray['exif:Flash'] )? ? {? ??? case 1:? ????? $exifArray['exif:Flash'] = "开启闪光灯";? ????? break;? ? }? ? $r->row2 = $r->row2 . ' ' . $exifArray['exif:Flash'];? ? if ( $exifArray['exif:FocalLengthIn35mmFilm'] )? ? {? ??? $r->row3 = '等效焦距:' . $exifArray['exif:FocalLengthIn35mmFilm'] . "mm";? ? } else? ? {? ??? $exifArray['exif:FocalLength'] = explode( "/",$exifArray['exif:FocalLength'] );? ??? $exifArray['exif:FocalLength'] = sprintf( "%4.1fmm",(double)$exifArray['exif:FocalLength'][0] / $exifArray['exif:FocalLength'][1] );? ??? $r->row3 = '焦距:' . $exifArray['exif:FocalLength'];? ? }? ? $r->row3 = $r->row3 . ' 原始像素:' . $exifArray['exif:ExifImageWidth'] . 'x' . $exifArray['exif:ExifImageLength'] . 'px';? ? if ( $exifArray['exif:Software'] )? ? {? ??? $r->row3 = $r->row3 . ' 后期:' . $exifArray['exif:Software'];? ? }? ? return $r;? } 附2:处理图片水印PHP编程
代码如下:
<?php? //获取水印图片? $logo = new Imagick("logo.png");? $logo->setImageResolution(0.01,0.03);? ? //创建一个Imagick对象,同时获取要处理的源图? $im = new Imagick( "old_large_img_2.jpg" );? ? //获取源图片宽和高? $srcWH = $im->getImageGeometry();? ? //图片等比例缩放宽和高设置? if($srcWH['width']>710){? $srcW['width'] = 710;? $srcH['height'] = $srcW['width']/$srcWH['width']*$srcWH['height'];? }else{? $srcW['width'] = $srcWH['width'];? $srcH['height'] = $srcWH['height'];? }? ? //依照比例进行缩放? $im->thumbnailImage( $srcW['width'],$srcH['height'],true );? ? // 依照缩略图大小创建一个有颜色的图片? $canvas = new Imagick();? $canvas->newImage( $srcW['width'],'black','jpg' ); //pink,black? ? //添加水印? $im->compositeImage($logo,Imagick::COMPOSITE_OVER,$srcW['width']-280,$srcH['height']-77);? $canvas->setcompressionquality(91);? //合并图片? $canvas->compositeImage( $im,imagick::COMPOSITE_OVER,0);? ? //输出图片? header( "Content-Type: image/jpg" );? echo $canvas;??? ? //生成图片? $canvas->writeImage( "test_img/old_large_img_2_96.jpg" );? ?>? 《:PHP中使用Imagick实现各种图片效果实例》是否对您有启发,欢迎查看更多与《:PHP中使用Imagick实现各种图片效果实例》相关教程,学精学透。编程之家 52php.cn为您提供精彩教程。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |