ホームページ >バックエンド開発 >PHPチュートリアル >PHP 画像操作クラス。サムネイルの生成、透かしの追加、サムネイルのアップロードをサポートします。

PHP 画像操作クラス。サムネイルの生成、透かしの追加、サムネイルのアップロードをサポートします。

WBOY
WBOYオリジナル
2016-06-23 09:15:11765ブラウズ

クラス画像 {

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 "|| $ this-> 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 );

}

}

}

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。