ホームページ > バックエンド開発 > PHPチュートリアル > php画像処理クラス_PHPチュートリアル

php画像処理クラス_PHPチュートリアル

WBOY
リリース: 2016-07-13 17:49:02
オリジナル
842 人が閲覧しました

クラス画像 {
プライベート $パス
//構築メソッドは画像の位置を初期化するために使用されます
関数 __construct($path="./"){
$this->path=rtrim($path, "/")."/"; }
/* 画像のサブステート化 *
* パラメータ $name: は処理する必要がある画像の名前です
* パラメータ $width: スケーリング後の幅です
* パラメータ $height: はスケーリング後の高さです
* パラメータ $qz: は新しい画像の名前の接頭辞です
※戻り値:ズームした画像の名前、失敗した場合はfalseを返します
*
*/
関数つまみ($name, $width, $height, $qz="th_"){
//画像情報を取得します
$imgInfo=$this->getInfo($name); //画像の幅、高さ、タイプ
; //画像リソースを取得します。jpg、gif、png などのさまざまな種類の画像のリソースを作成できます
$srcImg=$this->getImg($name, $imgInfo); // 等しい比率を計算した後、画像のサイズを取得します $size["width"], $size["height"]
$size=$this->getNewSize($name, $width, $height, $imgInfo); // 新しい画像リソースを取得し、GIF 透明背景を処理します
$newImg=$this->kidOfImage($srcImg, $size, $imgInfo); // 新しい画像として保存し、新しいズーム画像の名前を返します
return $this->createNewImage($newImg, $qz.$name, $imgInfo); }

プライベート関数 createNewImage($newImg, $newName, $imgInfo){
switch($imgInfo["type"]){
ケース 1://gif
$result=imageGif($newImg, $this->path.$newName); 休憩
ケース 2://jpg
$result=imageJPEG($newImg, $this->path.$newName); 休憩
ケース 3://png
$return=imagepng($newImg, $this->path.$newName); 休憩
                                                                       imagedestroy($newImg); $newName を返します。 }

        プライベート関数 kidOfImage($srcImg, $size, $imgInfo){
            $newImg=imagecreatetruecolor($size["幅"], $size["高さ"]); 
             
            $otsc=イメージカラー透明($srcImg); 
 
            if($otsc >=0 && $otsc <= imagecolorstotal($srcImg)){
                $tran=imagecolorsforindex($srcImg, $otsc); 
 
                $newt=imagecolorallocate($newImg, $tran["red"], $tran["green"], $tran["blue"]); 
 
                imagefill($newImg, 0, 0, $newt); 
 
                imagecolortransparent($newImg, $newt); 
            }
 
            imagecopyresize($newImg, $srcImg, 0, 0, 0, 0, $size["width"], $size["height"], $imgInfo["width"], $imgInfo["height"]); 
 
            imagedestroy($srcImg); 
 
            $newImg を返します。 
        }
 
        プライベート関数 getNewSize($name, $width, $height, $imgInfo){
            $size["幅"]=$imgInfo["幅"]; 
            $size["高さ"]=$imgInfo["高さ"]; 
 
            //放放の宽度如果比原图小才重新設置宽度
            if($width < $imgInfo["width"]){
                $size["width"]=$width; 
            }
            //放たれた高さの結果に比べて原図小才再設置高さ
            if($height <$imgInfo["height"]){
                $size["高さ"]=$高さ; 
            }
 
            //图片等比放的算法
            if($imgInfo["幅"]*$size["幅"] > $imgInfo["高さ"] * $size["高さ"]){
                $size["高さ"]=round($imgInfo["高さ"]*$size["幅"]/$imgInfo["幅"]); 
            }その他{
                $size["幅"]=round($imgInfo["幅"]*$size["高さ"]/$imgInfo["高さ"]); 
            }
 
 
            $size を返します。 
 
        }
 
        プライベート関数 getInfo($name){
            $data=getImageSize($this->path.$name); 
 
            $imageInfo["幅"]=$data[0]; 
            $imageInfo["高さ"]=$data[1]; 
            $imageInfo["タイプ"]=$data[2]; 
 
            $imageInfo を返します。 
        }
 
        プライベート関数 getImg($name, $imgInfo){
            $srcPic=$this->パス.$name; 
 
            switch($imgInfo["type"]){
                ケース 1: //gif
                    $img=imagecreatefromgif($srcPic); 
                    壊す; 
                ケース 2: //jpg
                    $img=imageCreatefromjpeg($srcPic); 
                    壊す; 
                ケース 3: //png
                    $img=imageCreatefrompng($srcPic); 
                    壊す; 
                デフォルト:
                    false を返します。 
                 
            }
 
            $imgを返します; 
        }
        /* 機能:画像加水印画像にする
         * パラメータ$groundName: 背景画像、即時追加水印の画像
         * パラメータ$waterName: 水钱图片
         * パラメータ#aterPost:水印位置、10种状態态、
         * 0は随机の位置です
         *
         * 1. として顶端居左 2. として顶端居中 3 として顶端居右
         * 4 は中部居左 5. は中部居中 6 は中部居右
         * 7 。 底端居左 8.底端居中 9.底端居右
         *
         * パラメータ$qz : 加水印後の図片名前です
         * 戻り値: これは処理後の写真の名前です
         *
         */
        function WaterMark($groundName, $waterName, $waterPos=0, $qz="wa_"){
         
            if(file_exists($this->path.$groundName) && file_exists($this->path.$waterName)){
                $groundInfo=$this->getInfo($groundName); 
                $waterInfo=$this->getInfo($waterName); 
                //水印の位置
                if(!$pos=$this->position($groundInfo, $waterInfo, $waterPos)){
                    echo "水印不应该比背景图片小!"; 
                    戻る; 
                }
 
                $groundImg=$this->getImg($groundName, $groundInfo); 
                $waterImg=$this->getImg($waterName, $waterInfo); 
 
                $groundImg=$this->copyImage($groundImg, $waterImg, $pos, $waterInfo); 
 
                return $this->createNewImage($groundImg, $qz.$groundName, $groundInfo); 
            }その他{
                echo "写真または水印の写真は存在しません"; 
                false を返します。 
            }
        }
 
        プライベート関数 copyImage($groundImg, $waterImg, $pos, $waterInfo){
            imagecopy($groundImg, $waterImg, $pos["posX"], $pos["posY"], 0, 0, $waterInfo["width"], $waterInfo["height"]); 
            imagedestroy($waterImg); 
 
            $groundImg を返します。 
        }
         
        プライベート関数の位置($groundInfo, $waterInfo, $waterPos){
            // 必要背景比水印图片大
            if(($groundInfo["width"]< $waterInfo["width"]) ||($groundInfo["height"] < $waterInfo["height"])){
                false を返します。 
            }
 
            スイッチ($waterPos){
                ケース 1:
                    $posX=0; 
                    $posY=0; 
                    壊す; 
                ケース 2:
                    $posX=($groundInfo["width"]-$waterInfo["width"])/2; 
                    $posY=0; 
                    壊す; 
                ケース 3:
                    $posX=$groundInfo["幅"]-$waterInfo["幅"]; 
                    $posY=0; 
                    壊す; 
                ケース 4:
                    $posX=0; 
                    $posY=($groundInfo["高さ"]-$waterInfo["高さ"]) /2; 
                    壊す; 
                ケース 5:
                    $posX=($groundInfo["width"]-$waterInfo["width"])/2; 
                    $posY=($groundInfo["高さ"]-$waterInfo["高さ"]) /2; 
                    壊す; 
                ケース 6:
                    $posX=$groundInfo["幅"]-$waterInfo["幅"]; 
                    $posY=($groundInfo["高さ"]-$waterInfo["高さ"]) /2; 
                    壊す; 
                ケース 7:
                    $posX=0; 
                    $posY=$groundInfo["高さ"]-$waterInfo["高さ"]; 
                    壊す; 
                ケース 8:
                    $posX=($groundInfo["width"]-$waterInfo["width"])/2; 
                    $posY=$groundInfo["高さ"]-$waterInfo["高さ"]; 
                    壊す; 
                ケース 9:
                    $posX=$groundInfo["幅"]-$waterInfo["幅"]; 
                    $posY=$groundInfo["高さ"]-$waterInfo["高さ"]; 
                    壊す; 
                ケース 0:
                デフォルト:
                    $posX=rand(0, ($groundInfo["width"]-$waterInfo["width"])); 
                    $posY=rand(0, ($groundInfo["高さ"]-$waterInfo["高さ"])); 
                    壊す; 
            }
 
            return array("posX"=>$posX, "posY"=>$posY); 
        }
 
    }
 クラス画像{
  プライベート $パス;
  // 構築メソッドを使用して画像の配置場所を初期化します
  関数 __construct($path="./"){
   $this->path=rtrim($path, "/")."/";
  }
  /* 对图片を放放
   *
* パラメータ $name: は処理する必要がある画像の名前です
* パラメータ $width: スケーリング後の幅です
* パラメータ $height: はスケーリング後の高さです
* パラメータ $qz: は新しい画像の名前の接頭辞です
※戻り値:ズームした画像の名前で、失敗した場合はfalseを返します
*
*/
関数thumb($name, $width, $height, $qz="th_"){
//画像情報を取得します
$imgInfo=$this->getInfo($name) //画像の幅、高さ、種類
; //画像リソースを取得します。jpg、gif、png などのさまざまな種類の画像のリソースを作成できます
$srcImg=$this->getImg($name, $imgInfo);
//均等な比率を計算した後の画像のサイズを取得します $size["width"], $size["height"]
$size=$this->getNewSize($name, $width, $height, $imgInfo);
// 新しい画像リソースを取得し、GIF 透明背景を処理します
$newImg=$this->kidOfImage($srcImg, $size, $imgInfo);
// 新しい画像として保存し、新しいズーム画像の名前を返します
$this->createNewImage($newImg, $qz.$name, $imgInfo) を返します。 }

プライベート関数 createNewImage($newImg, $newName, $imgInfo){

switch($imgInfo["type"]){
ケース 1://gif
$result=imageGif($newImg, $this->path.$newName);
休憩
ケース2://jpg
$result=imageJPEG($newImg, $this->path.$newName);
休憩
ケース 3://png
$return=imagepng($newImg, $this->path.$newName);
休憩
}
Imagedestroy($newImg);
$newName を返します;
}

プライベート関数 kidOfImage($srcImg, $size, $imgInfo){

$newImg=imagecreatetruecolor($size["幅"], $size["高さ"]);

$otsc=イメージカラー透明($srcImg);

if($otsc >=0 && $otsc <= imagecolorstotal($srcImg)){

$tran=imagecolorsforindex($srcImg, $otsc);

$newt=imagecolorallocate($newImg, $tran["red"], $tran["green"], $tran["blue"]);

Imagefill($newImg, 0, 0, $newt);

Imagecolortransparent($newImg, $newt);

}

Imagecopyresize($newImg, $srcImg, 0, 0, 0, 0, $size["width"], $size["height"], $imgInfo["width"], $imgInfo["height"]);

imagedestroy($srcImg);

$newImg を返す;

}

プライベート関数 getNewSize($name, $width, $height, $imgInfo){

$size["幅"]=$imgInfo["幅"];
$size["高さ"]=$imgInfo["高さ"];

//ズーム後の幅が元の画像より小さい場合は、幅をリセットします

if($width < $imgInfo["width"]){
$size["width"]=$width;
}
//ズーム後の高さが元の画像より小さい場合は、高さをリセットします
if($height < $imgInfo["height"]){
$size["高さ"]=$高さ;
}

//画像スケーリングのアルゴリズム

if($imgInfo["幅"]*$size["幅"] > $imgInfo["高さ"] * $size["高さ"]){
$size["高さ"]=round($imgInfo["高さ"]*$size["幅"]/$imgInfo["幅"]);
}その他{
$size["幅"]=round($imgInfo["幅"]*$size["高さ"]/$imgInfo["高さ"]);
}

$size を返します;

}

プライベート関数getInfo($name){

$data=getImageSize($this->path.$name);

$imageInfo["width"]=$data[0];

$imageInfo["高さ"]=$data[1];
$imageInfo["type"]=$data[2];

$imageInfo を返す;

}

プライベート関数 getImg($name, $imgInfo){
$srcPic=$this->パス.$name;

switch($imgInfo["type"]){
ケース 1: //gif
$img=imagecreatefromgif($srcPic);
休憩
ケース 2: //jpg
$img=imageCreatefromjpeg($srcPic);
休憩
ケース 3: //png
$img=imageCreatefrompng($srcPic);
休憩
デフォルト:
false を返す;

}

$img を返す;
}
/* 関数: 画像に透かしを追加します
* パラメーター $groundName: 背景画像、つまり透かしを入れる必要がある画像
* パラメータ $waterName: 水のお金の写真
* パラメータ #aterPost: ウォーターマークの位置、10 の状態、
※0はランダムな位置です
*
※ 1.左上用 2.中央上用 3.右上用
* 4. は中央が左側にあることを意味します 5. は中央が中央にあることを意味します 6. は中央が右側にあることを意味します
※7.左が下、8.中が下、9.右が下です
*
* パラメータ $qz: はウォーターマークを追加した後の画像名のプレフィックスです
※戻り値:加工した画像の名前です
*
*/
function WaterMark($groundName, $waterName, $waterPos=0, $qz="wa_"){

If(file_exists($this->path.$groundName) && file_exists($this->path.$waterName)){
$groundInfo=$this->getInfo($groundName);
$waterInfo=$this->getInfo($waterName);
//ウォーターマークの位置
If(!$pos=$this->position($groundInfo, $waterInfo, $waterPos)){
echo "透かしは背景画像より小さくてはなりません!";
戻る;
}

$groundImg=$this->getImg($groundName, $groundInfo);
$waterImg=$this->getImg($waterName, $waterInfo);

$groundImg=$this->copyImage($groundImg, $waterImg, $pos, $waterInfo);

$this->createNewImage($groundImg, $qz.$groundName, $groundInfo) を返します。
}その他{
echo "画像または透かし画像が存在しません";
false を返します;
}
}

プライベート関数 copyImage($groundImg, $waterImg, $pos, $waterInfo){
Imagecopy($groundImg, $waterImg, $pos["posX"], $pos["posY"], 0, 0, $waterInfo["width"], $waterInfo["height"]);
Imagedestroy($waterImg);

$groundImg を返す;
}

プライベート関数の位置($groundInfo, $waterInfo, $waterPos){
//背景は透かし画像よりも大きくする必要があります
if(($groundInfo["幅"]< $waterInfo["幅"]) ||($groundInfo["高さ"] < $waterInfo["高さ"])){
false を返します;
}

スイッチ($waterPos){
    ケース1:
     $posX=0;
     $posY=0;
     休憩;
    ケース 2:
     $posX=($groundInfo["width"]-$waterInfo["width"])/2;
     $posY=0;
     休憩;
    ケース 3:
     $posX=$groundInfo["width"]-$waterInfo["width"];
     $posY=0;
     休憩;
    ケース4:
     $posX=0;
     $posY=($groundInfo["高さ"]-$waterInfo["高さ"]) /2;
     休憩;
    ケース5:
     $posX=($groundInfo["width"]-$waterInfo["width"])/2;
     $posY=($groundInfo["高さ"]-$waterInfo["高さ"]) /2;
     休憩;
    ケース6:
     $posX=$groundInfo["width"]-$waterInfo["width"];
     $posY=($groundInfo["高さ"]-$waterInfo["高さ"]) /2;
     休憩;
    ケース7:
     $posX=0;
     $posY=$groundInfo["高さ"]-$waterInfo["高さ"];
     休憩;
    ケース8:
     $posX=($groundInfo["width"]-$waterInfo["width"])/2;
     $posY=$groundInfo["高さ"]-$waterInfo["高さ"];
     休憩;
    ケース9:
     $posX=$groundInfo["width"]-$waterInfo["width"];
     $posY=$groundInfo["高さ"]-$waterInfo["高さ"];
     休憩;
    ケース0:
    デフォルト:
     $posX=rand(0, ($groundInfo["width"]-$waterInfo["width"]));
     $posY=rand(0, ($groundInfo["高さ"]-$waterInfo["高さ"]));
     休憩;
   }

return array("posX"=>$posX, "posY"=>$posY);
  }

}

chaojie2009 の抜粋

www.bkjia.com本当http://www.bkjia.com/PHPjc/478376.html技術記事 ?php クラス Image { private $path; // 構築メソッドを使用して画像の配置場所を初期化する function __construct($path=./){ $this-path=rtrim($path, /)./; } /* 对图片进行放...
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート