<?php
class
imagecls
{
var
$file
=
array
();
var
$dir
=
''
;
var
$error_code
= 0;
var
$max_size
= -1;
function
es_imagecls()
{
}
private
function
checkSize(
$size
)
{
return
!(
$size
>
$this
->max_size) || (-1 ==
$this
->max_size);
}
function
init(
$file
,
$dir
=
'temp'
)
{
if
(!
is_array
(
$file
) ||
empty
(
$file
)
|| !
$this
->isUploadFile(
$file
[
'tmp_name'
]) || trim(
$file
[
'name'
]) ==
''
||
$file
[
'size'
] == 0)
{
$this
->file =
array
();
$this
->error_code = -1;
return
false;
}
else
{
$file
[
'size'
] =
intval
(
$file
[
'size'
]);
$file
[
'name'
] = trim(
$file
[
'name'
]);
$file
[
'thumb'
] =
''
;
$file
[
'ext'
] =
$this
->fileExt(
$file
[
'name'
]);
$file
[
'name'
] = htmlspecialchars(
$file
[
'name'
], ENT_QUOTES);
$file
[
'is_image'
] =
$this
->isImageExt(
$file
[
'ext'
]);
$file
[
'file_dir'
] =
$this
->getTargetDir(
$dir
);
$file
[
'prefix'
] = md5(microtime(true)).rand(10,99);
$file
[
'target'
] =
"./public/"
.
$file
[
'file_dir'
].
'/'
.
$file
[
'prefix'
].
'.jpg'
;
$file
[
'local_target'
] = APP_ROOT_PATH.
"public/"
.
$file
[
'file_dir'
].
'/'
.
$file
[
'prefix'
].
'.jpg'
;
$this
->file = &
$file
;
$this
->error_code = 0;
return
true;
}
}
function
save()
{
if
(
empty
(
$this
->file) ||
empty
(
$this
->file[
'tmp_name'
]))
$this
->error_code = -101;
elseif
(!
$this
->checkSize(
$this
->file[
'size'
]))
$this
->error_code = -105;
elseif
(!
$this
->file[
'is_image'
])
$this
->error_code = -102;
elseif
(!
$this
->saveFile(
$this
->file[
'tmp_name'
],
$this
->file[
'local_target'
]))
$this
->error_code = -103;
elseif
(
$this
->file[
'is_image'
] &&
(!
$this
->file[
'image_info'
] =
$this
->getImageInfo(
$this
->file[
'local_target'
], true)))
{
$this
->error_code = -104;
@unlink(
$this
->file[
'local_target'
]);
}
else
{
$this
->error_code = 0;
return
true;
}
return
false;
}
function
error()
{
return
$this
->error_code;
}
function
fileExt(
$file_name
)
{
return
addslashes
(
strtolower
(
substr
(
strrchr
(
$file_name
,
'.'
), 1, 10)));
}
function
isImageExt(
$ext
)
{
static
$img_ext
=
array
(
'jpg'
,
'jpeg'
,
'png'
,
'bmp'
,
'gif'
,
'giff'
);
return
in_array(
$ext
,
$img_ext
) ? 1 : 0;
}
function
getImageInfo(
$target
)
{
$ext
= es_imagecls::fileExt(
$target
);
$is_image
= es_imagecls::isImageExt(
$ext
);
if
(!
$is_image
)
return
false;
elseif
(!
is_readable
(
$target
))
return
false;
elseif
(
$image_info
= @
getimagesize
(
$target
))
{
list(
$width
,
$height
,
$type
) = !
empty
(
$image_info
) ?
$image_info
:
array
(
''
,
''
,
''
);
$size
=
$width
*
$height
;
if
(
$is_image
&& !in_array(
$type
,
array
(1,2,3,6,13)))
return
false;
$image_info
[
'type'
] =
strtolower
(
substr
(image_type_to_extension(
$image_info
[2]),1));
return
$image_info
;
}
else
return
false;
}
function
isUploadFile(
$source
)
{
return
$source
&& (
$source
!=
'none'
) &&
(
is_uploaded_file
(
$source
) ||
is_uploaded_file
(
str_replace
(
''
,
''
,
$source
)));
}
function
getTargetDir(
$dir
)
{
if
(!
is_dir
(APP_ROOT_PATH.
"public/"
.
$dir
)) {
@
mkdir
(APP_ROOT_PATH.
"public/"
.
$dir
);
@
chmod
(APP_ROOT_PATH.
"public/"
.
$dir
, 0777);
}
return
$dir
;
}
private
function
saveFile(
$source
,
$target
)
{
if
(!es_imagecls::isUploadFile(
$source
))
$succeed
= false;
elseif
(@
copy
(
$source
,
$target
))
$succeed
= true;
elseif
(function_exists(
'move_uploaded_file'
) &&
@move_uploaded_file(
$source
,
$target
))
$succeed
= true;
elseif
(@
is_readable
(
$source
) &&
(@
$fp_s
=
fopen
(
$source
,
'rb'
)) && (@
$fp_t
=
fopen
(
$target
,
'wb'
)))
{
while
(!
feof
(
$fp_s
))
{
$s
= @
fread
(
$fp_s
, 1024 * 512);
@fwrite(
$fp_t
,
$s
);
}
fclose(
$fp_s
);
fclose(
$fp_t
);
$succeed
= true;
}
if
(
$succeed
)
{
$this
->error_code = 0;
@
chmod
(
$target
, 0644);
@unlink(
$source
);
}
else
{
$this
->error_code = 0;
}
return
$succeed
;
}
public
function
thumb(
$image
,
$maxWidth
=200,
$maxHeight
=50,
$gen
= 0,
$interlace
=true,
$filepath
=
''
,
$is_preview
= true)
{
$info
= es_imagecls::getImageInfo(
$image
);
if
(
$info
!== false)
{
$srcWidth
=
$info
[0];
$srcHeight
=
$info
[1];
$type
=
$info
[
'type'
];
$interlace
=
$interlace
? 1:0;
unset(
$info
);
if
(
$maxWidth
> 0 &&
$maxHeight
> 0)
$scale
= min(
$maxWidth
/
$srcWidth
,
$maxHeight
/
$srcHeight
);
elseif
(
$maxWidth
== 0)
$scale
=
$maxHeight
/
$srcHeight
;
elseif
(
$maxHeight
== 0)
$scale
=
$maxWidth
/
$srcWidth
;
$paths
=
pathinfo
(
$image
);
$paths
[
'filename'
] = trim(
strtolower
(
$paths
[
'basename'
]),
"."
.
strtolower
(
$paths
[
'extension'
]));
$basefilename
=
explode
(
"_"
,
$paths
[
'filename'
]);
$basefilename
=
$basefilename
[0];
if
(
empty
(
$filepath
))
{
if
(
$is_preview
)
$thumbname
=
$paths
[
'dirname'
].
'/'
.
$basefilename
.
'_'
.
$maxWidth
.
'x'
.
$maxHeight
.
'.jpg'
;
else
$thumbname
=
$paths
[
'dirname'
].
'/'
.
$basefilename
.
'o_'
.
$maxWidth
.
'x'
.
$maxHeight
.
'.jpg'
;
}
else
$thumbname
=
$filepath
;
$thumburl
=
str_replace
(APP_ROOT_PATH,
'./'
,
$thumbname
);
if
(
$scale
>= 1)
{
$width
=
$srcWidth
;
$height
=
$srcHeight
;
if
(!
$is_preview
)
{
file_put_contents
(
$thumbname
,
file_get_contents
(
$image
));
return
array
(
'url'
=>
$thumburl
,
'path'
=>
$thumbname
);
}
}
else
{
$width
= (int)(
$srcWidth
*
$scale
);
$height
= (int)(
$srcHeight
*
$scale
);
}
if
(
$gen
== 1)
{
$width
=
$maxWidth
;
$height
=
$maxHeight
;
}
$createFun
=
'imagecreatefrom'
.(
$type
==
'jpg'
?
'jpeg'
:
$type
);
if
(!function_exists(
$createFun
))
$createFun
=
'imagecreatefromjpeg'
;
$srcImg
=
$createFun
(
$image
);
if
(
$type
!=
'gif'
&& function_exists(
'imagecreatetruecolor'
))
$thumbImg
= imagecreatetruecolor(
$width
,
$height
);
else
$thumbImg
= imagecreate(
$width
,
$height
);
$x
= 0;
$y
= 0;
if
(
$gen
== 1 &&
$maxWidth
> 0 &&
$maxHeight
> 0)
{
$resize_ratio
=
$maxWidth
/
$maxHeight
;
$src_ratio
=
$srcWidth
/
$srcHeight
;
if
(
$src_ratio
>=
$resize_ratio
)
{
$x
= (
$srcWidth
- (
$resize_ratio
*
$srcHeight
)) / 2;
$width
= (
$height
*
$srcWidth
) /
$srcHeight
;
}
else
{
$y
= (
$srcHeight
- ( (1 /
$resize_ratio
) *
$srcWidth
)) / 2;
$height
= (
$width
*
$srcHeight
) /
$srcWidth
;
}
}
if
(function_exists(
"imagecopyresampled"
))
imagecopyresampled(
$thumbImg
,
$srcImg
, 0, 0,
$x
,
$y
,
$width
,
$height
,
$srcWidth
,
$srcHeight
);
else
imagecopyresized(
$thumbImg
,
$srcImg
, 0, 0,
$x
,
$y
,
$width
,
$height
,
$srcWidth
,
$srcHeight
);
if
(
'gif'
==
$type
||
'png'
==
$type
) {
$background_color
= imagecolorallocate(
$thumbImg
, 0,255,0);
imagecolortransparent(
$thumbImg
,
$background_color
);
}
if
(
'jpg'
==
$type
||
'jpeg'
==
$type
)
imageinterlace(
$thumbImg
,
$interlace
);
imagejpeg(
$thumbImg
,
$thumbname
,100);
imagedestroy(
$thumbImg
);
imagedestroy(
$srcImg
);
return
array
(
'url'
=>
$thumburl
,
'path'
=>
$thumbname
);
}
return
false;
}
public
function
make_thumb(
$srcImg
,
$srcWidth
,
$srcHeight
,
$type
,
$maxWidth
=200,
$maxHeight
=50,
$gen
= 0)
{
$interlace
=
$interlace
? 1:0;
if
(
$maxWidth
> 0 &&
$maxHeight
> 0)
$scale
= min(
$maxWidth
/
$srcWidth
,
$maxHeight
/
$srcHeight
);
elseif
(
$maxWidth
== 0)
$scale
=
$maxHeight
/
$srcHeight
;
elseif
(
$maxHeight
== 0)
$scale
=
$maxWidth
/
$srcWidth
;
if
(
$scale
>= 1)
{
$width
=
$srcWidth
;
$height
=
$srcHeight
;
}
else
{
$width
= (int)(
$srcWidth
*
$scale
);
$height
= (int)(
$srcHeight
*
$scale
);
}
if
(
$gen
== 1)
{
$width
=
$maxWidth
;
$height
=
$maxHeight
;
}
if
(
$type
!=
'gif'
&& function_exists(
'imagecreatetruecolor'
))
$thumbImg
= imagecreatetruecolor(
$width
,
$height
);
else
$thumbImg
= imagecreatetruecolor(
$width
,
$height
);
$x
= 0;
$y
= 0;
if
(
$gen
== 1 &&
$maxWidth
> 0 &&
$maxHeight
> 0)
{
$resize_ratio
=
$maxWidth
/
$maxHeight
;
$src_ratio
=
$srcWidth
/
$srcHeight
;
if
(
$src_ratio
>=
$resize_ratio
)
{
$x
= (
$srcWidth
- (
$resize_ratio
*
$srcHeight
)) / 2;
$width
= (
$height
*
$srcWidth
) /
$srcHeight
;
}
else
{
$y
= (
$srcHeight
- ( (1 /
$resize_ratio
) *
$srcWidth
)) / 2;
$height
= (
$width
*
$srcHeight
) /
$srcWidth
;
}
}
if
(function_exists(
"imagecopyresampled"
))
imagecopyresampled(
$thumbImg
,
$srcImg
, 0, 0,
$x
,
$y
,
$width
,
$height
,
$srcWidth
,
$srcHeight
);
else
imagecopyresized(
$thumbImg
,
$srcImg
, 0, 0,
$x
,
$y
,
$width
,
$height
,
$srcWidth
,
$srcHeight
);
if
(
'gif'
==
$type
||
'png'
==
$type
) {
$background_color
= imagecolorallocate(
$thumbImg
, 255,255,255);
imagecolortransparent(
$thumbImg
,
$background_color
);
}
if
(
'jpg'
==
$type
||
'jpeg'
==
$type
)
imageinterlace(
$thumbImg
,
$interlace
);
return
$thumbImg
;
}
public
function
water(
$source
,
$water
,
$alpha
=80,
$position
=
"0"
)
{
if
(!
file_exists
(
$source
)||!
file_exists
(
$water
))
return
false;
$sInfo
= es_imagecls::getImageInfo(
$source
);
$wInfo
= es_imagecls::getImageInfo(
$water
);
if
(
$sInfo
[
"0"
] <
$wInfo
[
"0"
] ||
$sInfo
[
'1'
] <
$wInfo
[
'1'
])
return
false;
if
(is_animated_gif(
$source
))
{
require_once
APP_ROOT_PATH.
"system/utils/gif_encoder.php"
;
require_once
APP_ROOT_PATH.
"system/utils/gif_reader.php"
;
$gif
=
new
GIFReader();
$gif
->load(
$source
);
foreach
(
$gif
->IMGS[
'frames'
]
as
$k
=>
$img
)
{
$im
= imagecreatefromstring(
$gif
->getgif(
$k
));
$sImage
=
$im
;
$wCreateFun
=
"imagecreatefrom"
.
$wInfo
[
'type'
];
if
(!function_exists(
$wCreateFun
))
$wCreateFun
=
'imagecreatefromjpeg'
;
$wImage
=
$wCreateFun
(
$water
);
imagealphablending(
$wImage
, true);
switch
(
intval
(
$position
))
{
case
0:
break
;
case
1:
$posY
=0;
$posX
=0;
imagecopymerge(
$sImage
,
$wImage
,
$posX
,
$posY
, 0, 0,
$wInfo
[0],
$wInfo
[1],
$alpha
);
break
;
case
2:
$posY
=0;
$posX
=
$sInfo
[0]-
$wInfo
[0];
imagecopymerge(
$sImage
,
$wImage
,
$posX
,
$posY
, 0, 0,
$wInfo
[0],
$wInfo
[1],
$alpha
);
break
;
case
3:
$posY
=
$sInfo
[1]-
$wInfo
[1];
$posX
=0;
imagecopymerge(
$sImage
,
$wImage
,
$posX
,
$posY
, 0, 0,
$wInfo
[0],
$wInfo
[1],
$alpha
);
break
;
case
4:
$posY
=
$sInfo
[1]-
$wInfo
[1];
$posX
=
$sInfo
[0]-
$wInfo
[0];
imagecopymerge(
$sImage
,
$wImage
,
$posX
,
$posY
, 0, 0,
$wInfo
[0],
$wInfo
[1],
$alpha
);
break
;
case
5:
$posY
=
$sInfo
[1]/2-
$wInfo
[1]/2;
$posX
=
$sInfo
[0]/2-
$wInfo
[0]/2;
imagecopymerge(
$sImage
,
$wImage
,
$posX
,
$posY
, 0, 0,
$wInfo
[0],
$wInfo
[1],
$alpha
);
break
;
}
ob_start();
imagegif(
$sImage
);
$content
= ob_get_contents();
ob_end_clean();
$frames
[ ] =
$content
;
$framed
[ ] =
$img
[
'frameDelay'
];
}
$gif_maker
=
new
GIFEncoder (
$frames
,
$framed
,
0,
2,
0, 0, 0,
"bin"
);
$image_rs
=
$gif_maker
->GetAnimation ( );
@unlink(
$source
);
file_put_contents
(
$source
,
$image_rs
);
return
true;
}
$sCreateFun
=
"imagecreatefrom"
.
$sInfo
[
'type'
];
if
(!function_exists(
$sCreateFun
))
$sCreateFun
=
'imagecreatefromjpeg'
;
$sImage
=
$sCreateFun
(
$source
);
$wCreateFun
=
"imagecreatefrom"
.
$wInfo
[
'type'
];
if
(!function_exists(
$wCreateFun
))
$wCreateFun
=
'imagecreatefromjpeg'
;
$wImage
=
$wCreateFun
(
$water
);
imagealphablending(
$wImage
, true);
switch
(
intval
(
$position
))
{
case
0:
break
;
case
1:
$posY
=0;
$posX
=0;
imagecopymerge(
$sImage
,
$wImage
,
$posX
,
$posY
, 0, 0,
$wInfo
[0],
$wInfo
[1],
$alpha
);
break
;
case
2:
$posY
=0;
$posX
=
$sInfo
[0]-
$wInfo
[0];
imagecopymerge(
$sImage
,
$wImage
,
$posX
,
$posY
, 0, 0,
$wInfo
[0],
$wInfo
[1],
$alpha
);
break
;
case
3:
$posY
=
$sInfo
[1]-
$wInfo
[1];
$posX
=0;
imagecopymerge(
$sImage
,
$wImage
,
$posX
,
$posY
, 0, 0,
$wInfo
[0],
$wInfo
[1],
$alpha
);
break
;
case
4:
$posY
=
$sInfo
[1]-
$wInfo
[1];
$posX
=
$sInfo
[0]-
$wInfo
[0];
imagecopymerge(
$sImage
,
$wImage
,
$posX
,
$posY
, 0, 0,
$wInfo
[0],
$wInfo
[1],
$alpha
);
break
;
case
5:
$posY
=
$sInfo
[1]/2-
$wInfo
[1]/2;
$posX
=
$sInfo
[0]/2-
$wInfo
[0]/2;
imagecopymerge(
$sImage
,
$wImage
,
$posX
,
$posY
, 0, 0,
$wInfo
[0],
$wInfo
[1],
$alpha
);
break
;
}
@unlink(
$source
);
imagejpeg(
$sImage
,
$source
,100);
imagedestroy(
$sImage
);
}
}
if
(!function_exists(
'image_type_to_extension'
))
{
function
image_type_to_extension(
$imagetype
)
{
if
(
empty
(
$imagetype
))
return
false;
switch
(
$imagetype
)
{
case
IMAGETYPE_GIF :
return
'.gif'
;
case
IMAGETYPE_JPEG :
return
'.jpeg'
;
case
IMAGETYPE_PNG :
return
'.png'
;
case
IMAGETYPE_SWF :
return
'.swf'
;
case
IMAGETYPE_PSD :
return
'.psd'
;
case
IMAGETYPE_BMP :
return
'.bmp'
;
case
IMAGETYPE_TIFF_II :
return
'.tiff'
;
case
IMAGETYPE_TIFF_MM :
return
'.tiff'
;
case
IMAGETYPE_JPC :
return
'.jpc'
;
case
IMAGETYPE_JP2 :
return
'.jp2'
;
case
IMAGETYPE_JPX :
return
'.jpf'
;
case
IMAGETYPE_JB2 :
return
'.jb2'
;
case
IMAGETYPE_SWC :
return
'.swc'
;
case
IMAGETYPE_IFF :
return
'.aiff'
;
case
IMAGETYPE_WBMP :
return
'.wbmp'
;
case
IMAGETYPE_XBM :
return
'.xbm'
;
default
:
return
false;
}
}
}
?>
<p>2.get_spec_img()调用图片类,然后再用下面的方法保存不同规格的图片并返回图片连接</p><pre
class
=
"code"
>
function
get_spec_image(
$img_path
,
$width
=0,
$height
=0,
$gen
=0,
$is_preview
=true)
{
if
(
$width
==0)
$new_path
=
$img_path
;
else
{
$img_name
=
substr
(
$img_path
,0,-4);
$img_ext
=
substr
(
$img_path
,-3);
if
(
$is_preview
)
$new_path
=
$img_name
.
"_"
.
$width
.
"x"
.
$height
.
".jpg"
;
else
$new_path
=
$img_name
.
"o_"
.
$width
.
"x"
.
$height
.
".jpg"
;
if
(!
file_exists
(
$new_path
))
{
require_once
"imagecls.php"
;
$imagec
=
new
imagecls();
$thumb
=
$imagec
->thumb(
$img_path
,
$width
,
$height
,
$gen
,true,"
",
$is_preview
);
if
(app_conf(
"PUBLIC_DOMAIN_ROOT"
)!=
''
)
{
$paths
=
pathinfo
(
$new_path
);
$path
=
str_replace
(
"./"
,
""
,
$paths
[
'dirname'
]);
$filename
=
$paths
[
'basename'
];
$pathwithoupublic
=
str_replace
(
"public/"
,
""
,
$path
);
$file_data
= @
file_get_contents
(
$path
.
$file
);
$img
= @imagecreatefromstring(
$file_data
);
if
(
$img
!==false)
{
$save_path
=
"public/"
.
$path
;
if
(!
is_dir
(
$save_path
))
{
@mk_dir(
$save_path
);
}
@
file_put_contents
(
$save_path
.
$name
,
$file_data
);
}
}
}
}
return
$new_path
;
}