/**- * 画像ズーム透かしクラス
- *
- */
- class cls_photo
- {
- protected $waterrate = 0.2; //画像上の透かしアイコンの比率
- protected $width = 300; //サムネイルのデフォルトの幅
- protected $height = 200; // サムネイルのデフォルトの高さ
- protected $padding = 5; // ウォーターマーク画像から端までの距離
- protected $water_mark = "./water.png";
- protected $water_mark_pos = 5;ウォーターマーク画像の位置 ( 1= 左上隅、2= 右上隅、3= 左下隅、4= 右下隅、5 中央)
- protected $watermode = 0; // サムネイル 1 がウォーターマークを印刷する場合、0 はウォーターマークを印刷しません。 when サムネイル
- protected $magick_handle; // 画像操作ハンドル
- protected $format = array ( 'jpg', 'gif', 'png', 'jpeg' ); // 画像ファイル形式の制限
- protected $smallpic_mode = 2; / デフォルトモード 0 は生成されません サムネイル、1 はクロップスケーリング、2 はプロポーショナルスケーリング、3 はスケーリングフィルモードです
-
- /**
- * 画像パラメータを設定します
- *
- * @param $arg 画像パラメータは次のように配列に複数回入れることができます
- * @param $protected パラメータ値
- * array(
- * 'waterrate'=>0.2,
- * ' Water_mark '=>'./water.png',
- * 'water_mark_pos'=>4,
- * 'smallpic_mode'=>1
- * );
- * @return ture/false
- */
- public function set_args ( $arg,$val="" )
- {
- $params = array ( 'waterrate','water_mark','water_mark_pos','smallpic_mode','watermode','width','height' );
- if ( is_array ( $arg ) )
- {
- foreach ( $ arg as $k => ;$v )
- {
- if ( in_array ( $k,$params ) )
- {
- $this->$k = $v;
- }
- }
- }
- else
- {
- if ( empty ( $val ) )
- {
- return false;
- }
- else
- {
- if ( in_array ( $arg,$params ) )
- {
- $this->$arg = $val;
- }
- }
- }
- return true;
- }
-
- /**
- * 画像のスケーリング
- *
- * @param $src_file ソースファイルパス
- * @param $dst_file 宛先ファイルパス
- * @return サムネイル画像パス/false
- */
- public functionscale ( $src_file,$dst_file="" )
- {
- $dst_width = $this->width;
- $dst_height = $this ->height;
- $mode = $this->smallpic_mode;
- $magic_water_handle = NewMagickWand();
- if ( !MagicReadImage ( $magic_water_handle, $src_file ) ) return false;
-
- //Type
- $srcext = strto lower ( MagickGetImageFormat ( $magic_water_handle ) );
- if ( $srcext=='bmp' )
- {
- $srcext = 'jpeg';
- }
- if ( !in_array ( $srcext,$this->format ) ) return false ;
- //サイズ
- $src_width = MagickGetImageWidth ( $magic_water_handle );
- $src_height = MagickGetImageHeight ( $magic_water_handle );
-
- // トリミングズームモード
- if ( $mode == 1 )
- {
- $pos_x=$pos_y = 0; //トリミング 一時的な位置をカット
- $src_widthc = $src_width;//一時的な幅をカット
- $src_heightc = $src_height;//一時的な高さをカット
- if ( $src_width/$src_height>$dst_width/$dst_height )
- {
- $src_widthc = $ SRC_HEIGHT*$ dst_width /$ dst_height;
- $ POS_X = ($ src_width-$ src_widthc) /2; $ POS_Y = ($ SRC_HEIGHT -$src_heightc ) /2;
- }
- $magic_water_handle,$src_widthc,$src_heightc,$pos_x,$pos_y );//Crop
- //MagickCropImage 関数の後、Gif 画像は変更されますが、キャンバスは変更されないためです
- $ this->magick_handle = NewMagickWand();
- MagickNewImage ( $this->magick_handle,$src_widthc,$src_heightc,'#ffffff' );
- MagickSetFormat ( $this->magick_handle,$srcext );
- MagickCompositeImage ( $this->magick_handle,$magic_water_handle,MW_OverCompositeOp) ,0,0 );
- //Scale
- MagickScaleImage ( $this->magick_handle, $dst_width, $dst_height );
-
- }
- //比例スケーリングモード
- if ( $mode == 2 )
- {
- if ( $src_width/$src_height>$dst_width/$dst_height )
- {
- $dst_height=$dst_width*$src_height/$src_width;
- }
- else
- {
- $dst_width=$dst_height * $src_width/$src_height;
- }
- $ this->magick_handle=$magic_water_handle;//置換
- MagickScaleImage ( $this->magick_handle, $dst_width, $dst_height );//Scale
- }
- // スケールフィルモード
- if ( $mode == 3 )
- {
- if ( $src_width/$src_height>$dst_width/$dst_height )
- {
- $dst_heightc=$dst_width*$src_height/$src_width;
- $dst_widthc=$dst_width;
- }
- else
- {
- $dst_widthc=$dst_height *$src_width/$src_height;
- $dst_heightc=$dst_height;
- }
- MagickScaleImage ( $magic_water_handle, $dst_widthc, $dst_heightc );//缩放
- $this->magick_handle = NewMagickWand();
- MagickNewImage ( $this->magick_handle,$dst_width,$dst_height,$this->smallpic_bgcolor );
- MagickSetFormat ( $this->magick_handle,$srcext );
- MagickCompositeImage ( $this->magick_handle,$magic_water_handle,MW_OverCompositeOp, ( $dst_width-$dst_widthc ) /2, ( $dst_height-$dst_heightc ) /2 );
- }
- //打水印
- if ( $this->watermode == 1 )
- {
- $this->set_mark();
- }
- if ( empty ( $dst_file ) )
- {
- //建立時文件
- $dst_file = tempnam ( $_SERVER["SINASRV_CACHE_DIR"],"TMP_IMG" );
- }
- MagickWriteImage ( $this->magick_handle, $dst_file );
- return $dst_file;
- }
-
- /**
- * Watermarking
- *
- * @param $src_file ウォーターマークを入れる画像のパス
- * @param $dst_file ウォーターマークを生成するファイルの保存パス 空の場合、ランダムな一時ファイルが生成されます
- * @returnウォーターマークファイルのパス/false
- */
- public function Water_mark ( $src_file,$dst_file="" )
- {
- $this->magick_handle = NewMagickWand();
- if ( !MagickReadImage ( $this->magick_handle, $src_file ) )
- return false;
- $this->set_mark();
- if ( empty ( $dst_file ) )
- {
- //建立時文件
- $dst_file = tempnam ( $_SERVER["SINASRV_CACHE_DIR"],"TMP_IMG" );
- }
- MagickWriteImage ( $this->magick_handle, $dst_file );
- return $dst_file;
- }
-
- /**
- * 内部インターフェース
- * 透かし画像
- *
- */
- protected function set_mark()
- {
-
- //尺寸
- $dst_width = MagickGetImageWidth ( $this->magick_handle );
- $dst_height = MagickGetImageHeight ( $this->magick_handle );
- //处理水印图
- if ( $this->water_mark && is_file ( $this->water_mark ) )
- {
- $magic_water_handle = NewMagickWand();
- MagickRemoveImage ( $magic_water_handle );
- if ( MagickReadImage ( $magic_water_handle, $this->water_mark ) )
- {
- MagickScaleImage ( $magic_water_handle, $dst_width*$this->waterrate , $dst_width*$this->waterrate*MagickGetImageHeight ( $magic_water_handle ) /MagickGetImageWidth ( $magic_water_handle ) );//缩放水印に写真の1/5
- if ( $this->water_mark_pos == 1 )
- {
- $left = $this->padding;
- $top = $this->padding;
- }
- elseif ( $this->water_mark_pos == 2 )
- {
- $left = $dst_width-$this-> padding-MagickGetImageWidth ( $magic_water_handle );
- $top = $this->padding;
- }
- elseif ( $this->water_mark_pos == 3 )
- {
- $left = $this->padding;
- $top = $dst_height -$this->padding-MagickGetImageHeight ( $magic_water_handle );
- }
- elseif ( $this->water_mark_pos == 4 )
- {
- $left = $dst_width-$this->padding-MagickGetImageWidth ( $magic_water_handle );
- $top =$dst_height -$this->padding-MagickGetImageHeight ( $magic_water_handle );
- }
- elseif ( $this->water_mark_pos == 5 )
- {
- $left = ( $dst_width-MagickGetImageWidth ( $magic_water_handle ) ) /2;
- $top = ( $dst_height -MagickGetImageHeight ( $magic_water_handle ) ) /2;
- }
- MagickCompositeImage ( $this->magick_handle,$magic_water_handle,MW_OverCompositeOp,$left,$top );
- }
- }
- }
- }
复制代
|