天天看点

PHP中Imagick类的使用

 PHP中Imagick类,提供了比GD库函数更为方便和强大的图片处理功能。          <?php function contrast($type, $apply, $src, $dst, $w=0, $h=0, $x=0, $y=0, $f=true) {  if($type)   $s = 9;  else   $s = 0;  if($f)   $image = new Imagick($src);  else   $image = $src;  if($apply)  {   $region = $image->getImageRegion($w, $h, $x, $y);   $region->contrastImage($s);   $image->compositeImage($region, $region->getImageCompose(), $x, $y);   $region->destroy();  }  else   $image->contrastImage($s);  $image->writeImage($dst);  $image->destroy(); } function text($text, $color, $size, $font, $type=false, $src='') {  $font = "include/font/" . $font . ".ttf";  $draw = new ImagickDraw();  $draw->setGravity( Imagick::GRAVITY_CENTER );  $draw->setFont($font);  $draw->setFontSize($size);  $draw->setFillColor( new ImagickPixel($color) );  $im = new imagick();  $properties = $im->queryFontMetrics( $draw, $text );  $im->newImage( intval($properties['textWidth']+5), intval($properties['textHeight']+5), new ImagickPixel('transparent') );  $im->setImageFormat('png');  $im->annotateImage($draw, 0, 0, 0, $text);  if($type)  {   $im->writeImage($src);   return $src;  }  else   return $im; } function mark($text, $color, $size, $font, $src, $dst, $x, $y) {  $im = text($text, $color, $size, $font);  $image = new Imagick($src);  $image->compositeImage($im, Imagick::COMPOSITE_OVER, $x, $y);  $image->writeImage($dst);  $im->destroy();  $image->destroy(); } function gaussianblur($radius, $apply, $src, $dst, $x=0, $y=0, $w=0, $h=0) {  if($apply && $x==0 && $y==0 && $w==0 && $h==0)   $apply = false;  $image = new Imagick($src);  if($apply)  {   $region = $image->getImageRegion($w, $h, $x, $y);   $region->blurImage($radius, $radius);   $image->compositeImage($region, $region->getImageCompose(), $x, $y);   $region->destroy();  }  else   $image->blurImage($radius, $radius);  $image->writeImage($dst);  $image->destroy(); } function sharpen($radius, $apply, $src, $dst, $x=0, $y=0, $w=0, $h=0) {  if($apply && $x==0 && $y==0 && $w==0 && $h==0)   $apply = false;  $image = new Imagick($src);  if($apply)  {   $region = $image->getImageRegion($w, $h, $x, $y);   $region->sharpenImage($radius, $radius);   $image->compositeImage($region, $region->getImageCompose(), $x, $y);   $region->destroy();  }  else   $image->sharpenImage($radius, $radius);  $image->writeImage($dst);  $image->destroy(); } function raise($raise, $apply, $src, $dst, $x=0, $y=0, $w=0, $h=0) {  if($apply && $x==0 && $y==0 && $w==0 && $h==0)   $apply = false;  $image = new Imagick($src);  if($apply)  {   if($w > (2*$raise) && $h > (2*$raise))   {    $region = $image->getImageRegion($w, $h, $x, $y);    $region->raiseImage($raise, $raise, 0, 0, true);    $image->compositeImage($region, $region->getImageCompose(), $x, $y);    $region->destroy();   }  }  else  {   $info = $image->getImageGeometry();   if($info["width"] > (2*$raise) && $info["height"] > (2*$raise))   {    $image->raiseImage($raise, $raise, 0, 0, true);   }  }  $image->writeImage($dst);  $image->destroy(); } function frame($frame_width, $frame_height, $bevel, $color, $apply, $src, $dst, $x=0, $y=0, $w=0, $h=0) {  if($apply && $x==0 && $y==0 && $w==0 && $h==0)   $apply = false;  $image = new Imagick($src);  $framecolor = new ImagickPixel($color);  if($apply)  {   $region = $image->getImageRegion($w, $h, $x, $y);   $region->frameImage($framecolor, $frame_width, $frame_height, $bevel, $bevel);   $image->compositeImage($region, $region->getImageCompose(), $x, $y);   $region->destroy();  }  else   $image->frameImage($framecolor, $frame_width, $frame_height, $bevel, $bevel);  $image->writeImage($dst);  $framecolor->destroy();  $image->destroy(); } function oilpaint($radius, $apply, $src, $dst, $x=0, $y=0, $w=0, $h=0) {  if($apply && $x==0 && $y==0 && $w==0 && $h==0)   $apply = false;  $image = new Imagick($src);  if($apply)  {   $region = $image->getImageRegion($w, $h, $x, $y);   $region->oilPaintImage($radius);   $image->compositeImage($region, $region->getImageCompose(), $x, $y);   $region->destroy();  }  else   $image->oilPaintImage($radius);  $image->writeImage($dst);  $image->destroy(); } function spread($radius, $apply, $src, $dst, $x=0, $y=0, $w=0, $h=0) {  if($apply && $x==0 && $y==0 && $w==0 && $h==0)   $apply = false;  $image = new Imagick($src);  if($apply)  {   $region = $image->getImageRegion($w, $h, $x, $y);   $region->spreadImage($radius);   $image->compositeImage($region, $region->getImageCompose(), $x, $y);   $region->destroy();  }  else   $image->spreadImage($radius);  $image->writeImage($dst);  $image->destroy(); } function polaroidEffect($src, $dst, $color, $angle=0) {  if(abs($angle) != 15)  {   $srcs = array($src, $src, $src, $src);   $bg = new ImagickDraw();   $images = new Imagick($srcs);   $format = $images->getImageFormat();   $maxwidth = 0;   $maxheight = 0;   foreach($images as $key => $im)   {    $im->setImageFormat("png");    $im->setImageBackgroundColor( new ImagickPixel("black") );    $angle = mt_rand(-20, 20);    if($angle == 0)     $angle = -1;    $im->polaroidImage($bg, $angle);    $info = $im->getImageGeometry();    $maxwidth = max($maxwidth, $info["width"]);    $maxheight = max($maxheight, $info["height"]);   }   $image = new Imagick();   $image->newImage($maxwidth, $maxheight, new ImagickPixel($color));   foreach($images as $key => $im)   {    $image->compositeImage($im, $im->getImageCompose(), 0, 0);   }   $image->setImageFormat($format);   $bg->destroy();   $images->destroy();  }  else  {   $image = new Imagick($src);   $format = $image->getImageFormat();   $image->frameImage(new ImagickPixel("white"), 6, 6, 0, 0);   $image->frameImage(new ImagickPixel("gray"), 1, 1, 0, 0);   $image->setImageFormat("png");   $shadow = $image->clone();   $shadow->setImageBackgroundColor( new ImagickPixel("black") );   $shadow->shadowImage(50, 3, 0, 0);   $shadow->compositeImage($image, $image->getImageCompose(), 0, 0);   $shadow->rotateImage(new ImagickPixel($color), $angle);   $info = $shadow->getImageGeometry();       $image->destroy();   $image = new Imagick();   $image->newImage($info["width"], $info["height"], new ImagickPixel($color));   $image->compositeImage($shadow, $shadow->getImageCompose(), 0, 0);   $image->setImageFormat($format);   $shadow->destroy();  }  $image->writeImage($dst);  $image->destroy(); } function brushpng($src, $dst, $color, $size, $brushpath) {  $image = new Imagick($src);  $info = $image->getImageGeometry();  $image->destroy();  if(file_exists($dst))   $image = new Imagick($dst);  else  {   $image = new Imagick();   $image->newImage($info["width"], $info["height"], "transparent", "png");   //$image->setImageFormat("png");  }  $draw = new ImagickDraw();  $pixel = new ImagickPixel();  $pixel->setColor("transparent");  $draw->setFillColor($pixel);  $pixel->setColor($color);  $draw->setStrokeColor($pixel);  $draw->setStrokeWidth($size);  $draw->setStrokeLineCap(imagick::LINECAP_ROUND);  $draw->setStrokeLineJoin(imagick::LINEJOIN_ROUND);  $draw->polyline($brushpath);  $image->drawImage($draw);  $image->writeImage($dst);  $pixel->destroy();  $draw->destroy();  $image->destroy(); } function dobrush($src, $dst, $png) {  $image = new Imagick($src);  if(file_exists($png))  {   $imagepng = new Imagick($png);   $imagepng->setImageFormat("png");   $image->compositeImage($imagepng, $imagepng->getImageCompose(), 0, 0);   $imagepng->destroy();  }  $image->writeImage($dst);  $image->destroy(); } function rotate($src, $dst, $angle) {  $image = new Imagick($src);  $image->rotateImage(new ImagickPixel(), $angle);  $image->writeImage($dst);  $image->destroy(); } function brightness($src, $dst, $n, $s_x=0, $e_x=0, $s_y=0, $e_y=0, $type=true) {  $im = new Imagick($src);  $info = $im->getImageGeometry();  $w = $info["width"];  $h = $info["height"];  $format = $im->getImageFormat();    if($s_x == 0 && $s_y == 0 && $e_x == 0 && $e_y == 0)  {   $e_x = $w;   $e_y = $h;  }  $image = new Imagick();  $image->newImage($w, $h, "transparent");  $draw = new ImagickDraw();  for($x=0; $x<$w; $x++)  {   for($y=0; $y<$h; $y++)   {    $p = $im->getImagePixelColor($x, $y);    $rgb = $p->getColor();    if( $x>=$s_x && $x<$e_x && $y>=$s_y && $y<$e_y )    {     $rgb["r"] = $rgb["r"]+$rgb["r"]*$n;                 $rgb["g"] = $rgb["g"]+$rgb["g"]*$n;                 $rgb["b"] = $rgb["b"]+$rgb["b"]*$n;                 $rgb["r"] = min(255, $rgb["r"]);                 $rgb["r"] = max(0, $rgb["r"]);                 $rgb["g"] = min(255, $rgb["g"]);                 $rgb["g"] = max(0, $rgb["g"]);                 $rgb["b"] = min(255, $rgb["b"]);                 $rgb["b"] = max(0, $rgb["b"]);    }    $p->setColor("rgb({$rgb["r"]},{$rgb["g"]},{$rgb["b"]})");    $draw->setFillColor($p);    $draw->point($x, $y);   }  }  $image->drawImage($draw);  $image->setImageFormat($format);  if($type)   $image->writeImage($dst);  else   return $image; } function grayscale($src, $dst, $apply, $x=0, $y=0, $w=0, $h=0) {  if($apply && $x==0 && $y==0 && $w==0 && $h==0)   $apply = false;  $image = new Imagick($src);  if($apply)  {   $region = $image->getImageRegion($w, $h, $x, $y);   $clone = $region->clone();   $clone = $region->fximage('p{0,0}');   $region->compositeImage($clone, imagick::COMPOSITE_DIFFERENCE,0,0);   $region->modulateImage(100, 0 , 0);   $image->compositeImage($region, $region->getImageCompose(), $x, $y);  }  else  {   $clone = $image->clone();   $clone = $image->clone();   $clone = $image->fximage('p{0,0}');   $image->compositeImage($clone,imagick::COMPOSITE_DIFFERENCE,0,0);   $image->modulateImage(100, 0 , 0);  }  $image->writeImage($dst);  $image->clear();  $image->destroy(); } function prequality($src, $dst, $q) {  exec("convert -quality {$q} {$src} {$dst}"); } ?>