<?php
class
imgcompress{
private
$srcurlurl
;
private
$image
;
private
$imageinfo
;
private
$percent
= 0.5;
public
function
__construct(
$srcurl
,
$percent
=1)
{
$this
->src =
$srcurl
;
$this
->percent =
$percent
;
}
public
function
compressImg(
$saveName
='')
{
$this
->_openImage();
if
(!
empty
(
$saveName
))
$this
->_saveImage(
$saveName
);
else
$this
->_showImage();
}
private
function
_openImage()
{
list(
$width
,
$height
,
$type
,
$attr
) =
getimagesize
(
$this
->src);
$this
->imageinfo =
array
(
'width'=>
$width
,
'height'=>
$height
,
'type'=>image_type_to_extension(
$type
,false),
'attr'=>
$attr
);
$fun
=
"imagecreatefrom"
.
$this
->imageinfo['type'];
$this
->image =
$fun
(
$this
->src);
$this
->_thumpImage();
}
private
function
_thumpImage()
{
$new_width
=
$this
->imageinfo['width'] *
$this
->percent;
$new_height
=
$this
->imageinfo['height'] *
$this
->percent;
$image_thump
= imagecreatetruecolor(
$new_width
,
$new_height
);
imagecopyresampled(
$image_thump
,
$this
->image,0,0,0,0,
$new_width
,
$new_height
,
$this
->imageinfo['width'],
$this
->imageinfo['height']);
imagedestroy(
$this
->image);
$this
->image =
$image_thump
;
}
private
function
_showImage()
{
header('Content-Type: image/'.
$this
->imageinfo['type']);
$funcs
=
"image"
.
$this
->imageinfo['type'];
$funcs
(
$this
->image);
}
private
function
_saveImage(
$dstImgName
)
{
if
(
empty
(
$dstImgName
))
return
false;
$allowImgs
= ['.jpg', '.jpeg', '.png', '.bmp', '.wbmp','.gif'];
$dstExt
=
strrchr
(
$dstImgName
,
"."
);
$sourseExt
=
strrchr
(
$this
->src ,
"."
);
if
(!
empty
(
$dstExt
))
$dstExt
=
strtolower
(
$dstExt
);
if
(!
empty
(
$sourseExt
))
$sourseExt
=
strtolower
(
$sourseExt
);
if
(!
empty
(
$dstExt
) && in_array(
$dstExt
,
$allowImgs
)){
$dstName
=
$dstImgName
;
}
elseif
(!
empty
(
$sourseExt
) && in_array(
$sourseExt
,
$allowImgs
)){
$dstName
=
$dstImgName
.
$sourseExt
;
}
else
{
$dstName
=
$dstImgName
.
$this
->imageinfo['type'];
}
$funcs
=
"image"
.
$this
->imageinfo['type'];
$funcs
(
$this
->image,
$dstName
);
}
public
function
__destruct(){
imagedestroy(
$this
->image);
}
}
$source
= '1.jpg';
$dst_img
= 'text.png';
$percent
= 1; #原图压缩,不缩放,但体积大大降低
$image
= (
new
imgcompress(
$source
,
$percent
))->compressImg(
$dst_img
);