PHPはimagick拡張に基づいて合成画像を実現する2つの方法【imagick拡張ダウンロード付】

4659 ワード

この例では、PHPがimagick拡張に基づいて合成ピクチャを実現する2つの方法について説明する.皆さんの参考にしてください.具体的には以下の通りです.
方法1:compositeimages

/**
* function:     
* @param string   $output_url       
* @param string   $img_type        
* @param integral  $line_num          
* @param array    $logo_info           (        )
* @param array    $img_list           
*
* @return void
*/
public function generate($output_url, $img_type, $line_num, $logo_info, $img_list=array()) {
    //        
    $lines = ceil(count($img_list)/$line_num);
    $bg_width = ($logo_info['width'] + $logo_info['line_width']) * $line_num;
    $bg_height = ($logo_info['height'] + $logo_info['line_height']) * $lines;
    //    
    $canvas = new Imagick();
    $canvas->newimage($bg_width, $bg_height, 'white');
    $canvas->setimageformat($img_type);
    $i = $j = 0;
    foreach ($img_list as $item) {
      $im = new Imagick($item);
      $x = $logo_info['line_width']*2 + $i * $logo_info['width'];
      $y = $logo_info['line_height']*2 + $j * $logo_info['height'];
      // $canvas->compositeimage($im -> getimage(), Imagick::COMPOSITE_OVER, $x, $y);
      $canvas -> compositeimage($im, $im->getImageCompose(), $x, $y);
      if (($i + 1) % $line_num === 0) {
        $i = 0;
        $j++;
      } else {
        $i++;
      }
      // unset($im);
      $im -> destroy();
    }
    $canvas->writeimage($output_url);
    //    
    $canvas -> destroy();
}


方法2:combineimages

/**
* function:     
* @param string   $output_url       
* @param string   $img_type        
* @param integral  $line_num          
* @param array    $logo_info           (        )
* @param array    $img_list           
*
* @return void
*/
public function generate($output_url, $img_type, $line_num, $logo_info, $img_list=array()) {
    //        
    $lines = ceil(count($img_list)/$line_num);
    $bg_width = ($logo_info['width'] + $logo_info['line_width']) * $line_num;
    $bg_height = ($logo_info['height'] + $logo_info['line_height']) * $lines;
    //    
    $canvas = null;
    $canvas = new Imagick();
    $canvas -> newimage($bg_width, $bg_height, 'white');
    $i = $j = 0;
    foreach ($img_list as $item) {
      $im = null;
      $im = new Imagick($item);
      // $canvas -> readImage($item);
      $canvas -> addimage($im);
      $im -> clear();
      $im -> destroy();
    }
    // $canvas -> flattenImages();
    $canvas -> combineImages( Imagick::CHANNEL_ALL );
    $canvas -> writeimage($output_url);
    //    
    $canvas -> clear();
    $canvas -> destroy();
}


個人的には方法の二効率が高いと思います
附:windows下php 5.2.17とphp 5.3.18とphp 5.4.8各バージョンのimagickコンポーネントのダウンロード
1、PHP5.2.17私はインストールに成功しました.星外PHP 5を使っています.2.17直接インストールプログラム、imagickバージョンをダウンロードするのは以下の通りです.
ここをクリックして当駅でダウンロードします.
すでにimagemagickが含まれています.何もインストールする必要はありません.php_imagick_st-Q16.dllをc:phpextディレクトリにコピーしてphp.ini拡張に追加:extension=php_imagick_st-Q16.dllの最も簡単で緑色の方法ps:php_などもありますimagick_st-Q8.dll(8色)、php_imagick_dyn-Q16.dll(imagemagickをインストールする必要がある)は彼らを管理する必要はありません
PHP5.2.17当駅のダウンロードアドレス:
32位://www.jb 51.net/softs/26087.html
64ビット://www.jb 51.net/softs/479475.html
2、PHP5.3.18 imagemagickをインストールする必要があります.使用可能な単一ファイルdllはありません.
1)公式ダウンロードアドレス:
http://www.imagemagick.org/download/binaries/ImageMagick-6.8.0-4-Q16-windows-dll.exe
2)あなたのphpインストールモードに従ってphpをダウンロードします.imagick
スレッドのセキュリティ:
ここをクリックして当駅でダウンロードします.
c:phpextディレクトリにコピーし、拡張子を追加します.たとえば、extension=php_imagick_nts.dll
3、PHP5.4.8 imagemagickが使用可能な単一ファイルdllをインストールする必要があります
1)公式ダウンロードアドレス:
http://www.imagemagick.org/download/binaries/ImageMagick-6.8.0-4-Q16-windows-dll.exe
2)あなたのPHPインストールモードによってphpをダウンロードします.imagick
スレッドなしのセキュリティ:
ここをクリックして当駅でダウンロードします.
c:phpextディレクトリにコピーし、拡張子を追加します.たとえば、extension=php_imagick.dll
以上のインストールは本人がテストしたもので、iisまたはApacheサーバを再起動し、phpinfoを確認してimagickがないかどうかを確認します.権限を確認するか、もう一度やり直してください.
PHPに関する詳細について興味のある読者は、「PHP図形と画像操作技術要約」、「phpオブジェクト向けプログラム設計入門チュートリアル」、「PHP配列(Array)操作技術大全」、「php文字列(string)用法総括」、「PHP数学演算技術総括」を参照してください.
ここで述べたことが皆さんのPHPプログラム設計に役立つことを願っています.