ホームページ >バックエンド開発 >PHPチュートリアル >PHP 画像操作クラス。サムネイルの生成、透かしの追加、サムネイルのアップロードをサポートします。
クラス画像 {
public $thumbimage = "" //サムネイルファイルの保存アドレス
public $thum ; b_maxwidth = 1440; //サムネイルの最大幅
public $thumb_maxheight; = 900; //サムネイルの最大高さ
public $watermark_text = " " ; //ウォーターマークのテキストコンテンツ
" " public $watermark_minwidth = 300 // この値より大きい場合はウォーターマークを追加します
" " public $watermark_minheight = 200; // ソース画像の最小の高さ: この値より大きい場合はウォーターマークを追加しますpublic $watermark_fontfile = "" ; // フォント ファイル
// フォント サイズ
public $watermark_logo = "config/water.png" ; //ウォーターマーク ロゴのアドレス
public $watermark_transparent = 20 ; mp_originimage = "" //一時画像 (ソース画像)
private $tmp_thumbimage = "" ; //一時画像 (サムネイル)
private $tmp_waterimage = "" ; //一時画像 (ウォーターマーク ロゴ)
private $ _waterPosition = 2; // サムネイルを生成public Public Function gen_thumbimage(){if($ this-&gt; gt; gt "|| $ this-&gt; thumbimage =" "){_width&lt; ->origin_height < ; $this ->thumb_maxheight) { ;
} else {
if ( $this ->origin_width
} else {
$this ->thumb_maxheight = ( $this ->thumb_maxwidth / $this ->origin_width) * $this ->origin_height;
}
}
$this ->get_imagetype ();
$this ->gen_tmpimage_origin ();
$this ->gen_tmpimage_thumb ();
if ( $this ->tmp_originimage == "" || $this ->tmp_thumbimage == "" ) {
return - 1;
}
imagecopyresampled ( $this ->tmp_thumbimage, $this ->tmp_originimage, 0, 0, 0, 0, $this ->thumb_maxwidth, $this ->thumb_maxheight, $this -& gt;origin_width, $this ->origin_height );
switch ( $this ->imageext) {
case "gif" :
imagegif ( $this ->tmp_thumbimage, $this ->thumbimage );
return 1;
休憩 ;
case "jpg" :
imagejpeg ( $this ->tmp_thumbimage, $this ->thumbimage, $this ->imageQuilty );
return 2;
休憩 ;
case "png" :
imagepng ( $this ->tmp_thumbimage, $this ->thumbimage );
return 3;
休憩 ;
デフォルト :
戻り値 - 2;
休憩 ;
}
}
//追加文字水印
public function add_watermark1() {
if ( $this ->originimage == "" || $this ->watermark_text == "" || $ this ->watermark_fontfile == "" ) {
0 を返す;
}
$this ->get_oriwidthheight ();
if ( $this ->origin_width < $this ->watermark_minwidth || $this ->origin_height < $this ->watermark_minheight) {
return 0;
}
$this ->get_imagetype ();
$this ->gen_tmpimage_origin ();
if ( $this ->tmp_originimage == "" ) {
return - 1;
}
$textcolor = imagecolorallocate ( $this ->tmp_originimage, 255, 0, 0 );
$angle = 0;
$px = $this ->origin_width / 2 - 200;
$py = $this ->origin_height / 2 - 10;
imagettftext ( $this ->tmp_originimage, $this ->watermark_fontsize, $angle , $px , $py , $textcolor , $this ->watermark_fontfile, $this ->watermark_text );
switch ( $this ->imageext) {
case "gif" :
imagegif ( $this ->tmp_originimage, $this ->originimage ) ;
return 1;
休憩 ;
case "jpg" :
imagejpeg ( $this ->tmp_originimage, $this ->originimage, $this ->imageQuilty );
return 2;
休憩 ;
case "png" :
imagepng ( $this ->tmp_originimage, $this ->originimage );
return 3;
休憩 ;
デフォルト :
戻り値 - 2;
休憩 ;
}
}
//ロゴ水印の追加
public function add_watermark2() {
if ( $this ->originimage == "" || $this ->watermark_logo == "" ) {
リターン 0;
}
$this ->get_oriwidthheight ();
if ( $this ->origin_width < $this ->watermark_minwidth || $this ->origin_height < $this ->watermark_minheight) {
return 0;
}
$this ->get_imagetype ();
$this ->gen_tmpimage_origin ();
$this ->gen_tmpimage_waterlogo ();
if ( $this ->tmp_originimage == "" || $this ->tmp_waterimage == "" ) {
return - 1;
}
list ( $logo_width , $logo_height ) = getimagesize ( $this ->watermark_logo );
//正中间
$waterZb = $this ->waterPosition ( $logo_width , $logo_height );
$px = $waterZb [ 'x' ];
$py = $waterZb [ 'y' ];
imagecopymerge ( $this ->tmp_originimage, $this ->tmp_waterimage, $px , $py , 0, 0, $logo_width , $logo_height , $this ->watermark_transparent );
switch ( $this ->imageext) {
case "gif" :
imagegif ( $this ->tmp_originimage, $this ->originimage ) ;
return 1;
休憩 ;
case "jpg" :
imagejpeg ( $this ->tmp_originimage, $this ->originimage, $this ->imageQuilty );
return 2;
休憩;
case "png" :
imagepng ( $this ->tmp_originimage, $this ->originimage );
3 を返します。
休憩 ;
デフォルト :
戻り値 - 2;
休憩 ;
}
}
/**
* 上传缩略图
* 注意上传文件大小制限
*@param String $files $_FILES['upload'] 类型
*@param String $path储的目录默认在/static/attached/
*@param boolean $isWater ウォーターマークを追加するかどうか
*/
public function Upload( $files , $path , $isWater ) {
if ( is_uploaded_file ( $files [ 'tmp_name' ] )) {
$upfile = $files ;
$name = $upfile [名前];
$type = $upfile [タイプ];
$size = $upfile [サイズ];
$tmp_name = $upfile [tmp_name];
$error = $upfile [エラー];
if ( $size > 1048576) {
return array ( 'ステータス' => false, 'メッセージ' => ; "$name图片太大超过1MB" );
}
$rs = $this -> getImageSize ( $tmp_name );
if (! $rs [ 'status' ]) {
$rs [ 'message' ] = $name 。 $rs [ 'メッセージ' ];
$rs を返します。
}
// 创建文件夹
$save_path = getcwd () 。 "/static/attached/" . $パス . "/" ;
$save_url = "./static/attached/" . $パス . "/" ;
$ym = 日付 ( "Ym" );
$save_path .= $ym . "/" ;
$save_url .= $ym . "/" ;
if (! file_exists ( $save_path )) {
mkdir ( $save_path );
}
if ( $error == '0' ) {
$fileType = sub str ( $name , strpos ( $name , "." ) + 1 );$prefix = $this ->getRandPrefix ();
$newName = 日付 ( "YmdHi" ) 。 $prefix . 「。」 。 $ファイルタイプ ;
$filepath = $save_path 。 $newName ;
move_uploaded_file ( $tmp_name , $filepath );
}
if ( $isWater ) {
$this ->water ( $filepath );
}
return array ( 'status' => true, 'message' => $save_url . $newName );
}
}
/***/
public function 水( $image ) {
$this ->watermark_logo = ROOT 。 $this ->ウォーターマーク_ロゴ;
$this ->originimage = $image ;
プライベート関数 getRandPrefix() {
$string = "abcdef ghijklmnopqrstuvwxyz0123456789" ;
$prefix = '' ;
for ( $i = 0; $i
$rand = rand(0、33); ; > "画像形式が正しくありません。JPG または PNG 画像をアップロードしてください。" ; array ( 'status' => false, 'message' = > "現在、画像の幅は 1440px 未満である必要があります"。off 'message' =&gt;"画像の高さは900px未満でなければなりません。現在は「$ height。 "px");
* @param String $thumbHeight サムネイルの高さ
* @return String サムネイル画像の URL ight , $path = "thumb" ) {
// サムネイルを生成
$dir = date ( "Ym" , time () );
$imagefile ;
$imagefile_s = . "/s_" .新しい画像(); /s_" .basename ( $imagefile );ition( $logo_width , $logo_height ) {
using ’ s ’ s ’ s ‐ ‐ ‐ ‐ to / 2; - $logo_height / 2; dth -10;
( 'x' => gt;origin_width, $ this ->origin_height ) size ( $this ->originimage );
; * 元のメソッドでは exif 拡張子を開く必要があります
*/
get_imagetype() {
$ext = $this ->getImgext ( $this ->originimage );
switch ( $ext ) {
case 1 :
$this ->imageext = "gif " ;
ブレーク$this ->imageext = "png" ;
ブレーク ;
デフォルト :
$this ->imageext = "不明" ;
ブレーク ;
}//一時画像(ソース画像)を作成
private function gen_tmpimage_origin() {
= $this ->getImgext ( $this ->originimage );
switch ( $ext ) {
case 1 :
$this ->tmp_originimage = imagecreatefromgif ( $this ->originimage );
$bgcolor = imagecolorallocate ( $this ->tmp_originimage, 0, 0, 0 );
$bgcolortrans = imagecolortransparent ($this ->tmp_originimage, $bgcolor );
休憩 ;
ケース 2 :
$this ->tmp_originimage = imagecreatefromjpeg ( $this ->originimage );
休憩 ;
ケース 3 :
$this ->tmp_originimage = imagecreatefrompng ( $this ->originimage );
imageavealpha ( $this ->tmp_originimage, true );
休憩 ;
デフォルト :
$this ->tmp_originimage = "" ;
休憩 ;
}
}
//创建临時图片(缩略图)
private function gen_tmpimage_thumb() {
$ext = $this ->getImgext ( $this ->originimage );
switch ( $ext ) {
case 1 :
$this ->tmp_thumbimage = imagecreatetruecolor ( $this ->thumb_maxwidth, $これ ->thumb_maxheight );
$bgcolor = imagecolorallocate ( $this ->tmp_thumbimage, 255, 255, 255 );
imagefill ( $this ->tmp_thumbimage, 0, 0, $bgcolor );
休憩 ;
ケース 2 :
$this ->tmp_thumbimage = imagecreatetruecolor ( $this ->thumb_maxwidth, $this ->thumb_maxheight );
休憩 ;
ケース 3 :
$this ->tmp_thumbimage = imagecreatetruecolor ( $this ->thumb_maxwidth, $this ->thumb_maxheight );
$bgcolor = imagecolorallocate ( $this ->tmp_thumbimage, 255, 255, 255 );
imagefill ( $this ->tmp_thumbimage, 0, 0, $bgcolor );
imagealphablending ( $this ->tmp_thumbimage, false );
imageavealpha ( $this ->tmp_thumbimage, true );
休憩 ;
デフォルト :
$this ->tmp_thumbimage = "" ;
休憩 ;
}
}
//创建临時刻图片(LOGO水印)
private function gen_tmpimage_waterlogo() {
$ext = $this ->getImgext ( $this ->watermark_logo );
switch ( $ext ) {
case 1 :
$this ->tmp_waterimage = imagecreatefromgif ( $this ->watermark_logo );
$bgcolor = imagecolorallocate ( $this ->tmp_waterimage, 0, 0, 0 );
$bgcolortrans = imagecolortransparent ($this ->tmp_waterimage, $bgcolor );
休憩 ;
ケース 2 :
$this ->tmp_waterimage = imagecreatefromjpeg ( $this ->watermark_logo );
休憩 ;
ケース 3 :
$this ->tmp_waterimage = imagecreatefrompng ( $this ->watermark_logo );
imageavealpha ( $this ->tmp_waterimage, true );
休憩 ;
デフォルト :
$this ->tmp_waterimage = "" ;
休憩 ;
}
}
/*
* 获取后缀名
*/
public function getImgext( $filename ) {
return exif_imagetype ( $filename );
}
//释放资源
public function __destruct() {
if ( is_object ( $this ->tmp_originimage ) == true) {
imagedestroy ( $this ->tmp_originimage );
}
if ( is_object ( $this ->tmp_thumbimage ) == true) {
imagedestroy ( $this ->tmp_thumbimage );
}
if ( is_object ( $this ->tmp_waterimage ) == true) {
imagedestroy ( $this ->tmp_waterimage );
}
}
}