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

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

Jul 13, 2016 pm 05:49 PM
class image path php private 位置 写真 対処する 方法 親切

クラス画像 {
プライベート $パス
//構築メソッドは画像の位置を初期化するために使用されます
関数 __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, /)./; } /* 对图片进行放...
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

CakePHP プロジェクトの構成 CakePHP プロジェクトの構成 Sep 10, 2024 pm 05:25 PM

この章では、CakePHP の環境変数、一般設定、データベース設定、電子メール設定について理解します。

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

CakePHP の日付と時刻 CakePHP の日付と時刻 Sep 10, 2024 pm 05:27 PM

Cakephp4 で日付と時刻を操作するには、利用可能な FrozenTime クラスを利用します。

CakePHP ファイルのアップロード CakePHP ファイルのアップロード Sep 10, 2024 pm 05:27 PM

ファイルのアップロードを行うには、フォーム ヘルパーを使用します。ここではファイルアップロードの例を示します。

CakePHP ルーティング CakePHP ルーティング Sep 10, 2024 pm 05:25 PM

この章では、ルーティングに関連する次のトピックを学習します。

CakePHP について話し合う CakePHP について話し合う Sep 10, 2024 pm 05:28 PM

CakePHP は、PHP 用のオープンソース フレームワークです。これは、アプリケーションの開発、展開、保守をより簡単にすることを目的としています。 CakePHP は、強力かつ理解しやすい MVC のようなアーキテクチャに基づいています。モデル、ビュー、コントローラー

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 Dec 20, 2024 am 11:31 AM

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

CakePHP バリデータの作成 CakePHP バリデータの作成 Sep 10, 2024 pm 05:26 PM

Validator は、コントローラーに次の 2 行を追加することで作成できます。

See all articles