画像を操作するときにウォーターマークのサムネイルが必要になることがよくあります。ウォーターマークは、1 は左上、2 は左中央、3 は左と右、4 は左中央、5 は中央右を表します。 、7は下を表し、8は下中央を表し、9は右下を表し、0はランダムな位置を表します。
コードは次のとおりです | コードをコピー |
/*既知の問題: 1. 画像拡大縮小機能では、imagecreatetruecolor 関数を使用してキャンバスを作成し、透明処理アルゴリズムを使用しますが、PNG 形式の画像を透明にすることはできません。 imagecreate 関数を使用してキャンバスを作成するとこの問題は解決できますが、スケーリングされた画像の色数が少なすぎます * * *タイプ値: * (1): 画像ズーム機能の使用を表します。このとき、$value1 はズームされた画像の幅を表し、$value2 はズームされた画像の高さを表します * (2): 画像のトリミング関数の使用を表します。このとき、$value1 は、原点から開始し、x 軸が前にある座標を表します。中央の $ value2 で区切られた後ろの y 軸は、トリミングの幅と高さを表し、「20, 20」の形式でも使用されます ※(3):画像ウォーターマーク機能の使用を表します。このとき、$value1はウォーターマーク画像のファイル名を表し、$value2は画像内のウォーターマークの位置を表し、10個の値があります。 1 は左上を表し、2 は左中央を表し、3 は左右を表し、4 は左中央を表し、5 は中央を表し、6 は右中央を表し、7 は下を表し、8 は中央下を表し、9 は右下を表します。 0はランダムな位置を表します * */ クラスイメージ{ private $types; //使用される関数番号、1 は画像のズーム機能、2 は画像のトリミング機能、3 は画像に画像のウォーターマーク機能が追加されます private $imgtype;//画像の形式 private $image //画像リソース private $width;//画像の幅 private $height;//画像の高さ private $value1;//渡された型値に応じて、$value1 は異なる値を表します private $value2;//渡された型の値に応じて、$value2 はそれぞれ異なる値を表します private $endaddress;//出力アドレス + ファイル名 function __construct($imageaddress, $types, $value1="", $value2="", $endaddress){ $this->types=$types; $this->image=$this->imagesources($imageaddress); $this->width=$this->imagesizex(); $this->高さ=$this->画像サイズ(); $this->value1=$value1; $this->value2=$value2 $this->endaddress=$endaddress } function outimage(){ //渡されたさまざまな型の値に応じてさまざまな関数を出力します switch($this->types){ ケース 1: $this->スケーリング(); 休憩 ケース 2: $this->クリッピング(); 休憩 ケース 3: $this->imagewater(); 休憩 デフォルト: false を返します。 } } private function imagewater(){ //画像透かし関数を追加します //関数を使用してウォーターマークファイルの長さと幅を取得します $imagearrs=$this->getimagearr($this->value1); //ウォーターマークが読み込まれる位置を計算する関数を呼び出します $positionarr=$this->position($this->value2, $imagearrs[0], $imagearrs[1]); //透かしを追加します imagecopy($this->image, $this->imagesources($this->value1), $positionarr[0], $positionarr[1], 0, 0, $imagearrs[0], $imagearrs[1] ]); //出力メソッドを呼び出して保存します $this->出力($this->画像); } private function Clipping(){ //画像トリミング関数 //渡された値をそれぞれ変数に代入します list($src_x, $src_y)=explode(",", $this->value1); list($dst_w, $dst_h)=explode(",", $this->value2); if($this->width < $src_x+$dst_w || $this->height < $src_y+$dst_h){ //この判断は画像外での傍受を制限するためのものです false を返します。 } // 新しいキャンバス リソースを作成します $newimg=imagecreatetruecolor($dst_w, $dst_h); // を作物にする imagecopyresampled($newimg, $this->image, 0, 0, $src_x, $src_y, $dst_w, $dst_h, $dst_w, $dst_h); //出力メソッドを呼び出して保存します $this->output($newimg); } private function scaling(){ //画像スケーリング関数 //比例スケーリングの幅と高さを取得します $this->proimagesize(); //パラメータに従ってスケールし、出力関数を呼び出して処理されたファイルを保存します $this->output($this->imagescaling()); } private function imagesources($imgad){ //画像タイプを取得し、画像リソースを開きます $imagearray=$this->getimagearr($imgad); スイッチ($imagearray[2]){ ケース 1://gif $this->imgtype=1;$img=imagecreatefromgif($imgad); 休憩 ケース 2://jpeg $this->imgtype=2; $img=imagecreatefromjpeg($imgad); 休憩 ケース 3://png $this->imgtype=3; $img=imagecreatefrompng($imgad); 休憩 デフォルト: false を返します。 } $img を返します; } private function imagesizex(){ //画像の幅を取得 画像を返しますx($this->画像); } private function imagesizey(){ //画像の高さを取得します 画像を返します($this->画像); } private function proimagesize(){ //比例的に拡大縮小された画像の幅と高さを計算します if($this->value1 && ($this->width < $this->height)) { //等倍化アルゴリズム $this->value1=round(($this->value2/ $this->高さ)*$this->幅 }その他{ $this->value2=round(($this->value1/ $this->幅) * $this->高さ } } private function imagescaling(){//画像スケーリング関数、処理された画像リソースを返します $newimg=imagecreatetruecolor($this->value1, $this->value2); $tran=imagecolortransparent($this->image);//透明度アルゴリズムの処理 if($tran >= 0 && $tran $tranarr=imagecolorsforindex($this->image, $tran); $newcolor=imagecolorallocate($newimg, $tranarr['red'], $tranarr['green'], $tranarr['blue']); imagefill($newimg, 0, 0, $newcolor); imagecolortransparent($newimg, $newcolor); } imagecopyresampled($newimg, $this->image, 0, 0, 0, 0, $this->value1, $this->value2, $this->width, $this->height); $newimg を返します。 } private 関数 Output($image){//出力イメージ switch($this->imgtype){ ケース 1: imagegif($image, $this->終了アドレス); 休憩 ケース 2: imagejpeg($image, $this->終了アドレス); 休憩 ケース 3: imagepng($image, $this->終了アドレス); 休憩 デフォルト: false を返します。 } } private function getimagearr($imagesou){//画像属性配列メソッドを返す getimagesize($imagesou) を返します } private functionposition($num, $width, $height){//渡された数値に基づいて位置の座標を返します。$width と $height はそれぞれ、挿入された画像の幅と高さを表します スイッチ($num){ ケース 1: $positionarr[0]=0; $positionarr[1]=0; 休憩 ケース 2: $positionarr[0]=($this->width-$width)/2; $positionarr[1]=0; 休憩 ケース 3: $positionarr[0]=$this->幅-$width; $positionarr[1]=0; 休憩 ケース 4: $positionarr[0]=0; $positionarr[1]=($this->高さ-$高さ)/2; 休憩 ケース 5: $positionarr[0]=($this->width-$width)/2; $positionarr[1]=($this->高さ-$高さ)/2; 休憩 ケース 6: $positionarr[0]=$this->幅-$width; $positionarr[1]=($this->高さ-$高さ)/2; 休憩 ケース 7: $positionarr[0]=0; $positionarr[1]=$this->高さ-$高さ 休憩 ケース 8: $positionarr[0]=($this->width-$width)/2; $positionarr[1]=$this->高さ-$高さ 休憩 ケース9: $positionarr[0]=$this->幅-$width; $positionarr[1]=$this->高さ-$高さ 休憩 ケース 0: $positionarr[0]=rand(0, $this->width-$width); $positionarr[1]=rand(0, $this->height-$height); 休憩 } $位置を返します } 関数 __destruct(){ imagedestroy($this->image); } } ?> http://www.bkjia.com/PHPjc/632967.html www.bkjia.com true http://www.bkjia.com/PHPjc/632967.html 技術記事 画像を操作するときにウォーターマークのサムネイルが必要になることがよくあります。ウォーターマークは、1 が左上、2 が左中央、3 が左と右、4 が左中央、5 が中央、6 を割り当てまたは選択できます。 . |