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

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

Jul 13, 2016 am 10:46 AM
image imagick php カット できる 写真 増加 成し遂げる 回転させる 特殊効果 移行 研ぐ

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 をインストールします


yum インストール 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インストール

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

拡張子=imagick.so

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

サービスhttpdの再起動


3. ケース
1.枠線処理

コードは次のとおりです コードをコピー
//www.bKjia.c0m によります
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.サムネイルを作成して表示します

コードは次のとおりです コードをコピー
<?php
header('Content-type: image/jpeg');
$image = 新しい Imagick('image.jpg');
// 幅または高さのパラメータとして 0 が指定された場合、// アスペクト比は維持されます
$image->thumbnailImage(100, 0);
エコー $image;
?>

2. ディレクトリにサムネイルを作成して保存します

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

<?php
$images = new Imagick(glob('images/*.JPG'));
foreach($images as $image) {
// 0 を指定すると、thumbnailImage がアスペクト比を維持するように強制されます
$image->thumbnailImage(1024,0);
}
$images->writeImages();
?>

3. サムネイルGIFアニメーション

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

<?php
/* 新しい 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);
?>

それでは本題に入ります

例1

サムネイルのトリミング/生成/透かしの追加、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

代码如下 复制幣

<?php

クラスlib_image_imagick
{
 プライベート $image = null;
 private $type = null;

// 构造関数数
 パブリック関数 __construct(){}


 // 分析构関数数
 パブリック関数 __destruct()
 {
     if($this->image!==null) $this->image->destroy();
 }

// 画像をダウンロード
 パブリック関数オープン($path)
 {
  $this->image = 新しい Imagick( $path );
  if($this->image)
  {
      $this->type = strto lower($this->image->getImageFormat());
  }
  $this->image;
を返す  }
 

パブリック関数 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     
     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 と正確には等しくありません 'scale_fill': セーフティ ボックス内で画像を比例的に拡大縮小します $width , 透明度) 透明度 (0 不透明-127 完全透明))
その他: スマート モードでは、画像を拡大縮小し、画像の $width X $height ピクセル サイズの中央部分を読み込むことができます
$fit = 'force','scale','scale_fill'の場合: 完全な画像を出力します
$fit = 画像の向きの値の場合、指定された位置に画像の一部を出力します
文字と画像の対応関係は以下の通りです

北西北北東

西中東

南西南南東

*/
パブリック関数size_to($width = 100, $height = 100, $fit = 'center', $fill_color = array(255,255,255,0) )
{

スイッチ($fit)
{
ケース「力」:
If($this->type=='gif')
{
$image = $this->image;
$canvas = new 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['height'];
            
                $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 を $frame)
                 {
                     $frame->thumbnailImage( $width, $height, true );

$draw = new ImagickDraw();
                        $draw->composite($frame->getImageCompose(), $x, $y, $dst_width, $dst_height, $frame);

$img = new 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 = new 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)
             {
        ケース「北西」:
            $crop_x = 0;
            $crop_y = 0;
            休憩;
           ケース「北」:
               $crop_x = intval( ($src_width-$crop_w)/2 );
               $crop_y = 0;
               休憩;
           ケース「北東」:
               $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 );
               休憩;
           ケース「南西」:
               $crop_x = 0;
               $crop_y = $src_height-$crop_h;
               休憩;
           ケース「南」:
               $crop_x = intval( ($src_width-$crop_w)/2 );
               $crop_y = $src_height-$crop_h;
               休憩;
           ケース「南東」:
               $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 = new 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 を $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 = new 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()
 {
  return $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' または颜色单词 'white'/'red'...
 */
 public function 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();} // 垂直反転

}

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/632949.html技術記事 PHP が ImageMagick 関数を呼び出せるようにする PHP 拡張機能。この拡張機能を使用すると、PHP に ImageMagick と同じ機能を持たせることができます。 ImageMagick は強力で安定した無料のツールです...
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットな記事タグ

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド

CakePHP の日付と時刻 CakePHP の日付と時刻 Sep 10, 2024 pm 05:27 PM

CakePHP の日付と時刻

CakePHP プロジェクトの構成 CakePHP プロジェクトの構成 Sep 10, 2024 pm 05:25 PM

CakePHP プロジェクトの構成

CakePHP ファイルのアップロード CakePHP ファイルのアップロード Sep 10, 2024 pm 05:27 PM

CakePHP ファイルのアップロード

CakePHP ルーティング CakePHP ルーティング Sep 10, 2024 pm 05:25 PM

CakePHP ルーティング

CakePHP について話し合う CakePHP について話し合う Sep 10, 2024 pm 05:28 PM

CakePHP について話し合う

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 Dec 20, 2024 am 11:31 AM

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法

CakePHP クイックガイド CakePHP クイックガイド Sep 10, 2024 pm 05:27 PM

CakePHP クイックガイド

See all articles