<p><?php</p>
<br />
class
picture{<br />
var
$PICTURE_URL
; //要处理的图片<br />
var
$DEST_URL
=
"temp__01.jpg"
; //生成目标图片位置<br />
var
$PICTURE_CREATE
; //要创建的图片<br />
var
$TURE_COLOR
; //新建一个真彩图象<br /> <br /> <br />
var
$PICTURE_WIDTH
; //原图片宽度<br />
var
$PICTURE_HEIGHT
; //原图片高度<br /> <br /> <br />
<br />
var
$MARK_TYPE
= 1;<br />
var
$WORD
; //经过UTF-8后的文字<br />
var
$WORD_X
; //文字横坐标<br />
var
$WORD_Y
; //文字纵坐标<br />
var
$FONT_TYPE
; //字体类型<br />
var
$FONT_SIZE
=
"12"
; //字体大小<br />
var
$FONT_WORD
; //文字<br />
var
$ANGLE
= 0; //文字的角度,默认为0<br />
var
$FONT_COLOR
=
"#000000"
; //文字颜色<br />
var
$FONT_PATH
=
"font/simkai.ttf"
; //字体库,默认为宋体<br />
var
$FORCE_URL
; //水印图片<br />
var
$FORCE_X
= 0; //水印横坐标<br />
var
$FORCE_Y
= 0; //水印纵坐标<br />
var
$FORCE_START_X
= 0; //切起水印的图片横坐标<br />
var
$FORCE_START_Y
= 0; //切起水印的图片纵坐标<br /> <br /> <br />
var
$PICTURE_TYPE
; //图片类型<br />
var
$PICTURE_MIME
; //输出的头部<br /> <br /> <br />
<br />
var
$ZOOM
= 1; //缩放类型<br />
var
$ZOOM_MULTIPLE
; //缩放比例<br />
var
$ZOOM_WIDTH
; //缩放宽度<br />
var
$ZOOM_HEIGHT
; //缩放高度<br /> <br /> <br />
<br />
var
$CUT_TYPE
= 1; //裁切类型<br />
var
$CUT_X
= 0; //裁切的横坐标<br />
var
$CUT_Y
= 0; //裁切的纵坐标<br />
var
$CUT_WIDTH
= 100; //裁切的宽度<br />
var
$CUT_HEIGHT
= 100; //裁切的高度<br /> <br /> <br />
<br />
var
$SHARP
=
"7.0"
; //锐化程度<br /> <br /> <br />
<br />
var
$ALPHA
=
'100'
; //透明度在0-127之间<br />
var
$ALPHA_X
=
"90"
;<br />
var
$ALPHA_Y
=
"50"
;<br /> <br />
<br />
var
$CIRCUMROTATE
=
"90.0"
; //注意,必须为浮点数<br /> <br /> <br />
<br />
var
$ERROR
=
array
(<br />
'unalviable'
=>
'没有找到相关图片!'
<br /> );<br /> <br />
<br />
function
__construct(
$PICTURE_URL
){<br /> <br />
$this
-> get_info(
$PICTURE_URL
);<br /> <br /> }<br />
function
get_info(
$PICTURE_URL
){<br />
<br /> @
$SIZE
=
getimagesize
(
$PICTURE_URL
);<br />
if
(!
$SIZE
){<br />
exit
(
$this
-> ERROR[
'unalviable'
]);<br /> }<br /> <br /> // 得到原图片的信息类型、宽度、高度<br />
$this
-> PICTURE_MIME =
$SIZE
[
'mime'
];<br />
$this
-> PICTURE_WIDTH =
$SIZE
[0];<br />
$this
-> PICTURE_HEIGHT =
$SIZE
[1];<br /> <br /> // 创建图片<br />
switch
(
$SIZE
[2]){<br />
case
1:<br />
$this
-> PICTURE_CREATE = imagecreatefromgif(
$PICTURE_URL
);<br />
$this
-> PICTURE_TYPE =
"imagejpeg"
;<br />
$this
-> PICTURE_EXT =
"jpg"
;<br />
break
;<br />
case
2:<br />
$this
-> PICTURE_CREATE = imagecreatefromjpeg(
$PICTURE_URL
);<br />
$this
-> PICTURE_TYPE =
"imagegif"
;<br />
$this
-> PICTURE_EXT =
"gif"
;<br />
break
;<br />
case
3:<br />
$this
-> PICTURE_CREATE = imagecreatefrompng(
$PICTURE_URL
);<br />
$this
-> PICTURE_TYPE =
"imagepng"
;<br />
$this
-> PICTURE_EXT =
"png"
;<br />
break
;<br /> }<br /> <br />
<br /> preg_match_all(
"/([0-f]){2,2}/i"
,
$this
-> FONT_COLOR,
$MATCHES
);<br />
if
(
count
(
$MATCHES
) == 3){<br />
$this
-> RED = hexdec(
$MATCHES
[0][0]);<br />
$this
-> GREEN = hexdec(
$MATCHES
[0][1]);<br />
$this
-> BLUE = hexdec(
$MATCHES
[0][2]);<br /> }<br /> }<br /><br /> #
end
of __construct<br />
<br />
function
hex2dec(){<br /> preg_match_all(
"/([0-f]){2,2}/i"
,
$this
-> FONT_COLOR,
$MATCHES
);<br />
if
(
count
(
$MATCHES
) == 3){<br />
$this
-> RED = hexdec(
$MATCHES
[0][0]);<br />
$this
-> GREEN = hexdec(
$MATCHES
[0][1]);<br />
$this
-> BLUE = hexdec(
$MATCHES
[0][2]);<br /> }<br /> }<br /><br /> // 缩放类型<br />
function
zoom_type(
$ZOOM_TYPE
){<br />
$this
-> ZOOM =
$ZOOM_TYPE
;<br /> }<br /><br /> // 对图片进行缩放,如果不指定高度和宽度就进行缩放<br />
function
zoom(){<br /> // 缩放的大小<br />
if
(
$this
-> ZOOM == 0){<br />
$this
-> ZOOM_WIDTH =
$this
-> PICTURE_WIDTH *
$this
-> ZOOM_MULTIPLE;<br />
$this
-> ZOOM_HEIGHT =
$this
-> PICTURE_HEIGHT *
$this
-> ZOOM_MULTIPLE;<br /> }<br /> // 新建一个真彩图象<br />
$this
-> TRUE_COLOR = imagecreatetruecolor(
$this
-> ZOOM_WIDTH,
$this
-> ZOOM_HEIGHT);<br />
$WHITE
= imagecolorallocate(
$this
-> TRUE_COLOR, 255, 255, 255);<br /> imagefilledrectangle(
$this
-> TRUE_COLOR, 0, 0,
$this
-> ZOOM_WIDTH,
$this
-> ZOOM_HEIGHT,
$WHITE
);<br /> imagecopyresized(
$this
-> TRUE_COLOR,
$this
-> PICTURE_CREATE, 0, 0, 0, 0,
$this
-> ZOOM_WIDTH,
$this
-> ZOOM_HEIGHT,
$this
-> PICTURE_WIDTH,
$this
-> PICTURE_HEIGHT);<br /> }<br /><br /> #
end
of zoom<br />// 裁切图片,按坐标或自动<br />
function
cut(){<br />
$this
-> TRUE_COLOR = imagecreatetruecolor(
$this
-> CUT_WIDTH,
$this
-> CUT_WIDTH);<br /> imagecopy(
$this
-> TRUE_COLOR,
$this
-> PICTURE_CREATE, 0, 0,
$this
-> CUT_X,
$this
-> CUT_Y,
$this
-> CUT_WIDTH,
$this
-> CUT_HEIGHT);<br /> }<br /><br /> #
end
of cut<br />
<br />
function
_mark_text(){<br />
$this
-> TRUE_COLOR = imagecreatetruecolor(
$this
-> PICTURE_WIDTH,
$this
-> PICTURE_HEIGHT);<br />
$this
-> WORD = mb_convert_encoding(
$this
-> FONT_WORD,
'utf-8'
,
'gb2312'
);<br />
<br />
$TEMP
= imagettfbbox(
$this
-> FONT_SIZE, 0,
$this
-> FONT_PATH,
$this
-> WORD);<br />
$WORD_LENGTH
=
strlen
(
$this
-> WORD);<br />
$WORD_WIDTH
=
$TEMP
[2] -
$TEMP
[6];<br />
$WORD_HEIGHT
=
$TEMP
[3] -
$TEMP
[7];<br />
<br />
if
(
$this
-> WORD_X ==
""
){<br />
$this
-> WORD_X =
$this
-> PICTURE_WIDTH -
$WORD_WIDTH
;<br /> }<br />
if
(
$this
-> WORD_Y ==
""
){<br />
$this
-> WORD_Y =
$this
-> PICTURE_HEIGHT -
$WORD_HEIGHT
;<br /> }<br /> imagesettile(
$this
-> TRUE_COLOR,
$this
-> PICTURE_CREATE);<br /> imagefilledrectangle(
$this
-> TRUE_COLOR, 0, 0,
$this
-> PICTURE_WIDTH,
$this
-> PICTURE_HEIGHT, IMG_COLOR_TILED);<br />
$TEXT2
= imagecolorallocate(
$this
-> TRUE_COLOR,
$this
-> RED,
$this
-> GREEN,
$this
-> Blue);<br /> imagettftext(
$this
-> TRUE_COLOR,
$this
-> FONT_SIZE,
$this
-> ANGLE,
$this
-> WORD_X,
$this
-> WORD_Y,
$TEXT2
,
$this
-> FONT_PATH,
$this
-> WORD);<br /> }<br /><br />
<br />
function
_mark_picture(){<br /> <br />
<br /> @
$SIZE
=
getimagesize
(
$this
-> FORCE_URL);<br />
if
(!
$SIZE
){<br />
exit
(
$this
-> ERROR[
'unalviable'
]);<br /> }<br />
$FORCE_PICTURE_WIDTH
=
$SIZE
[0];<br />
$FORCE_PICTURE_HEIGHT
=
$SIZE
[1];<br /> // 创建水印图片<br />
switch
(
$SIZE
[2]){<br />
case
1:<br />
$FORCE_PICTURE_CREATE
= imagecreatefromgif(
$this
-> FORCE_URL);<br />
$FORCE_PICTURE_TYPE
=
"gif"
;<br />
break
;<br />
case
2:<br />
$FORCE_PICTURE_CREATE
= imagecreatefromjpeg(
$this
-> FORCE_URL);<br />
$FORCE_PICTURE_TYPE
=
"jpg"
;<br />
break
;<br />
case
3:<br />
$FORCE_PICTURE_CREATE
= imagecreatefrompng(
$this
-> FORCE_URL);<br />
$FORCE_PICTURE_TYPE
=
"png"
;<br />
break
;<br /> }<br />
<br />
$this
-> NEW_PICTURE =
$this
-> PICTURE_CREATE;<br />
if
(
$FORCE_PICTURE_WIDTH
>
$this
-> PICTURE_WIDTH){<br />
$CREATE_WIDTH
=
$FORCE_PICTURE_WIDTH
-
$this
-> FORCE_START_X;<br /> }
else
{<br />
$CREATE_WIDTH
=
$this
-> PICTURE_WIDTH;<br /> }<br />
if
(
$FORCE_PICTURE_HEIGHT
>
$this
-> PICTURE_HEIGHT){<br />
$CREATE_HEIGHT
=
$FORCE_PICTURE_HEIGHT
-
$this
-> FORCE_START_Y;<br /> }
else
{<br />
$CREATE_HEIGHT
=
$this
-> PICTURE_HEIGHT;<br /> }<br />
<br />
$NEW_PICTURE_CREATE
= imagecreatetruecolor(
$CREATE_WIDTH
,
$CREATE_HEIGHT
);<br />
$WHITE
= imagecolorallocate(
$NEW_PICTURE_CREATE
, 255, 255, 255);<br />
<br /> imagecopy(
$NEW_PICTURE_CREATE
,
$this
-> PICTURE_CREATE, 0, 0, 0, 0,
$this
-> PICTURE_WIDTH,
$this
-> PICTURE_HEIGHT);<br /><br />
<br /> imagecopy(
$NEW_PICTURE_CREATE
,
$FORCE_PICTURE_CREATE
,
$this
-> FORCE_X,
$this
-> FORCE_Y,
$this
-> FORCE_START_X,
$this
-> FORCE_START_Y,
$FORCE_PICTURE_WIDTH
,
$FORCE_PICTURE_HEIGHT
);<br />
$this
-> TRUE_COLOR =
$NEW_PICTURE_CREATE
;<br /> }<br /> #
end
of mark<br />
function
alpha_(){<br />
$this
-> TRUE_COLOR = imagecreatetruecolor(
$this
-> PICTURE_WIDTH,
$this
-> PICTURE_HEIGHT);<br />
$rgb
=
"#CDCDCD"
;<br />
$tran_color
=
"#000000"
;<br />
for
(
$j
= 0;
$j
<=
$this
-> PICTURE_HEIGHT-1;
$j
++){<br />
for
(
$i
= 0;
$i
<=
$this
-> PICTURE_WIDTH-1;
$i
++)<br /> {<br />
$rgb
= imagecolorat(
$this
-> PICTURE_CREATE,
$i
,
$j
);<br />
$r
= (
$rgb
>> 16) & 0xFF;<br />
$g
= (
$rgb
>> 8) & 0xFF;<br />
$b
=
$rgb
& 0xFF;<br />
$now_color
= imagecolorallocate(
$this
-> PICTURE_CREATE,
$r
,
$g
,
$b
);<br />
if
(
$now_color
==
$tran_color
)<br /> {<br />
continue
;<br /> }<br />
else
<br /> {<br />
$color
= imagecolorallocatealpha(
$this
-> PICTURE_CREATE,
$r
,
$g
,
$b
,
$ALPHA
);<br /> imagesetpixel(
$this
-> PICTURE_CREATE,
$ALPHA_X
+
$i
,
$ALPHA_Y
+
$j
,
$color
);<br /> }<br />
$this
-> TRUE_COLOR =
$this
-> PICTURE_CREATE;<br /> <br /> }<br /> }<br /> }<br /><br />
<br />
function
turn_y(){<br />
$this
-> TRUE_COLOR = imagecreatetruecolor(
$this
-> PICTURE_WIDTH,
$this
-> PICTURE_HEIGHT);<br />
for
(
$x
= 0;
$x
<
$this
-> PICTURE_WIDTH;
$x
++)<br />{<br /> imagecopy(
$this
-> TRUE_COLOR,
$this
-> PICTURE_CREATE,
$this
-> PICTURE_WIDTH -
$x
- 1, 0,
$x
, 0, 1,
$this
-> PICTURE_HEIGHT);<br /> }<br /> }<br />
<br />
function
turn_x(){<br />
$this
-> TRUE_COLOR = imagecreatetruecolor(
$this
-> PICTURE_WIDTH,
$this
-> PICTURE_HEIGHT);<br />
for
(
$y
= 0;
$y
<
$this
-> PICTURE_HEIGHT;
$y
++){<br /> imagecopy(
$this
-> TRUE_COLOR,
$this
-> PICTURE_CREATE, 0,
$this
-> PICTURE_HEIGHT -
$y
- 1, 0,
$y
,
$this
-> PICTURE_WIDTH, 1);<br /> }<br /> }<br /><br />
<br />
function
turn(){<br />
$this
-> TRUE_COLOR = imagecreatetruecolor(
$this
-> PICTURE_WIDTH,
$this
-> PICTURE_HEIGHT);<br /> imageCopyResized(
$this
-> TRUE_COLOR,
$this
-> PICTURE_CREATE, 0, 0, 0, 0,
$this
-> PICTURE_WIDTH,
$this
-> PICTURE_HEIGHT,
$this
-> PICTURE_WIDTH,
$this
-> PICTURE_HEIGHT);<br />
$WHITE
= imagecolorallocate(
$this
-> TRUE_COLOR, 255, 255, 255);<br />
$this
-> TRUE_COLOR = imagerotate (
$this
-> TRUE_COLOR,
$this
-> CIRCUMROTATE,
$WHITE
);<br /> }<br />
<br />
function
sharp(){<br />
$this
-> TRUE_COLOR = imagecreatetruecolor(
$this
-> PICTURE_WIDTH,
$this
-> PICTURE_HEIGHT);<br />
$cnt
= 0;<br />
for
(
$x
= 0;
$x
<
$this
-> PICTURE_WIDTH;
$x
++){<br />
for
(
$y
= 0;
$y
<
$this
-> PICTURE_HEIGHT;
$y
++){<br />
$src_clr1
= imagecolorsforindex(
$this
-> TRUE_COLOR, imagecolorat(
$this
-> PICTURE_CREATE,
$x
-1,
$y
-1));<br />
$src_clr2
= imagecolorsforindex(
$this
-> TRUE_COLOR, imagecolorat(
$this
-> PICTURE_CREATE,
$x
,
$y
));<br />
$r
=
intval
(
$src_clr2
[
"red"
] +
$this
-> SHARP * (
$src_clr2
[
"red"
] -
$src_clr1
[
"red"
]));<br />
$g
=
intval
(
$src_clr2
[
"green"
] +
$this
-> SHARP * (
$src_clr2
[
"green"
] -
$src_clr1
[
"green"
]));<br />
$b
=
intval
(
$src_clr2
[
"blue"
] +
$this
-> SHARP * (
$src_clr2
[
"blue"
] -
$src_clr1
[
"blue"
]));<br />
$r
= min(255, max(
$r
, 0));<br />
$g
= min(255, max(
$g
, 0));<br />
$b
= min(255, max(
$b
, 0));<br />
if
((
$DST_CLR
= imagecolorexact(
$this
-> PICTURE_CREATE,
$r
,
$g
,
$b
)) == -1)<br />
$DST_CLR
= imagecolorallocate(
$this
-> PICTURE_CREATE,
$r
,
$g
,
$b
);<br />
$cnt
++;<br />
if
(
$DST_CLR
== -1)
die
(
"color allocate faile at $x, $y ($cnt)."
);<br /> imagesetpixel(
$this
-> TRUE_COLOR,
$x
,
$y
,
$DST_CLR
);<br /> }<br /> }<br /> }<br />
<br />
function
return_color(){<br />
<br />
$NEW_PICTURE_CREATE
= imagecreate(
$this
-> PICTURE_WIDTH,
$this
-> PICTURE_HEIGHT);<br />
$WHITE
= imagecolorallocate(
$NEW_PICTURE_CREATE
, 255, 255, 255);<br />
<br /> imagecopy(
$NEW_PICTURE_CREATE
,
$this
-> PICTURE_CREATE, 0, 0, 0, 0,
$this
-> PICTURE_WIDTH,
$this
-> PICTURE_HEIGHT);<br />
$this
-> TRUE_COLOR =
$NEW_PICTURE_CREATE
;<br /> }<br /><br />
<br />
function
show(){<br /> // 判断浏览器,若是IE就不发送头<br />
if
(isset(
$_SERVER
[
'HTTP_USER_AGENT'
]))<br /> {<br />
$ua
=
strtoupper
(
$_SERVER
[
'HTTP_USER_AGENT'
]);<br />
if
(!preg_match(
'/^.*MSIE.*\)$/i'
,
$ua
))<br /> {<br /> header(
"Content-type:$this->PICTURE_MIME"
);<br /> }<br /> }<br />
$OUT
=
$this
-> PICTURE_TYPE;<br />
$OUT
(
$this
-> TRUE_COLOR);<br /> }<br /><br />
<br />
function
save_picture(){<br /> // 以 JPEG 格式将图像输出到浏览器或文件<br />
$OUT
=
$this
-> PICTURE_TYPE;<br />
if
(function_exists(
$OUT
)){<br /> // 判断浏览器,若是IE就不发送头<br />
if
(isset(
$_SERVER
[
'HTTP_USER_AGENT'
]))<br /> {<br />
$ua
=
strtoupper
(
$_SERVER
[
'HTTP_USER_AGENT'
]);<br />
if
(!preg_match(
'/^.*MSIE.*\)$/i'
,
$ua
))<br /> {<br /> header(
"Content-type:$this->PICTURE_MIME"
);<br /> }<br /> }<br />
if
(!
$this
-> TRUE_COLOR){<br />
exit
(
$this
-> ERROR[
'unavilable'
]);<br /> }
else
{<br />
$OUT
(
$this
-> TRUE_COLOR,
$this
-> DEST_URL);<br />
$OUT
(
$this
-> TRUE_COLOR);<br /> }<br /> }<br /> }<br />
<br />
function
__destruct(){<br />
<br /> imagedestroy(
$this
-> TRUE_COLOR);<br /> imagedestroy(
$this
-> PICTURE_CREATE);<br /> }<br /> #
end
of
class
<br />}<br />?>