您好,欢迎访问一九零五行业门户网

php使用imagick模块实现图片缩放、裁剪、压缩示例

这篇文章主要介绍了php使用imagick模块实现图片缩放、裁剪、压缩示例,需要的朋友可以参考下
php 使用imagick模块 缩放,,裁剪,压缩图片 包括gif图片
缩放 裁剪
复制代码 代码如下:
/**
  * 图片裁剪
  * 裁剪规则:
  *   1. 高度为空或为零   按宽度缩放 高度自适应
  *   2. 宽度为空或为零  按高度缩放 宽度自适应
  *      3. 宽度,高度到不为空或为零  按宽高比例等比例缩放裁剪  默认从头部居中裁剪
  * @param number $width
  * @param number $height
  */
 public function resize($width=0, $height=0){
  if($width==0 && $height==0){
   return;
  }
$color = '';// 'rgba(255,255,255,1)';
  $size = $this->image->getimagepage ();
  //原始宽高
  $src_width = $size ['width'];
  $src_height = $size ['height'];
//按宽度缩放 高度自适应
  if($width!=0 && $height==0){
   if($src_width>$width){
    $height = intval($width*$src_height/$src_width);
if ($this->type == 'gif') {
     $this->_resizegif($width, $height);
    }else{
     $this->image->thumbnailimage ( $width, $height, true );
    }
   }
   return;
  }
  //按高度缩放 宽度自适应
  if($width==0 && $height!=0){
   if($src_height>$height){
    $width = intval($src_width*$height/$src_height);
if ($this->type == 'gif') {
     $this->_resizegif($width, $height);
    }else{
     $this->image->thumbnailimage ( $width, $height, true );
    }
   }
   return;
  }
//缩放的后的尺寸
  $crop_w = $width;
  $crop_h = $height;
//缩放后裁剪的位置
  $crop_x = 0;
  $crop_y = 0;
if(($src_width/$src_height)    //宽高比例小于目标宽高比例  宽度等比例放大      按目标高度从头部截取
   $crop_h = intval($src_height*$width/$src_width);
   //从顶部裁剪  不用计算 $crop_y
  }else{
   //宽高比例大于目标宽高比例   高度等比例放大      按目标宽度居中裁剪
   $crop_w = intval($src_width*$height/$src_height);
   $crop_x = intval(($crop_w-$width)/2);
  }
if ($this->type == 'gif') {
   $this->_resizegif($crop_w, $crop_h, true, $width, $height,$crop_x, $crop_y);
  } else {
   $this->image->thumbnailimage ( $crop_w, $crop_h, true );
   $this->image->cropimage($width, $height,$crop_x, $crop_y);
  }
 }
针对gif图片的处理方法
复制代码 代码如下:
/**
  * 处理gif图片 需要对每一帧图片处理
  * @param unknown $t_w  缩放宽
  * @param unknown $t_h  缩放高
  * @param string $iscrop  是否裁剪
  * @param number $c_w  裁剪宽
  * @param number $c_h  裁剪高
  * @param number $c_x  裁剪坐标 x
  * @param number $c_y  裁剪坐标 y
  */
 private function _resizegif($t_w, $t_h, $iscrop=false, $c_w=0, $c_h=0, $c_x=0, $c_y=0){
  $dest = new imagick();
  $color_transparent = new imagickpixel(transparent); //透明色
  foreach($this->image as $img){
   $page = $img->getimagepage();
   $tmp = new imagick();
   $tmp->newimage($page['width'], $page['height'], $color_transparent, 'gif');
   $tmp->compositeimage($img, imagick::composite_over, $page['x'], $page['y']);
$tmp->thumbnailimage ( $t_w, $t_h, true );
   if($iscrop){
    $tmp->cropimage($c_w, $c_h, $c_x, $c_y);
   }
$dest->addimage($tmp);
   $dest->setimagepage($tmp->getimagewidth(), $tmp->getimageheight(), 0, 0);
   $dest->setimagedelay($img->getimagedelay());
   $dest->setimagedispose($img->getimagedispose());
}
  $this->image->destroy ();
  $this->image = $dest;
 }
保存时压缩处理
复制代码 代码如下:
// 保存到指定路径
 public function save_to($path) {
  //压缩图片质量
  $this->image->setimageformat('jpeg');
  $this->image->setimagecompression(imagick::compression_jpeg);
  $a = $this->image->getimagecompressionquality() * 0.60;
  if ($a == 0) {
   $a = 60;
  }
  $this->image->setimagecompressionquality($a);
  $this->image->stripimage();
if ($this->type == 'gif') {
   $this->image->writeimages ( $path, true );
  } else {
   $this->image->writeimage ( $path );
  }
 }
imagickservice.php
复制代码 代码如下:
其它类似信息

推荐信息