PHP多機能画像処理クラス共有(php画像スケーリングクラス)_PHPチュートリアル
/**
* 画像のインデントと透かしの追加を完了するために使用される基本的な画像処理
* 透かし画像がターゲット画像サイズを超える場合、透かし画像は自動的にターゲット画像に適応して縮小されます
* 透かし画像は、ターゲット画像とマージするように設定できます背景
*/
/*
使用法:
自動トリミング:
プログラムは、画像のサイズに従って中央から最大の正方形をトリミングし、画像のサイズに従って縮小します。ターゲットサイズ
$t--->setSrcImg("img/test.jpg");
$t->setCutType(1);//この文は OK
$t->setDstImg("tmp/ new_test .jpg");
$t->createImg(60,60);
手動トリミング:
プログラムは、指定された位置に従ってソース画像から画像を取得します
$t->setSrcImg(" img/test .jpg");
$t->setCutType(2);//手動カットを指示する
$t->setSrcCutPosition(100, 100);//ソース画像の開始点の座標
$ t->setRectangleCut( 300, 200); // トリミングサイズ $t->setDstImg("tmp/new_test.jpg");
*/
class ThumbHandler
{
var $dst_img ;// 対象ファイル
var $img_display_quality = 80;// 画像の表示品質、デフォルトは 75
var $img_scale = 0;// 画像のスケーリング率
var $src_w = 0;// オリジナル画像width
var $src_h = 0;// 元の画像の高さ
var $dst_w = 0;// 新しい画像の合計幅
var $dst_h = 0;// 新しい画像の合計高さ
var $fill_w; //塗りつぶされた図形の幅
var $fill_h;//塗りつぶされた図形の高さ
var $copy_w;/ /グラフィックスの幅をコピー
var $copy_h;//グラフィックスの高さをコピー
var $src_x = 0;//元画像描画の開始横座標
var $src_y = 0;// 元画像描画の開始縦座標
var $start_x ;// 新しい画像描画の開始横座標
var $start_y;// 新しい画像描画の開始縦座標画像
var $mask_word;// ウォーターマーク テキスト
var $mask_img;// ウォーターマーク画像
var $mask_pos_x = 0;/ / ウォーターマークの横座標
var $mask_pos_y = 0;// ウォーターマークの縦座標
var $mask_offset_x = 5;//ウォーターマークの水平オフセット
var $mask_offset_y = 5;// ウォーターマークの垂直オフセット
var $font_w;// ウォーターマークのフォント幅
var $font_h;// ウォーターマークのフォントの高さ
var $mask_w;// ウォーターマークの幅
var $mask_h; // ウォーターマークの高さ
var $mask_font_color = "#ffffff";// ウォーターマークのテキストの色
var $mask_font = 2; // ウォーターマークのフォント/ var $ font_size // サイズ
var $mask_position = 0; var $ Mask_img_pct = 50; // 画像の値が大きいほど結合プログラムは低くなります
VAR $mask_txt_pct = 50;// テキストの結合の度合い、値が小さいほど結合プロセスは低くなります
var $img_border_size = 0;//絵枠のサイズ
var $img_border_color;//絵の枠の色
var $_flip_x=0;// 水平反転回数
var $_flip_y=0;// 垂直反転回数
var $cut_type =0;// カットタイプ
var $img_type;// ファイルタイプ
// ファイルタイプの定義、出力画像の関数を指定します
var $ all_type = array (
"jpg" = & gt; array ("output" = & gt; "imagejpeg"),
"gif" = & gt; 配列 ("" 出力"=>"imagegif"),
"png" => 配列("出力"=>"imagepng"),
"wbmp" => 配列("出力"=>) ;"image2wbmp"),
"jpeg" => array("output"=>"imagejpeg"));
/**
* コンストラクター
*/
function ThumbHandler() {
$this-> mask_font_color = "#ffffff";使用 'を使用して' sを使用して使用します。
function setSrcImg($src_img, $img_type =null)
{
if(!file_exists($src_img))
die("画像が存在しません"); If(!empty($img_type))
$img_type; ️ / file_get_contents 関数には PHP バージョン 4.3.0 以上が必要です
_img);
else
{
$handle = fopen ($src_img, "r");
while (!feof ($handle))
{
$src .= fgets($fd, 4096);
}
fclose ($handle);
}
if(empty($src))
{
die("图片源空");
}
$this->h_src = @ImageCreateFromString($src);
$this->src_w = $this->getImgWidth($this->h_src);
$this->src_h = $this->getImgHeight($this->h_src);
}
/**
* 画像生成パスを設定
*
* @param string $dst_img 画像生成パス
*/
function setDstImg($dst_img)
{
$arr =explode('/',$dst_img);
$last = array_pop($arr);
$path = implode('/',$arr);
$this->_mkdirs($path);
$this->dst_img = $dst_img;
}
/**
* 写真の表示品質を設定します
**/
function setImgDisplayQuality($n)
{
$this->img_display_quality = (int)$n;
}
/**
* 画像生成の品質を設定します
**/
function setImgCreateQuality($n)
{
$this->img_create_quality = (int)$n;
}
/**
透かしのフォントの色
*/
function setMaskWord($word)
{
$this->mask_word .= $word;
}
/** */
function setMaskFontColor($color="#ffffff")
{
$this->mask_font_color = $color;
}} /**&#&* /
関数setmaskfont($ font = 2)
{
if(!is_numeric($ font)&&!file_exists($ font))
{ ");
}
$this->font = $font;
}
/**文字 * 透かしフォントを設定します
*
* @param String $ FONT fonts |*/
function setMaskFontSize($size = "12")
{
$this->font_size = $size;
}
/**
* テキストのフォント サイズを設定します。TrueType フォントにのみ有効です
*/
関数 setMaskImg($img)
{
$this->mask_img = $img;
}
/**印 * 画像透かしを設定します 设 * @param String $ img 透かし画像ソース
*/
function setMaskOffsetX($x)
{
$this->mask_offset_x = (int)$x;
}
/**
* 透かしの水平オフセットを設定します
*
*/
function setMaskOffsetY($y)
{
$this->mask_offset_y = (int)$y;
}
/**
* ウォーターマークの垂直オフセットを設定します
*
* @param integer $y 垂直オフセット
*/
function setMaskPosition($position=0)
{
$this->mask_position = (int)$position;
}
/**
* 画像の結合度を設定します
*
*/
function setMaskImgPct($n)
{
$this->mask_img_pct = (int)$n;
}
/**
* テキストの結合の度合いを設定します
*
*/
function setMaskTxtPct($n)
{
$this->mask_txt_pct = (int)$n;
}
/** */
function setDstImgBorder($size=1, $color="#000000")
{
$this->img_border_size = (int)$size;
$this->img_border_color = $color;
}
/**
*水平反転
*/
関数flipH()
{
$this->_flip_x++;
}
/**
*垂直反転
*/
関数flipV()
{
$this->_flip_y++;
}
/** */
function setCutType($type)
{
$this->cut_type = (int)$type;
}
/**
* 画像のクリッピングを設定します
*
* @param integer $width Rectangular clipping*/
function setRectangleCut($width, $height)
{
{
$this->fill_w = (int)$width;
$this->fill_h = (int)$height;
}
/**
* ソース画像のせん断開始座標点を設定
*
*/
function setSrcCutPosition($x, $y)
{
$this->src_x = (int)$x;
$this->src_y = (int)$y;
}
/**整数$b スケーリング後の画像の高さ
*/
function createImg($a, $b=null)
{
$num = func_num_args();
if(1 == $num)
{ $a; $this-> ;img_scale = $r;
$this->_setNewImgSize($r ); } }
if(2 == $num)
{ $w = (int)$a; $ b;
else
{
falseを返します。
}
}} /**&#&* /
関数_createmask()
{
if($ this-> mask_word)
if($this->_isFull())
{
die("水印文字过大");
}
else
{
$this->h_dst = imagecreatetruecolor($this->dst_w, $this->dst_h );
$white = ImageColorAllocate($this->h_dst,255,255,255);
imagefilledrectangle($this->h_dst,0,0,$this->dst_w,$this->dst_h,$white);// 塗りつぶされた背景色
$this->_drawBorder();
imagecopyresampled( $this->h_dst, $this->h_src,
$this->start_x, $this->start_y,
$this->src_x、$this->src_y、
$this ->fill_w, $this->fill_h,
$this->copy_w, $this->copy_h);
$this->_createMaskWord($this->h_dst);
}
}
isfull())は、元の画像で生成され、_h = emageColorAllocate($> h_dst、255,255,255); ,$this->dst_w,$this->dst_h,$white);// 塗りつぶされた背景色 $this->start_x, $this ->start_y, , $this->src_y 、
this-> copy_w、$ this-&gt_h);
else
{
// 创建新图并贝
$this->h_dst = imagecreatetruecolor($this- >dst_w, $this->dst_h);
$white = ImageColorAllocate($this->h_dst,255,255,255);
imagefilledrectangle($this->h_dst,0,0,$this->dst_w,$this->dst_h,$white);// 塗りつぶされた背景色
$this->_drawBorder();
imagecopyresampled( $this->h_dst, $this->h_src,
$this->start_x, $this->start_y,
$this->src_x、$this->src_y、
$this ->fill_w, $this->fill_h,
$this->copy_w, $this->copy_h);
$this->_createMaskImg($this->h_dst);
}
}
if(empty($this->mask_word) && empty($this->mask_img))
{
$this->h_dst = imagecreatetruecolor($this->dst_w, $this- >dst_h);
$white = ImageColorAllocate($this->h_dst,255,255,255);
imagefilledrectangle($this->h_dst,0,0,$this->dst_w,$this->dst_h,$white);// 塗りつぶされた背景色
$this->_drawBorder();
imagecopyresampled( $this->h_dst, $this->h_src,
$this->start_x, $this->start_y,
$this->src_x、$this->src_y、
$ this->fill_w, $this->fill_h,
$this->copy_w, $this->copy_h);
}
}
/**
*枠線を描きます
*/
function _drawBorder()
{
if(!empty($this->img_border_size))
{
$c = $this->_parseColor($this->img_border_color) );
$color = ImageColorAllocate($this->h_src,$c[0], $c[1], $c[2]);
imagefilledrectangle($this->h_dst,0,0,$this->dst_w,$this->dst_h,$color);// 塗りつぶされた背景色
}
}
/**
* 透かしテキストを生成
* /
function _createMaskWord($src)
{
$this->_countMaskPos();
$this->_checkMaskValid();
$c = $this->_parseColor($this->mask_font_color);
$color = imagecolorallocatealpha($src, $c[0], $c[1], $c[2], $this->mask_txt_pct);
if(is_numeric($this->font))
{
imagestring($src,
$this->font,
$this->mask_pos_x、$this->mask_pos_y、
$this->gt ;mask_word,
$color);
}
else
{
imagettftext($src,
$this->font_size, 0,
$this->mask_pos_x, $this->mask_pos_y,
$color,
$this- >フォント、
$this->mask_word);
}
}
/**
* 透かし画像を生成
*/
function _createMaskImg($src)
{
$this->_countMaskPos();
$this->_checkMaskValid();
imagecopymerge($src,
$this->h_mask,
$this->mask_pos_x ,$this->mask_pos_y,
0, 0,
$this->mask_w、$this->mask_h、
$this->mask_img_pct);
imagedestroy($this->h_mask);
}
/**
*透かし画像をロードします
*/
function _loadMaskImg()
{
$mask_type = $this->_getImgType($this->mask_img);
$this->_checkValid($mask_type);
// file_get_contents関数数要求phpバージョン本>4.3.0
$src = '';
if(function_exists("file_get_contents"))
{
$src = file_get_contents($this->mask_img);
}
else
{
$handle = fopen ($this->mask_img, "r");
while (!feof ($handle))
{
$src .= fgets($fd, 4096);
}
fclose ($handle);
}
if(empty($this->mask_img))
{
die("水印图片は空");
}
$this->h_mask = ImageCreateFromString($src);
$this->mask_w = $this->getImgWidth($this->h_mask);
$this->mask_h = $this->getImgHeight($this->h_mask);
}
/**
*画像出力
*/
function _output()
{
$img_type = $this->img_type;
$func_name = $this->all_type[$img_type]['output'];
if(function_exists($func_name))
{
// 判断浏览器、若是IE不送头
if(isset($_SERVER['HTTP_USER_AGENT'] ))
{
$ua = strtoupper($_SERVER[' HTTP_USER_AGENT']);
if(!preg_match('/^.*MSIE.*)$/i',$ua))
{
header("Content-type:$img_type");
}
}
$func_name($this->h_dst, $this->dst_img, $this->img_display_quality);
}
else
{
falseを返します。
}
}
/**
* 分析颜色
*
* @param string $color 十六进制颜色
*/
function _parseColor($color)
{
$arr = array();
for($ii=1; $ii
{
switch($this->mask_position)
{
case 1:
// 左上
$this->mask_pos_x = $this->mask_offset_x + $this->img_border_size;
$this->mask_pos_y = $this->mask_offset_y + $this->img_border_size;
break;
case 2:
// 左下
$this->mask_pos_x = $this->mask_offset_x + $this->img_border_size;
$this->mask_pos_y = $this->src_h - $this->mask_h - $this->mask_offset_y;
break;
case 3:
// 右上
$this->mask_pos_x = $this->src_w - $this->mask_w - $this->mask_offset_x;
$this->mask_pos_y = $this->mask_offset_y + $this->img_border_size;
break;
case 4:
// 右下
$this->mask_pos_x = $this->src_w - $this->mask_w - $this->mask_offset_x;
$this->mask_pos_y = $this->src_h - $this->mask_h - $this->mask_offset_y;
break;
default:
// 默认将水印放到右下,偏移指定像素
$this->mask_pos_x = $this->src_w - $this->mask_w - $this->mask_offset_x;
$this->mask_pos_y = $this->src_h - $this->mask_h - $this->mask_offset_y;
休憩。
}
}
else
{
switch($this->mask_position)
{
case 1:
// 左上
$this->mask_pos_x = $this->mask_offset_x + $this->img_border_size;
$this->mask_pos_y = $this->mask_offset_y + $this->img_border_size;
break;
case 2:
// 左下
$this->mask_pos_x = $this->mask_offset_x + $this->img_border_size;
$this->mask_pos_y = $this->dst_h - $this->mask_h - $this->mask_offset_y - $this->img_border_size;
break;
case 3:
// 右上
$this->mask_pos_x = $this->dst_w - $this->mask_w - $this->mask_offset_x - $this->img_border_size;
$this->mask_pos_y = $this->mask_offset_y + $this->img_border_size;
break;
case 4:
// 右下
$this->mask_pos_x = $this->dst_w - $this->mask_w - $this->mask_offset_x - $this->img_border_size;
$this->mask_pos_y = $this->dst_h - $this->mask_h - $this->mask_offset_y - $this->img_border_size;
break;
default:
// 默认将水印放到右下,偏移指定像素
$this->mask_pos_x = $this->dst_w - $this->mask_w - $this->mask_offset_x - $this->img_border_size;
$this->mask_pos_y = $this->dst_h - $this->mask_h - $this->mask_offset_y - $this->img_border_size;
壊す;
}}}}}
/**&#&* /
関数_setFontInfo(){
{
if(is_numeric($ this-> font))
{
$ this-> font_w = imagefontwidth($ this $ this $ ->フォント);
$this->font_h = imagefontheight($this->font);
// 计算水音声体所占宽高
$word_length = strlen($this->mask_word);
$this->mask_w = $this->font_w*$word_length;
$this->mask_h = $this->font_h;
}
else
{
$arr = imagettfbbox ($this->font_size,0, $this->font,$this->mask_word);
$this->mask_w = abs($arr[0] - $arr[2]);
$this->mask_h = abs($arr[7] - $arr[1]);
}
}
/**
*フォント情報を設定します
*/
function _setNewImgSize($img_w, $img_h=null)
{
func_num_args( );
if(1 == $num)
{
$this->img_scale = $img_w;// 宽度作値比
$this->fill_w =round($this->s rc_w * $this->img_scale / 100) - $this->img_border_size*2;
$this->fill_h =round($this->src_h * $this->img_scale / 100) - $this->img_border_size*2;
// ソース文件起始坐标
$this->src_x = 0;
$this->src_y = 0;
$this->copy_w = $this->src_w;
$this->copy_h = $this->src_h;
// 目标尺寸
$this->dst_w = $this->fill_w + $this->img_border_size*2;
$this->dst_h = $this->fill_h + $this->img_border_size*2;
}
g_h- $ this-> img_border_size*2;

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック











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

JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

このチュートリアルでは、PHPを使用してXMLドキュメントを効率的に処理する方法を示しています。 XML(拡張可能なマークアップ言語)は、人間の読みやすさとマシン解析の両方に合わせて設計された多用途のテキストベースのマークアップ言語です。一般的にデータストレージに使用されます

静的結合(静的::) PHPで後期静的結合(LSB)を実装し、クラスを定義するのではなく、静的コンテキストで呼び出しクラスを参照できるようにします。 1)解析プロセスは実行時に実行されます。2)継承関係のコールクラスを検索します。3)パフォーマンスオーバーヘッドをもたらす可能性があります。

文字列は、文字、数字、シンボルを含む一連の文字です。このチュートリアルでは、さまざまな方法を使用してPHPの特定の文字列内の母音の数を計算する方法を学びます。英語の母音は、a、e、i、o、u、そしてそれらは大文字または小文字である可能性があります。 母音とは何ですか? 母音は、特定の発音を表すアルファベットのある文字です。大文字と小文字など、英語には5つの母音があります。 a、e、i、o、u 例1 入力:string = "tutorialspoint" 出力:6 説明する 文字列「TutorialSpoint」の母音は、u、o、i、a、o、iです。合計で6元があります

PHPとPythonにはそれぞれ独自の利点があり、プロジェクトの要件に従って選択します。 1.PHPは、特にWebサイトの迅速な開発とメンテナンスに適しています。 2。Pythonは、データサイエンス、機械学習、人工知能に適しており、簡潔な構文を備えており、初心者に適しています。

PHPの魔法の方法は何ですか? PHPの魔法の方法には次のものが含まれます。1。\ _ \ _コンストラクト、オブジェクトの初期化に使用されます。 2。\ _ \ _リソースのクリーンアップに使用される破壊。 3。\ _ \ _呼び出し、存在しないメソッド呼び出しを処理します。 4。\ _ \ _ get、dynamic属性アクセスを実装します。 5。\ _ \ _セット、動的属性設定を実装します。これらの方法は、特定の状況で自動的に呼び出され、コードの柔軟性と効率を向上させます。

PHPは、サーバー側で広く使用されているスクリプト言語で、特にWeb開発に適しています。 1.PHPは、HTMLを埋め込み、HTTP要求と応答を処理し、さまざまなデータベースをサポートできます。 2.PHPは、ダイナミックWebコンテンツ、プロセスフォームデータ、アクセスデータベースなどを生成するために使用され、強力なコミュニティサポートとオープンソースリソースを備えています。 3。PHPは解釈された言語であり、実行プロセスには語彙分析、文法分析、編集、実行が含まれます。 4.PHPは、ユーザー登録システムなどの高度なアプリケーションについてMySQLと組み合わせることができます。 5。PHPをデバッグするときは、error_reporting()やvar_dump()などの関数を使用できます。 6. PHPコードを最適化して、キャッシュメカニズムを使用し、データベースクエリを最適化し、組み込み関数を使用します。 7
