php 图片操作类,支持生成缩略图,添加水印,上传缩略图
<?php
class
Image {
//类开始
public
$originimage
=
""
;
//源图片文件地址
public
$imageext
=
""
;
//源图片格式
public
$thumbimage
=
""
;
//缩略图文件存放地址
public
$thumb_maxwidth
= 1440;
//缩略图最大宽度
public
$thumb_maxheight
= 900;
//缩略图最大高度
public
$watermark_text
=
""
;
//水印文字内容
public
$watermark_minwidth
= 300;
//源图片最小宽度:大于此值时加水印
public
$watermark_minheight
= 200;
//源图片最小高度:大于此值时加水印
public
$watermark_fontfile
=
""
;
//字体文件
public
$watermark_fontsize
= 14;
//字体大小
public
$watermark_logo
=
"config/water.png"
;
//水印LOGO地址
public
$watermark_transparent
= 20;
//水印LOGO不透明度
private
$origin_width
= 0;
//源图片宽度
private
$origin_height
= 0;
//源图片高度
private
$imageQuilty
= 90;
//图片质量
private
$tmp_originimage
=
""
;
//临时图片(源图片)
private
$tmp_thumbimage
=
""
;
//临时图片(缩略图)
private
$tmp_waterimage
=
""
;
//临时图片(水印LOGO)
private
$_waterPosition
= 2;
//1正中间 2右下角
//生成缩略图
public
function
gen_thumbimage() {
if
(
$this
->originimage ==
""
||
$this
->thumbimage ==
""
) {
return
0;
}
$this
->get_oriwidthheight ();
if
(
$this
->origin_width <
$this
->thumb_maxwidth &&
$this
->origin_height <
$this
->thumb_maxheight) {
$this
->thumb_maxwidth =
$this
->origin_width;
$this
->thumb_maxheight =
$this
->origin_height;
}
else
{
if
(
$this
->origin_width <
$this
->origin_height) {
$this
->thumb_maxwidth = (
$this
->thumb_maxheight /
$this
->origin_height) *
$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
->origin_width,
$this
->origin_height );
switch
(
$this
->imageext) {
case
"gif"
:
imagegif (
$this
->tmp_thumbimage,
$this
->thumbimage );
return
1;
break
;
case
"jpg"
:
imagejpeg (
$this
->tmp_thumbimage,
$this
->thumbimage,
$this
->imageQuilty );
return
2;
break
;
case
"png"
:
imagepng (
$this
->tmp_thumbimage,
$this
->thumbimage );
return
3;
break
;
default
:
return
- 2;
break
;
}
}
//添加文字水印
public
function
add_watermark1() {
if
(
$this
->originimage ==
""
||
$this
->watermark_text ==
""
||
$this
->watermark_fontfile ==
""
) {
return
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;
break
;
case
"jpg"
:
imagejpeg (
$this
->tmp_originimage,
$this
->originimage,
$this
->imageQuilty );
return
2;
break
;
case
"png"
:
imagepng (
$this
->tmp_originimage,
$this
->originimage );
return
3;
break
;
default
:
return
- 2;
break
;
}
}
//添加LOGO水印
public
function
add_watermark2() {
if
(
$this
->originimage ==
""
||
$this
->watermark_logo ==
""
) {
return
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;
break
;
case
"jpg"
:
imagejpeg (
$this
->tmp_originimage,
$this
->originimage,
$this
->imageQuilty );
return
2;
break
;
case
"png"
:
imagepng (
$this
->tmp_originimage,
$this
->originimage );
return
3;
break
;
default
:
return
- 2;
break
;
}
}
/**
* 上传缩略图
* 注意上传文件大小限制
*@param String $files $_FILES['upload'] 类型
*@param String $path 存储的目录 默认在/static/attached/
*@param boolean $isWater 是否添加水印
* @return string $filePath 网页url图片路径
*/
public
function
upload(
$files
,
$path
,
$isWater
) {
if
(
is_uploaded_file
(
$files
[
'tmp_name'
] )) {
$upfile
=
$files
;
$name
=
$upfile
[name];
$type
=
$upfile
[type];
$size
=
$upfile
[size];
$tmp_name
=
$upfile
[tmp_name];
$error
=
$upfile
[error];
if
(
$size
> 1048576) {
return
array
(
'status'
=> false,
'message'
=>
"$name图片太大超过1MB"
);
}
$rs
=
$this
->
getImageSize
(
$tmp_name
);
if
(!
$rs
[
'status'
]) {
$rs
[
'message'
] =
$name
.
$rs
[
'message'
];
return
$rs
;
}
// 创建文件夹
$save_path
=
getcwd
() .
"/static/attached/"
.
$path
.
"/"
;
$save_url
=
"./static/attached/"
.
$path
.
"/"
;
$ym
=
date
(
"Ym"
);
$save_path
.=
$ym
.
"/"
;
$save_url
.=
$ym
.
"/"
;
if
(!
file_exists
(
$save_path
)) {
mkdir
(
$save_path
);
}
if
(
$error
==
'0'
) {
$fileType
=
substr
(
$name
,
strpos
(
$name
,
"."
) + 1 );
$prefix
=
$this
->getRandPrefix ();
$newName
=
date
(
"YmdHi"
) .
$prefix
.
"."
.
$fileType
;
$filepath
=
$save_path
.
$newName
;
move_uploaded_file (
$tmp_name
,
$filepath
);
}
if
(
$isWater
) {
$this
->water (
$filepath
);
}
return
array
(
'status'
=> true,
'message'
=>
$save_url
.
$newName
);
}
}
/**
* 图片增加水印处理
* @param unknown_type $image
*/
public
function
water(
$image
) {
$this
->watermark_logo = ROOT .
$this
->watermark_logo;
$this
->originimage =
$image
;
//LOGO水印
$this
->add_watermark2 ();
}
/**
*
* 获取随机前缀
*/
private
function
getRandPrefix() {
$string
=
"abcdefghijklmnopqrstuvwxyz0123456789"
;
$prefix
=
''
;
for
(
$i
= 0;
$i
< 4;
$i
++) {
$rand
= rand ( 0, 33 );
$prefix
.=
$string
{
$rand
};
}
return
$prefix
;
}
//检测图片大小
private
function
getImageSize
(
$image
) {
list (
$width
,
$height
,
$type
,
$attr
) =
getimagesize
(
$image
);
if
(
$type
!= 2 &&
$type
!= 3) {
return
array
(
'status'
=> false,
'message'
=>
"图片格式不正确,请上传JPG或者PNG图片"
.
$type
);
}
//检测图片大小
if
(
$width
> 1440) {
return
array
(
'status'
=> false,
'message'
=>
"图片宽度请小于1440px,当前为"
.
$width
.
"px"
);
}
if
(
$height
> 900) {
return
array
(
'status'
=> false,
'message'
=>
"图片高度请小于900px,当前为"
.
$height
.
"px"
);
}
return
array
(
'status'
=> true );
}
/**
* 生成缩略图
*
* @param String $imagefile 原始文件
* @param String $thumbWidth 缩略图宽度
* @param String $thumbHeight 缩略图高度
* @return String 缩略图url
*/
public
function
reduceImage(
$imagefile
,
$thumbWidth
,
$thumbHeight
,
$path
=
"thumb"
) {
// 生成缩略图
$dir
=
date
(
"Ym"
, time () );
$imagefile
= ROOT .
$imagefile
;
$imagefile_s
= ROOT .
"static/attached/"
.
$path
.
"/"
.
$dir
.
"/s_"
.
basename
(
$imagefile
);
$imagetrans
=
new
Image ();
$imagetrans
->originimage =
$imagefile
;
$imagetrans
->thumbimage =
$imagefile_s
;
$imagetrans
->thumb_maxwidth =
$thumbWidth
;
$imagetrans
->thumb_maxheight =
$thumbHeight
;
$isokid
=
$imagetrans
->gen_thumbimage ();
return
"./static/attached/"
.
$path
.
"/"
.
$dir
.
"/s_"
.
basename
(
$imagefile
);
}
/**
* 水印位置
* @param int $logo_width
* @param int $logo_height
* @return 水印坐标
*/
private
function
waterPosition(
$logo_width
,
$logo_height
) {
switch
(
$this
->_waterPosition) {
case
1 :
$px
=
$this
->origin_width / 2 -
$logo_width
/ 2;
$py
=
$this
->origin_height / 2 -
$logo_height
/ 2;
break
;
case
2 :
$px
=
$this
->origin_width -
$logo_width
- 10;
$py
=
$this
->origin_height -
$logo_height
- 10;
break
;
default
:
$px
=
$this
->origin_width / 2 -
$logo_width
/ 2;
$py
=
$this
->origin_height / 2 -
$logo_height
/ 2;
break
;
}
return
array
(
'x'
=>
$px
,
'y'
=>
$py
);
}
//获取图片尺寸
private
function
get_oriwidthheight() {
list (
$this
->origin_width,
$this
->origin_height ) =
getimagesize
(
$this
->originimage );
return
1;
}
/*
* 检测图片格式
* 原方法需要开启exif 扩展
*/
private
function
get_imagetype() {
$ext
=
$this
->getImgext (
$this
->originimage );
switch
(
$ext
) {
case
1 :
$this
->imageext =
"gif"
;
break
;
case
2 :
$this
->imageext =
"jpg"
;
break
;
case
3 :
$this
->imageext =
"png"
;
break
;
default
:
$this
->imageext =
"unknown"
;
break
;
}
}
//创建临时图片(源图片)
private
function
gen_tmpimage_origin() {
$ext
=
$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
);
break
;
case
2 :
$this
->tmp_originimage = imagecreatefromjpeg (
$this
->originimage );
break
;
case
3 :
$this
->tmp_originimage = imagecreatefrompng (
$this
->originimage );
imagesavealpha (
$this
->tmp_originimage, true );
break
;
default
:
$this
->tmp_originimage =
""
;
break
;
}
}
//创建临时图片(缩略图)
private
function
gen_tmpimage_thumb() {
$ext
=
$this
->getImgext (
$this
->originimage );
switch
(
$ext
) {
case
1 :
$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
);
break
;
case
2 :
$this
->tmp_thumbimage = imagecreatetruecolor (
$this
->thumb_maxwidth,
$this
->thumb_maxheight );
break
;
case
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 );
imagesavealpha (
$this
->tmp_thumbimage, true );
break
;
default
:
$this
->tmp_thumbimage =
""
;
break
;
}
}
//创建临时图片(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
);
break
;
case
2 :
$this
->tmp_waterimage = imagecreatefromjpeg (
$this
->watermark_logo );
break
;
case
3 :
$this
->tmp_waterimage = imagecreatefrompng (
$this
->watermark_logo );
imagesavealpha (
$this
->tmp_waterimage, true );
break
;
default
:
$this
->tmp_waterimage =
""
;
break
;
}
}
/*
* 获取后缀名
*/
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 );
}
}
}