ホームページ >バックエンド開発 >PHPチュートリアル >php画像処理クラス_PHPチュートリアル
クラス画像 {
プライベート $パス
//構築メソッドは画像の位置を初期化するために使用されます
関数 __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) を返します。
}
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 を返します;
}
$newImg=imagecreatetruecolor($size["幅"], $size["高さ"]);
$otsc=イメージカラー透明($srcImg);
$tran=imagecolorsforindex($srcImg, $otsc);
Imagefill($newImg, 0, 0, $newt);
Imagecolortransparent($newImg, $newt);
}
imagedestroy($srcImg);
$newImg を返す;
}
$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[1];
$imageInfo["type"]=$data[2];
}
プライベート関数 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 の抜粋