画像処理機能機能:ズーム、カット、フォトフレーム、ウォーターマーク、シャープ、回転、反転、透明度、色の反転、処理と履歴の保存アイデア:画像が変更されたときに新しい画像を自動的に生成、名前付け方法手順の追加を検討できます元の画像に基づきます。例: 画像名 + __ どのステップ。 高度な画像処理機能を必要とする一部の Web アプリケーションでは、このクラスを参照できます。
- /*
- 画像処理機能機能:ズーム、カット、フォトフレーム、透かし、シャープ、回転、反転、透明度、色反転
- 処理と履歴保存の考え方:ある場合a picture 変更を加えると、新しいピクチャーが自動的に生成されます。名前付け方法では、元のピクチャーに基づいてステップを追加することを検討できます。例: ピクチャー名 + __ ステップ
- */
- class picture
- {
- var $PICTURE_URL;//To be処理された画像
- var $DEST_URL="temp__01.jpg";//ターゲット画像の場所を生成します
- var $PICTURE_CREATE;//作成される画像
- var $TURE_COLOR;// 新しいトゥルーカラー画像を作成します
-
- var $PICTURE_WIDTH ;// 元の画像の幅
- var $PICTURE_HEIGHT;// 元の画像の高さ
-
- /*
- 透かしのタイプ、デフォルトは透かしテキストです
- */
- var $MARK_TYPE=1;
- var $WORD;// UTF-以降8 テキスト
- var $WORD_X; // テキストの横軸
- var $FONT_TYPE; // フォントの種類
- var $FONT_WORD;
- var $ANGLE=0;//テキストの角度、デフォルトは0です
- var $FONT_COLOR="#000000";//テキストの色
- var $FONT_PATH="font/simkai.ttf";//フォントライブラリ、デフォルト宋代です
- var $FORCE_URL;//ウォーターマーク画像
- var $FORCE_X=0;//ウォーターマークの横座標
- var $FORCE_Y=0;//ウォーターマークの垂直座標
- var $FORCE_START_X=0;//透かし入り画像の水平軸 座標
- var $FORCE_START_Y=0;//透かしが切り取られる画像の垂直座標
-
- var $PICTURE_TYPE;//画像タイプ
- var $PICTURE_MIME;// 出力ヘッダー
-
- / *
- スケーリング率が 1 の場合、ズームの高さと幅を押します。 ZOOM_HEIGHT;//ズームの高さ
-
- /*
- クロップ、比例的かつ固定長さと幅
- */
- var $CUT_TYPE=1;//カットタイプ
- var $CUT_X=0;//クロップの横座標
- var $CUT_Y= 0;//トリミング カットの座標
- var $CUT_;//カットの幅
- var $CUT_HEIGHT=100;//カットの高さ
-
- /*
- シャープ化
- */
- var $SHARP= "7.0";//シャープな変形度
-
- /*
- 透明処理
- */
- var $ALPHA='100';//透明度は0〜127です
- var $ALPHA_X="90";
- var $ALPHA_Y ="50";
-
- /*
- 任意の角度で回転
- */
- var $CIRCUMROTATE="90.0";//浮動小数点数である必要があることに注意してください
-
- /*
- エラーメッセージ
- */
- var $ ERROR=array(
- 'unalviable'=> '関連する画像が見つかりません!'
- );
-
- /*
- コンストラクター: 関数の初期化
- */
- function __construct($PICTURE_URL)
- {
- $this->get_info( $PICTURE_URL);
- }
-
- function get_info ($PICTURE_URL)
- {
- /*
- 元の画像の情報を処理し、まず画像が存在するかどうかを確認し、存在しない場合は対応する情報を提供します
- */
- @$ SIZE=getimagesize($PICTURE_URL);
- if(!$SIZE )
- {
- exit($this->ERROR['unalviable']);
- }
-
- //画像の情報の種類、幅、高さを取得します。元の画像
- $this->PICTURE_MIME=$SIZE['mime'] ;
- $this->PICTURE_;
- $this->PICTURE_HEIGHT=$SIZE[1];
-
- //画像を作成
- switch($ SIZE[2])
- {
- ケース 1:
- $this->PICTURE_CREATE=imagecreatefromgif($PICTURE_URL);
- $this->PICTURE_TYPE="imagejpeg";
- $this->PICTURE_EXT="jpg";
- ブレーク;
- ケース 2:
- $this->PICTURE_CREATE=imagecreatefromjpeg($ PICTURE_URL);
- $this->PICTURE_TYPE="imagegif";
- $this->PICTURE_EXT="gif";
- ブレーク;
- ケース 3 :
- $this->PICTURE_CREATE=imagecreatefrompng($PICTURE_URL);
- $this->PICTURE_TYPE="imagepng";
- $this->PICTURE_EXT="png";
- ブレーク;
- }
-
- /*
- 変換テキストの色を 16 進数から 10 進数に変換します
- */
- preg_match_all(" /([0-f]){2,2}/i",$this->FONT_COLOR,$MATCHES);
- if(count($MATCHES)= =3)
- {
- $this->RED= hexdec($MATCHES[0][0]);
- $this->GREEN=hexdec($MATCHES[0][1]);
- $this-> ;BLUE=hexdec($MATCHES[0][2] );
- }
- }
-
- #end of __construct
-
- /*
- 16 進数の色を 10 進数 (R, G, B) に変換します
- */
- function hex2dec()
- {
- preg_match_all(" /([0-f]){2,2}/i",$this->FONT_COLOR,$MATCHES);
- if(count($MATCHES)==3)
- {
- $ this->RED= hexdec($MATCHES[0][0]);
- $this->GREEN=hexdec($MATCHES[0][1]);
- $this->BLUE=hexdec($MATCHES [0][2] );
- }
- }
-
- //ズームタイプ
- functionzoom_type($ZOOM_TYPE)
- {
- $this->ZOOM=$ZOOM_TYPE;
- }
-
- //画像をズームします。高さと幅が指定されていない場合は、ズームされます
- functionzoom( )
- {
- //ズームサイズ
- if($this->ZOOM==0)
- {
- $this->ZOOM_;gt;PICTURE_WIDTH * $this->ZOOM_MULTIPLE;
- $this-> ;ZOOM_HEIGHT =$this->PICTURE_HEIGHT * $this->ZOOM_MULTIPLE;
- }
- //新しいトゥルーカラー画像を作成します
- $this->TRUE_COLOR=imagecreatetruecolor($this->ZOOM_WIDTH,$this-> ZOOM_HEIGHT) ;
- $WHITE=imagecolorallocate($this->TRUE_COLOR,255,255,255);
- imagefilledrectangle($this->TRUE_COLOR,0,0,$this->ZOOM_WIDTH,$this->ZOOM_HEIGHT,$WHITE) ;
- imagecopyresize($this->TRUE_COLOR,$this->PICTURE_CREATE,0,0,0,0,$this->ZOOM_WIDTH,$this->ZOOM_HEIGHT,$this->PICTURE_WIDTH,$this- > PICTURE_HEIGHT);
- }
-
- #ズーム終了
- // 座標に従って、または自動的に画像を切り抜きます
- function Cut()
- {
- $this->TRUE_COLOR=imagecreatetruecolor($this->CUT_WIDTH,$ this->CUT_WIDTH);
- imagecopy($this->TRUE_COLOR,$this->PICTURE_CREATE, 0, 0, $this->CUT_X, $this->CUT_Y,$this->CUT_WIDTH,$ this-> ;CUT_HEIGHT);
- }
-
- #カット終了
- /*
- 画像にテキストまたは画像を配置します
- 透かしテキスト
- */
- function _mark_text()
- {
- $this->TRUE_COLOR=imagecreatetruecolor($ this-> ;PICTURE_WIDTH,$this->PICTURE_HEIGHT);
- $this->WORD=mb_convert_encoding($this->FONT_WORD,'utf-8','gb2312');
- /*
- 次を使用してテキストを取得しますTrueType フォント範囲
- */
- $TEMP = imagettfbbox($this->FONT_SIZE,0,$this->FONT_PATH,$this->WORD);
- $WORD_LENGTH=strlen($this->WORD);
- $ WORD_WIDTH =$TEMP[2] - $TEMP[6];
- $WORD_HEIGHT =$TEMP[3] - $TEMP[7];
- /*
- テキスト透かしのデフォルトの位置は右下隅です
- * /
- if($this ->WORD_X=="")
- {
- $this->WORD_X=$this->PICTURE_WIDTH-$WORD_WIDTH;
- }
- if($this->WORD_Y=="" )
- {
- $this ->WORD_Y=$this->PICTURE_HEIGHT-$WORD_HEIGHT;
- }
- imagesettile($this->TRUE_COLOR,$this->PICTURE_CREATE);
- imagefilledrectangle($this->TRUE_COLOR) ,0,0,$ this->PICTURE_WIDTH,$this->PICTURE_HEIGHT,IMG_COLOR_TILED);
- $TEXT2=imagecolorallocate($this->TRUE_COLOR,$this->RED,$this->GREEN,$ this->Blue) ;
- imagettftext($this->TRUE_COLOR,$this->FONT_SIZE,$this->ANGLE,$this->WORD_X,$this->WORD_Y,$TEXT2,$this ->FONT_PATH,$ this->WORD);
- }
-
- /*
- ウォーターマーク画像
- */
- function _mark_picture()
- {
- /*
- ウォーターマーク画像情報を取得
- */
- @$SIZE=getimagesize( $this-> FORCE_URL);
- if(!$SIZE)
- {
- exit($this->ERROR['unalviable']);
- }
- $FORCE_PICTURE_;
- $FORCE_PICTURE_HEIGHT=$SIZE[1];
- //ウォーターマーク画像を作成します
- switch($SIZE[2])
- {
- case 1:
- $FORCE_PICTURE_CREATE=imagecreatefromgif($this->FORCE_URL);
- $FORCE_PICTURE_TYPE="gif";
- Break;
- case 2:
- $FORCE_PICTURE_CREATE=imagecreatefromjpeg( $this->FORCE_URL);
- $FORCE_PICTURE_TYPE="jpg";
- ブレーク;
- ケース 3:
- $FORCE_PICTURE_CREATE=imagecreatefrompng($this->FORCE_URL);
- $FORCE_PICTURE_TYPE="png";
- Break;
- }
- /*
- ウォーターマーク画像のサイズを決定し、ターゲット画像のサイズを生成します。ウォーターマークが画像より大きい場合、生成される画像のサイズはウォーターマーク画像のサイズになります。それ以外の場合、生成される画像のサイズは元の画像サイズになります。
- */
- $this->NEW_PICTURE=$this->PICTURE_CREATE;
- if($FORCE_PICTURE_WIDTH>$this->PICTURE_WIDTH)
- {
- $CREATE_;gt;FORCE_START_X;
- }
- else
- {
- $CREATE _ ;gt;PICTURE_WIDTH;
- }
-
- if($FORCE_PICTURE_HEIGHT>$this->PICTURE_HEIGHT)
- {
- $CREATE_HEIGHT=$FORCE_PICTURE_HEIGHT-$this->FORCE_START_Y;
- }
- else
- {
- $CREATE_HEIGHT=$this- >PICTURE_HEIGHT;
- }
- /*
- 创建一画布
- */
- $NEW_PICTURE_CREATE=imagecreatetruecolor($CREATE_WIDTH,$CREATE_HEIGHT);
- $WHITE=imagecolorallocate($NEW_PICTURE_CREATE,255,255,255);
- /*
- 将背景画像サンプル贝到画布中
- */
- imagecopy($NEW_PICTURE_CREATE, $this->PICTURE_CREATE, 0, 0, 0, 0,$this->PICTURE_WIDTH,$this->PICTURE_HEIGHT);
-
- /*
- 将目标图片コピー贝背景画像上
- */
- imagecopy($NEW_PICTURE_CREATE, $FORCE_PICTURE_CREATE, $this->FORCE_X, $this->FORCE_Y, $this->FORCE_START_X, $this->FORCE_START_Y,$FORCE_PICTURE_WIDTH,$FORCE_PICTURE_HEそう) ;
- $this->TRUE_COLOR=$NEW_PICTURE_CREATE;
- }
- #マークの終わり
-
- function alpha_()
- {
- $this->TRUE_COLOR=imagecreatetruecolor($this->PICTURE_WIDTH,$this->PICTURE_HEIGHT );
- $rgb="#CDCDCD";
- $tran_color="#000000";
- for($j=0;$j<=$this->PICTURE_HEIGHT-1;$j++)
- {
- for ($ i=0;$i<=$this->PICTURE_WIDTH-1;$i++)
- {
- $rgb = imagecolorat($this->PICTURE_CREATE,$i,$j);
- $r = ($rgb > ;> 16) & 0xFF;
- $g = ($rgb >> 8) & 0xFF;
- $b = $rgb & 0xFF;
- $now_color=imagecolorallocate($this->PICTURE_CREATE,$r,$g,$ b);
- if ($now_color==$tran_color)
- {
- continue;
- }
- else
- {
- $color=imagecolorallocatealpha($this->PICTURE_CREATE,$r,$g,$b,$ALPHA);
- imagesetpixel($this->PICTURE_CREATE,$ALPHA_X+$i,$ALPHA_Y+$j,$color);
- }
- $this->TRUE_COLOR=$this->PICTURE_CREATE;
- }
- }
- }
-
- / *
- 图片旋转:
- 沿線轴旋转
- */
- functionturn_y()
- {
- $this->TRUE_COLOR=imagecreatetruecolor($this->PICTURE_WIDTH,$this->PICTURE_HEIGHT);
- for ($x = 0; $x < $this->PICTURE_WIDTH; $x++)
- {
- imagecopy($this->PICTURE_CREATE, $this->PICTURE_WIDTH - $x - 0, $x, 0, 1, $this->PICTURE_HEIGHT);
- }
- }
- /*
- 沿X轴旋转
- */
- functionturn_x()
- {
- $this->TRUE_COLOR=imagecreatetruecolor($this- >PICTURE_WIDTH,$this->PICTURE_HEIGHT);
- for ($y = 0; $y PICTURE_HEIGHT; $y++)
- {
- imagecopy($this->TRUE_COLOR, $this->PICTURE_CREATE, 0, $this->PICTURE_HEIGHT - $y - 1, 0, $y, $this->PICTURE_WIDTH, 1) ;
- }
- }
-
- /*
- 任意角度旋转
- */
- functionturn()
- {
- $this->TRUE_COLOR=imagecreatetruecolor($this->PICTURE_WIDTH,$this->PICTURE_HEIGHT);
- imageCopyResize ($this->TRUE_COLOR,$this->PICTURE_CREATE,0,0,0,0,$this->PICTURE_WIDTH,$this->PICTURE_HEIGHT,$this->PICTURE_WIDTH,$this->PICTURE_HEIGHT );
- $WHITE=imagecolorallocate($this->TRUE_COLOR,255,255,255);
- $this->TRUE_COLOR=imagerotate ($this->TRUE_COLOR, $this->CIRCUMROTATE, $WHITE);
- }
- /*
- 图片锐化
- */
- function Sharp()
- {
- $this->TRUE_COLOR=imagecreatetruecolor($this->PICTURE_WIDTH,$this->PICTURE_HEIGHT);
- $cnt=0;
- for ($x=0; $xPICTURE_WIDTH; $x++)
- {
- for ($y=0; $yPICTURE_HEIGHT; $y++)
- {
- $src_clr1 = imagecolorsforindex( $this->TRUE_COLOR, imagecolorat($this->PICTURE_CREATE, $x-1, $y-1));
- $src_clr2 = imagecolorsforindex($this->TRUE_COLOR, imagecolorat($this->PICTURE_CREATE, $x, $y));
- $r = intval($src_clr2["red"]+$this->SHARP*($src_clr2["red"]-$src_clr1["red"]));
- $ g = intval($src_clr2["green"]+$this->SHARP*($src_clr2["green"]-$src_clr1["green"]));
- $b = intval($src_clr2["blue" ]+$this->SHARP*($src_clr2["blue"]-$src_clr1["blue"]));
- $r = min(255, max($r, 0));
- $g = 分(255, max($g, 0));
- $b = min(255, max($b, 0));
- if (($DST_CLR=imagecolorexact($this->PICTURE_CREATE, $r, $g) , $b))==-1)
- $DST_CLR = imagecolorallocate($this->PICTURE_CREATE, $r, $g, $b);
- $cnt++;
- if ($DST_CLR==-1) die(" $x, $y ($cnt) でカラー割り当てに失敗しました。");
- imagesetpixel($this->TRUE_COLOR, $x, $y, $DST_CLR);
- }
- }
- }
-
- /*
- 将图片反色处理??
- */
- function return_color()
- {
- /*
- 创建一画布
- */
- $NEW_PICTURE_CREATE=imagecreate($this->PICTURE_WIDTH,$this->PICTURE_HEIGHT);
- $WHITE= imagecolorallocate($NEW_PICTURE_CREATE,255,255,255);
- /*
- 画布中に背景画像をコピーします
- */
- imagecopy($NEW_PICTURE_CREATE, $this->PICTURE_CREATE, 0, 0, 0, 0,$this->PICTURE_WIDTH, $this->PICTURE_HEIGHT);
- $this->TRUE_COLOR=$NEW_PICTURE_CREATE;
- }
-
- /*
- 生成目标图片并显表示
- */
- function show()
- {
- // 判断浏览器,若是IE就不送头
- if(isset($_SERVER['HTTP_USER_AGENT']))
- {
- $ua = strtoupper($_SERVER['HTTP_USER_AGENT']);
- if(!preg_match('/^.*MSIE.*) $/i',$ua))
- {
- header("Content-type:$this->PICTURE_MIME");
- }
- }
- $OUT=$this->PICTURE_TYPE;
- $OUT($this- >TRUE_COLOR);
- }
-
- /*
- 生成目标画像并保存
- */
- function save_picture()
- {
- // JPEG 格式による将画像を浏視台または文書に出力
- $OUT=$this-> PICTURE_TYPE;
- if(function_exists($OUT))
- {
- // 判断浏览器,若是IE不送头
- if(isset($_SERVER['HTTP_USER_AGENT']))
- {
- $ua = strtoupper($_SERVER ['HTTP_USER_AGENT']);
- if(!preg_match('/^.*MSIE.*)$/i',$ua))
- {
- header("Content-type:$this->PICTURE_MIME");
- }
- }
- if(!$this->TRUE_COLOR)
- {
- exit($this->ERROR['unaviable']);
- }
- else
- {
- $OUT($this->TRUE_COLOR, $this->DEST_URL);
- $OUT($this->TRUE_COLOR);
- }
- }
- }
- /*
- 分析関数:释放图片
- */
- function __destruct()
- {
- /*释放画像*/
- imagedestroy($this->TRUE_COLOR);
- imagedestroy($this->PICTURE_CREATE);
- }
- #授業終了
- }
- ?>
复制發
|