画像のウォーターマークを追加、圧縮、切り取るための PHP カプセル化クラス
PHP は主に GD ライブラリ拡張子を使用して画像ファイルを操作します。画像を操作するために PHP を頻繁に使用する場合、必然的に多くの関数をカプセル化することになります。そうしないと、反復的なコードが多すぎます。画像に関する機能が多い場合、それらの機能を整理することも考えられるので、クラスにカプセル化するという考え方があります。
画像を操作するには、主に 4 つの手順があります:
3つのステップ1、3、4は毎回書かなければなりません。そしてほぼ毎回。本当に変更する必要がある唯一のステップは、画像操作ステップです。画像の操作は、多くの場合、1 つ以上の主要な GD 関数を通じて行われます。
この記事のカプセル化クラスの 4 つのメソッドは、テキスト ウォーターマーク (imagettftext())、画像ウォーターマーク (imagecopymerge())、画像圧縮、および画像切り取り (imagecopyresampled()) の残りの一般的に使用されるメソッドです。関数はリピートではありません。コードを直接入力します:
<?<span style="color: #000000;">php </span><span style="color: #0000ff;">class</span><span style="color: #000000;"> Image{ </span><span style="color: #0000ff;">private</span><span style="color: #000000;"> $info; </span><span style="color: #0000ff;">private</span><span style="color: #000000;"> $image; </span><span style="color: #0000ff;">public</span><span style="color: #000000;"> $type; </span><span style="color: #0000ff;">public</span><span style="color: #000000;"> function __construct($src) { $</span><span style="color: #0000ff;">this</span>->info=<span style="color: #000000;">getimagesize($src); $</span><span style="color: #0000ff;">this</span>->type=image_type_to_extension($<span style="color: #0000ff;">this</span>->info[<span style="color: #800000;">'</span><span style="color: #800000;">2</span><span style="color: #800000;">'</span>],<span style="color: #0000ff;">false</span><span style="color: #000000;">); $fun</span>=<span style="color: #800000;">"</span><span style="color: #800000;">imagecreatefrom{$this->type}</span><span style="color: #800000;">"</span><span style="color: #000000;">; $</span><span style="color: #0000ff;">this</span>->image=<span style="color: #000000;">$fun($src); } </span><span style="color: #008000;">/*</span><span style="color: #008000;">* * 文字水印 * @param [type] $font 字体 * @param [type] $content 内容 * @param [type] $size 文字大小 * @param [type] $col 文字颜色(四元数组) * @param array $location 位置 * @param integer $angle 倾斜角度 * @return [type] </span><span style="color: #008000;">*/</span> <span style="color: #0000ff;">public</span> function fontMark($font,$content,$size,$col,$location,$angle=<span style="color: #800080;">0</span><span style="color: #000000;">){ $col</span>=imagecolorallocatealpha($<span style="color: #0000ff;">this</span>->image, $col[<span style="color: #800000;">'</span><span style="color: #800000;">0</span><span style="color: #800000;">'</span>], $col[<span style="color: #800000;">'</span><span style="color: #800000;">1</span><span style="color: #800000;">'</span>], $col[<span style="color: #800000;">'</span><span style="color: #800000;">2</span><span style="color: #800000;">'</span>],$col[<span style="color: #800000;">'</span><span style="color: #800000;">3</span><span style="color: #800000;">'</span><span style="color: #000000;">]); imagettftext($</span><span style="color: #0000ff;">this</span>->image, $size, $angle, $location[<span style="color: #800000;">'</span><span style="color: #800000;">0</span><span style="color: #800000;">'</span>], $location[<span style="color: #800000;">'</span><span style="color: #800000;">1</span><span style="color: #800000;">'</span><span style="color: #000000;">], $col,$font,$content); } </span><span style="color: #008000;">/*</span><span style="color: #008000;">* * 图片水印 * @param [type] $imageMark 水印图片地址 * @param [type] $dst 水印图片在原图片中的位置 * @param [type] $pct 透明度 * @return [type] </span><span style="color: #008000;">*/</span> <span style="color: #0000ff;">public</span><span style="color: #000000;"> function imageMark($imageMark,$dst,$pct){ $info2</span>=<span style="color: #000000;">getimagesize($imageMark); $type</span>=image_type_to_extension($info2[<span style="color: #800000;">'</span><span style="color: #800000;">2</span><span style="color: #800000;">'</span>],<span style="color: #0000ff;">false</span><span style="color: #000000;">); $func2</span>=<span style="color: #800000;">"</span><span style="color: #800000;">imagecreatefrom</span><span style="color: #800000;">"</span><span style="color: #000000;">.$type; $water</span>=<span style="color: #000000;">$func2($imageMark); imagecopymerge($</span><span style="color: #0000ff;">this</span>->image, $water, $dst[<span style="color: #800080;">0</span>], $dst[<span style="color: #800080;">1</span>], <span style="color: #800080;">0</span>, <span style="color: #800080;">0</span>, $info2[<span style="color: #800000;">'</span><span style="color: #800000;">0</span><span style="color: #800000;">'</span>], $info2[<span style="color: #800000;">'</span><span style="color: #800000;">1</span><span style="color: #800000;">'</span><span style="color: #000000;">], $pct); imagedestroy($water); } </span><span style="color: #008000;">/*</span><span style="color: #008000;">* * 压缩图片 * @param [type] $thumbSize 压缩图片大小 * @return [type] [description] </span><span style="color: #008000;">*/</span> <span style="color: #0000ff;">public</span><span style="color: #000000;"> function thumb($thumbSize){ $imageThumb</span>=imagecreatetruecolor($thumbSize[<span style="color: #800080;">0</span>], $thumbSize[<span style="color: #800080;">1</span><span style="color: #000000;">]); imagecopyresampled($imageThumb, $</span><span style="color: #0000ff;">this</span>->image, <span style="color: #800080;">0</span>, <span style="color: #800080;">0</span>, <span style="color: #800080;">0</span>, <span style="color: #800080;">0</span>, $thumbSize[<span style="color: #800080;">0</span>], $thumbSize[<span style="color: #800080;">1</span>], $<span style="color: #0000ff;">this</span>->info[<span style="color: #800000;">'</span><span style="color: #800000;">0</span><span style="color: #800000;">'</span>], $<span style="color: #0000ff;">this</span>->info[<span style="color: #800000;">'</span><span style="color: #800000;">1</span><span style="color: #800000;">'</span><span style="color: #000000;">]); imagedestroy($</span><span style="color: #0000ff;">this</span>-><span style="color: #000000;">image); $</span><span style="color: #0000ff;">this</span>->image=<span style="color: #000000;">$imageThumb; } </span><span style="color: #008000;">/*</span><span style="color: #008000;">* * 裁剪图片 * @param [type] $cutSize 裁剪大小 * @param [type] $location 裁剪位置 * @return [type] [description] </span><span style="color: #008000;">*/</span> <span style="color: #0000ff;">public</span><span style="color: #000000;"> function cut($cutSize,$location){ $imageCut</span>=imagecreatetruecolor($cutSize[<span style="color: #800080;">0</span>],$cutSize[<span style="color: #800080;">1</span><span style="color: #000000;">]); imagecopyresampled($imageCut, $</span><span style="color: #0000ff;">this</span>->image, <span style="color: #800080;">0</span>, <span style="color: #800080;">0</span>, $location[<span style="color: #800080;">0</span>], $location[<span style="color: #800080;">1</span>],$cutSize[<span style="color: #800080;">0</span>],$cutSize[<span style="color: #800080;">1</span>],$cutSize[<span style="color: #800080;">0</span>],$cutSize[<span style="color: #800080;">1</span><span style="color: #000000;">]); imagedestroy($</span><span style="color: #0000ff;">this</span>-><span style="color: #000000;">image); $</span><span style="color: #0000ff;">this</span>->image=<span style="color: #000000;">$imageCut; } </span><span style="color: #008000;">/*</span><span style="color: #008000;">* * 展现图片 * @return [type] [description] </span><span style="color: #008000;">*/</span> <span style="color: #0000ff;">public</span><span style="color: #000000;"> function show(){ header(</span><span style="color: #800000;">"</span><span style="color: #800000;">content-type:</span><span style="color: #800000;">"</span>.$<span style="color: #0000ff;">this</span>->info[<span style="color: #800000;">'</span><span style="color: #800000;">mime</span><span style="color: #800000;">'</span><span style="color: #000000;">]); $funn</span>=<span style="color: #800000;">"</span><span style="color: #800000;">image</span><span style="color: #800000;">"</span>.$<span style="color: #0000ff;">this</span>-><span style="color: #000000;">type; $funn($</span><span style="color: #0000ff;">this</span>-><span style="color: #000000;">image); } </span><span style="color: #008000;">/*</span><span style="color: #008000;">* * 保存图片 * @param [type] $newname 新图片名 * @return [type] [description] </span><span style="color: #008000;">*/</span> <span style="color: #0000ff;">public</span><span style="color: #000000;"> function save($newname){ header(</span><span style="color: #800000;">"</span><span style="color: #800000;">content-type:</span><span style="color: #800000;">"</span>.$<span style="color: #0000ff;">this</span>->info[<span style="color: #800000;">'</span><span style="color: #800000;">mime</span><span style="color: #800000;">'</span><span style="color: #000000;">]); $funn</span>=<span style="color: #800000;">"</span><span style="color: #800000;">image</span><span style="color: #800000;">"</span>.$<span style="color: #0000ff;">this</span>-><span style="color: #000000;">type; $funn($</span><span style="color: #0000ff;">this</span>->image,$newname.<span style="color: #800000;">'</span><span style="color: #800000;">.</span><span style="color: #800000;">'</span>.$<span style="color: #0000ff;">this</span>-><span style="color: #000000;">type); } </span><span style="color: #0000ff;">public</span><span style="color: #000000;"> function __destruct(){ imagedestroy($</span><span style="color: #0000ff;">this</span>-><span style="color: #000000;">image); } } </span>?>
他の操作が必要な場合は、このクラスに追加してください~~