ホームページ  >  記事  >  バックエンド開発  >  画像の切り取り、回転、シャープ化、減色、特殊効果の追加を実現する php_imagick メソッド、_PHP チュートリアル

画像の切り取り、回転、シャープ化、減色、特殊効果の追加を実現する php_imagick メソッド、_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 10:11:31701ブラウズ

php_imagick は、画像の切り取り、回転、シャープ化、減色、または特殊効果の追加を実現するメソッドです。

この記事の例では、php_imagick が画像の切り取り、回転、シャープ化、減色、または特殊効果の追加をどのように実現できるかを説明します。参考のためにみんなで共有してください。具体的な分析は次のとおりです:

PHP で ImageMagick 関数を呼び出せるようにする PHP 拡張機能。この拡張機能を使用すると、PHP に ImageMagick と同じ機能を持たせることができます。

ImageMagick は、強力で安定した無料のツールセットおよび開発パッケージであり、一般的な TIFF、JPEG、GIF、PNG、PDF、PhotoCD などの形式を含む 185 を超える基本形式の画像ファイルの読み取り、書き込み、処理に使用できます。 ImageMagick を使用すると、Web アプリケーションのニーズに応じて画像を動的に生成したり、画像 (または画像のグループ) にサイズの変更、回転、鮮明化、減色、特殊効果の追加を行うこともできます。同じ形式で保存することも、別の形式で保存することもできます。

php_imagick は、PHP 画像処理用の拡張パッケージで、サイズの変更、回転、シャープ化、色の減算、画像への特殊効果の追加などの操作を実行できます。

1. Imagick 拡張機能を Windows にインストールします:

1. ImageMagickをダウンロードしてインストールします

http://image_magick.veidrodis.com/image_magick/binaries/ImageMagick-6.6.2-10-Q16-windows-dll.exe

2. php_imagick.dllをダウンロードします

http://valokuva.org/outside-blog-content/imagick-windows-builds/php53/imagick-2.3.0-dev/vc9_nts/php_imagick.dll

スレッドセーフなphpを使用している場合は、ダウンロードしてください

http://valokuva.org/outside-blog-content/imagick-windows-builds/php53/imagick-2.3.0-dev/vc9_zts/php_imagick.dll

3.設定

php.iniを追加

extension=php_imagick.dll、Webサーバーを再起動します

2. Linux に Imagick 拡張機能をインストールします:

1.yum ImageMagickをインストールします

ImageMagick ImageMagick-devel をインストールします

2. インストールが成功したかどうかをテストします

バージョン変換

3. imagick 拡張機能をインストールします

01.wget http://pecl.php.net/get/imagick-3.1.0RC2.tgz02.tar xzvf imagick-3.1.0RC2.tgz03.cd imagick-3.1.0RC204.phpize05../configure06.make07.make install

4. php.ini ファイルを編集し、ファイルの最後に次のコードを追加します

拡張子=imagick.so

5.Apacheサーバーを再起動します

サービスhttpdの再起動

3. ケース

1.枠線処理

コードをコピーします コードは次のとおりです:
header('Content-type: image/jpeg'); $image = 新しい Imagick('test.jpg'); $color=new ImagickPixel(); $color->setColor("rgb(220,220,220)"); $image->borderImage($color,5,4); $image->blurImage(5,5,imagick::CHANNEL_GREEN); エコー $image;

まずは簡単な例を見てみましょう

php_imagickプログラム例

1.サムネイルを作成して表示します

コードをコピーします
コードは次のとおりです:

header('コンテンツタイプ: 画像/jpeg'); $image = 新しい Imagick('image.jpg'); // 幅または高さのパラメータとして 0 が指定された場合、// アスペクト比は維持されます $image->サムネイル画像(100, 0); エコー $image ?>
2. ディレクトリにサムネイルを作成して保存します




コードをコピーします
コードは次のとおりです:
$images = 新しい Imagick(glob('images/*.JPG')); foreach($images as $image) { // 0 を指定すると、thumbnailImage がアスペクト比を維持するように強制されます
$image->サムネイル画像(1024,0); } $images->writeImages(); ?> 3. サムネイルGIFアニメーション



コードをコピーします

コードは次のとおりです:

/* 新しい imagick オブジェクトを作成し、GIF で読み込みます */
$im = 新しい Imagick("example.gif"); /* すべてのフレームのサイズを変更します */ foreach ($im を $frame として) {
/* 50x50 フレーム */
$frame->サムネイル画像(50, 50); /* 仮想キャンバスを正しいサイズに設定します */
$frame->setImagePage(50, 50, 0, 0); }/* writeImage の代わりに writeImages に注意してください */ $im->writeImages("example_small.gif", true); ?> では本題に入ります
例:

サムネイルのトリミング/生成/透かしの追加、GIF の自動検出と処理

呼び出し方法:



コードをコピーします

コードは次のとおりです:
「imagick.class.php」をインクルードします。 
$image = 新しい lib_image_imagick(); 
$image->open('a.gif'); 
$image->resize_to(100, 100, 'scale_fill'); 
$image->add_text('1024i.com', 10, 20); 
$image->add_watermark('1024i.gif', 10, 50); 
$image->save_to('x.gif');
imagick.class.php

クラス lib_image_imagick
{
 プライベート $image = null; 
 プライベート $type = null; 
 // 构造関数数
 パブリック関数 __construct(){}
 
 // 分析构関数数
 パブリック関数 __destruct()
 {
     if($this->image!==null) $this->image->destroy();  
 }
 // 画像をダウンロード
 パブリック関数 open($path)
 {
  $this->image = new Imagick( $path ); 
  if($this->image)
  {
      $this->type = strto lower($this->image->getImageFormat()); 
  }
  $this->画像を返します; 
 }
  
 パブリック関数 Crop($x=0, $y=0, $width=null, $height=null)
 {
     if($width==null) $width = $this->image->getImageWidth()-$x; 
     if($height==null) $height = $this->image->getImageHeight()-$y; 
     if($width<=0 || $height<=0) return; 
      
     if($this->type=='gif')
     {
            $image = $this->image; 
         $canvas = 新しい Imagick(); 
          
         $images = $image->coalesceImages(); 
         foreach($images as $frame){
             $img = 新しい Imagick(); 
             $img->readImageBlob($frame); 
                $img->cropImage($width, $height, $x, $y); 
                $canvas->addImage( $img ); 
                $canvas->setImageDelay( $img->getImageDelay() ); 
                $canvas->setImagePage($width, $height, 0, 0); 
            }
             
            $image->destroy(); 
         $this->image = $canvas; 
     }
     それ以外は
     {
         $this->image->cropImage($width, $height, $x, $y); 
     }
 }
 /*
 * 画像サイズを変更
 $fit: 适应大小方式
 'force': 图片强制变形成 $width X $height 大小
 'scale': 按比在安全框 $width X $height 内放图片、出放後图像大小不完全等的 $width X $height
 'scale_fill': 安全框 $width X $height 内放圃图片、安全框内に像素のない場所の充填色、このパラメータを使用すると設定可能な背景充填色 $bg_color = array(255,255,255)(红,绿,蓝、透明度) 透明度(0不透明-127完全透明))
 その他: 智能モ能 放图画像并ダウンロード取图画像中部分 $width X $height 像素大小
 $fit = 'force','scale','scale_fill' 時: 输出完整画像
 $fit = 画像方位值時, 出指定位置部分画像
 文字と画像の対応関係は次のとおりです:
  
 北西 北 北東
  
 西 中央 東
  
 南西 南 南東
  
 */
 public function raise_to($width = 100, $height = 100, $fit = 'center', $fill_color = array(255,255,255,0) )
 {
      
     スイッチ($fit)
     {
         ケース「力」:
             if($this->type=='gif')
             {
                 $image = $this->image; 
                 $canvas = 新しい Imagick(); 
                  
                 $images = $image->coalesceImages(); 
                 foreach($images as $frame){
                     $img = 新しい Imagick(); 
                     $img->readImageBlob($frame); 
                        $img->thumbnailImage( $width, $height, false ); 
                        $canvas->addImage( $img ); 
                        $canvas->setImageDelay( $img->getImageDelay() ); 
                    }
                    $image->destroy(); 
                 $this->image = $canvas; 
             }
             それ以外は
             {
                 $this->image->thumbnailImage( $width, $height, false ); 
             }
             壊す; 
         ケース「スケール」:
             if($this->type=='gif')
             {
                 $image = $this->image; 
                 $images = $image->coalesceImages(); 
                 $canvas = 新しい Imagick(); 
                 foreach($images as $frame){
                     $img = 新しい Imagick(); 
                     $img->readImageBlob($frame); 
                        $img->thumbnailImage( $width, $height, true ); 
                        $canvas->addImage( $img ); 
                        $canvas->setImageDelay( $img->getImageDelay() ); 
                    }
                    $image->destroy(); 
                 $this->image = $canvas; 
             }
             それ以外は
             {
                 $this->image->thumbnailImage( $width, $height, true ); 
             }
             壊す; 
         ケース「scale_fill」:
             $size = $this->image->getImagePage();  
             $src_width = $size['width']; 
             $src_height = $size['高さ']; 
              
                $x = 0; 
                $y = 0; 
                 
                $dst_width = $width; 
                $dst_height = $height; 
    if($src_width*$height > $src_height*$width)
    {
     $dst_height = intval($width*$src_height/$src_width); 
     $y = intval( ($height-$dst_height)/2 ); 
    }
    それ以外は
    {
     $dst_width = intval($height*$src_width/$src_height); 
     $x = intval( ($width-$dst_width)/2 ); 
    }
                $image = $this->image; 
                $canvas = 新しい Imagick(); 
                 
                $color = 'rgba('.$fill_color[0].','.$fill_color[1].','.$fill_color[2].','.$fill_color[3].')'; 
             if($this->type=='gif')
             {
                 $images = $image->coalesceImages(); 
                 foreach($images as $frame)
                 {
                     $frame->thumbnailImage( $width, $height, true ); 
                     $draw = 新しい ImagickDraw(); 
                        $draw->composite($frame->getImageCompose(), $x, $y, $dst_width, $dst_height, $frame); 
                        $img = 新しい Imagick(); 
                        $img->newImage($width, $height, $color, 'gif'); 
                        $img->drawImage($draw); 
                        $canvas->addImage( $img ); 
                        $canvas->setImageDelay( $img->getImageDelay() ); 
                        $canvas->setImagePage($width, $height, 0, 0); 
                    }
             }
             それ以外は
             {
                 $image->thumbnailImage( $width, $height, true ); 
                  
                 $draw = 新しい ImagickDraw(); 
                    $draw->composite($image->getImageCompose(), $x, $y, $dst_width, $dst_height, $image); 
                     
                 $canvas->newImage($width, $height, $color, $this->get_type() ); 
                    $canvas->drawImage($draw); 
                    $canvas->setImagePage($width, $height, 0, 0); 
             }
             $image->destroy(); 
             $this->image = $canvas; 
             壊す; 
   デフォルト:
    $size = $this->image->getImagePage();  
       $src_width = $size['width']; 
             $src_height = $size['高さ']; 
              
                $crop_x = 0; 
                $crop_y = 0; 
                 
                $crop_w = $src_width; 
                $crop_h = $src_height; 
                 
          if($src_width*$height > $src_height*$width)
    {
     $crop_w = intval($src_height*$width/$height); 
    }
    それ以外は
    {
        $crop_h = intval($src_width*$height/$width); 
    }
                 
       スイッチ($fit)
             {
        ケース「north_west」:
            $crop_x = 0; 
            $crop_y = 0; 
            壊す; 
           「北」の場合:
               $crop_x = intval( ($src_width-$crop_w)/2 ); 
               $crop_y = 0; 
               壊す; 
           ケース「north_east」:
               $crop_x = $src_width-$crop_w; 
               $crop_y = 0; 
               壊す; 
           ケース「西」:
               $crop_x = 0; 
               $crop_y = intval( ($src_height-$crop_h)/2 ); 
               壊す; 
           ケース「センター」:
               $crop_x = intval( ($src_width-$crop_w)/2 ); 
               $crop_y = intval( ($src_height-$crop_h)/2 ); 
               壊す; 
           ケース「東」:
               $crop_x = $src_width-$crop_w; 
               $crop_y = intval( ($src_height-$crop_h)/2 ); 
               壊す; 
           ケース「south_west」:
               $crop_x = 0; 
               $crop_y = $src_height-$crop_h; 
               壊す; 
           ケース「南」:
               $crop_x = intval( ($src_width-$crop_w)/2 ); 
               $crop_y = $src_height-$crop_h; 
               壊す; 
           ケース「south_east」:
               $crop_x = $src_width-$crop_w; 
               $crop_y = $src_height-$crop_h; 
               壊す; 
           デフォルト:
               $crop_x = intval( ($src_width-$crop_w)/2 ); 
               $crop_y = intval( ($src_height-$crop_h)/2 ); 
             }
              
             $image = $this->image; 
             $canvas = 新しい Imagick(); 
              
          if($this->type=='gif')
             {
                 $images = $image->coalesceImages(); 
                 foreach($images as $frame){
                     $img = 新しい Imagick(); 
                     $img->readImageBlob($frame); 
                        $img->cropImage($crop_w, $crop_h, $crop_x, $crop_y); 
                        $img->thumbnailImage( $width, $height, true ); 
                         
                        $canvas->addImage( $img ); 
                        $canvas->setImageDelay( $img->getImageDelay() ); 
                        $canvas->setImagePage($width, $height, 0, 0); 
                    }
             }
             それ以外は
             {
                 $image->cropImage($crop_w, $crop_h, $crop_x, $crop_y); 
                 $image->thumbnailImage( $width, $height, true ); 
                 $canvas->addImage( $image ); 
                 $canvas->setImagePage($width, $height, 0, 0); 
             }
             $image->destroy(); 
             $this->image = $canvas; 
     }
      
 }
  
 // 追加水印图片
 パブリック関数 add_watermark($path, $x = 0, $y = 0)
 {
        $watermark = 新しい Imagick($path); 
        $draw = 新しい ImagickDraw(); 
        $draw->composite($watermark->getImageCompose(), $x, $y, $watermark->getImageWidth(), $watermark->getimageheight(), $watermark); 
     if($this->type=='gif')
     {
         $image = $this->image; 
            $canvas = 新しい Imagick(); 
         $images = $image->coalesceImages(); 
         foreach($image as $frame)
         {
                $img = 新しい Imagick(); 
             $img->readImageBlob($frame); 
                $img->drawImage($draw); 
                 
                $canvas->addImage( $img ); 
                $canvas->setImageDelay( $img->getImageDelay() ); 
            }
            $image->destroy(); 
         $this->image = $canvas; 
     }
     それ以外は
     {
         $this->image->drawImage($draw); 
     }
 }
  
 // 追加水印文字
 パブリック関数 add_text($text, $x = 0 , $y = 0, $angle=0, $style=array())
 {
        $draw = 新しい ImagickDraw(); 
        if(isset($style['font'])) $draw->setFont($style['font']); 
        if(isset($style['font_size'])) $draw->setFontSize($style['font_size']); 
     if(isset($style['fill_color'])) $draw->setFillColor($style['fill_color']); 
     if(isset($style['under_color'])) $draw->setTextUnderColor($style['under_color']); 
      
     if($this->type=='gif')
     {
         foreach($this->image as $frame)
         {
             $frame->annotateImage($draw, $x, $y, $angle, $text); 
         }
     }
     それ以外は
     {
         $this->image->annotateImage($draw, $x, $y, $angle, $text); 
     }
 }
  
 // 保存まで指定経路
 パブリック関数 save_to( $path )
 {
     if($this->type=='gif')
     {
         $this->image->writeImages($path, true); 
     }
     それ以外は
     {
         $this->image->writeImage($path); 
     }
 }
 // 出射画像
 パブリック関数出力($header = true)
 {
     if($header) header('Content-type: '.$this->type); 
     echo $this->image->getImagesBlob();   
 }
  
 パブリック関数 get_width()
 {
        $size = $this->image->getImagePage();  
        $size['width'] を返します; 
 }
  
 パブリック関数 get_height()
 {
     $size = $this->image->getImagePage();  
        $size['高さ'] を返します。 
 }
 // 設置画像の種類、默认とソースの種類が一致
 パブリック関数 set_type( $type='png' )
 {
     $this->type = $type; 
        $this->image->setImageFormat( $type ); 
 }
 // 获取源画像类型
 パブリック関数 get_type()
 {
  $this->typeを返します; 
 }
 
 //現在のオブジェクトが写真であるかどうか
 パブリック関数 is_image()
 {
  if( $this->image )
   true を返します。 
  それ以外は
   false を返します。 
 }
 
 public function sumnail($width = 100, $height = 100, $fit = true){ $this->image->thumbnailImage( $width, $height, $fit );} // 缩略図の生成 $fit真時間は比率を維持して安全框 $width X $height 内で生成缩略画像
 /*
 追加一边框
 $width: 左右边框宽度
 $height: 上下边框宽度
$color: カラー: RGB カラー 'rgb(255,0,0)' または 16 進数のカラー '#FF0000' またはカラーワード '白'/'赤'...
*/
パブリック関数 border($width, $height, $color='rgb(220, 220, 220)')
{
$color=new ImagickPixel(); $color->setColor($color); $this->image->borderImage($color, $width, $height); }

public function Blur($radius, $sigma){$this->image->blurImage($radius, $sigma);} // ぼかし
public function gaussian_blur($radius, $sigma){$this->image->gaussianBlurImage($radius, $sigma);} // ガウスぼかし
public function motion_blur($radius, $sigma, $angle){$this->image->motionBlurImage($radius, $sigma, $angle);} // モーション ブラー
public function radio_blur($radius){$this->image->radialBlurImage($radius);} // 放射状のブラー
public function add_noise($type=null){$this->image->addNoiseImage($type==null?imagick::NOISE_IMPULSE:$type);} // ノイズを追加します

public function level($black_point, $gamma, $white_point){$this->image->levelImage($black_point, $gamma, $white_point);} // カラーレベルを調整します
public function modulate($brightness, $saturation, $hue){$this->image->modulateImage($brightness, $saturation, $hue);} // 明るさ、彩度、色相を調整します
public function Charcoal($radius, $sigma){$this->image->charcoalImage($radius, $sigma);} // スケッチ
public functionoil_paint($radius){$this->image->oilPaintImage($radius);} // 油絵効果

public function flop(){$this->image->flopImage();} // 水平方向に反転します
public function flick(){$this->image->flipImage();} // 垂直方向の反転
}


この記事で説明した内容が皆様の PHP プログラミング設計に役立つことを願っています。

http://www.bkjia.com/PHPjc/928233.html

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/928233.html技術記事 php_imagick を使用して画像をカット、回転、シャープ、減色、または特殊効果を追加する方法 この記事では、php_imagick が画像にカット、回転、シャープ、減色、または特殊効果を追加する方法について説明します。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。