<?php
class
ResizeImage{
public
$type
;
public
$width
;
public
$height
;
public
$resize_width
;
public
$resize_height
;
public
$cut
;
public
$srcimg
;
public
$dstimg
;
public
$im
;
public
$quality
;
function
resizeimage(
$img
,
$wid
,
$hei
,
$c
,
$dstpath
,
$quality
=100){
$this
->srcimg=
$img
;
$this
->resize_width=
$wid
;
$this
->resize_height=
$hei
;
$this
->cut=
$c
;
$this
->quality=
$quality
;
$this
->type=
strtolower
(
substr
(
strrchr
(
$this
->srcimg,
'.'
),1));
$this
->initi_img();
$this
-> dst_img(
$dstpath
);
@
$this
->width=imagesx(
$this
->im);
@
$this
->height=imagesy(
$this
->im);
$this
->newimg();
@ImageDestroy(
$this
->im);
}
function
newimg(){
$resize_ratio
=(
$this
->resize_width)/(
$this
->resize_height);
@
$ratio
=(
$this
->width)/(
$this
->height);
if
((
$this
->cut)==
'1'
){
if
(
$img_func
===
'imagepng'
&&(
str_replace
(
'.'
,
''
,PHP_VERSION)>=512)){
$quality
=9;
}
if
(
$ratio
>=
$resize_ratio
){
$newimg
=imagecreatetruecolor(
$this
->resize_width,
$this
->resize_height);
imagecopyresampled(
$newimg
,
$this
->im,0,0,0,0,
$this
->resize_width,
$this
->resize_height,((
$this
->height)*
$resize_ratio
),
$this
->height);
imagejpeg(
$newimg
,
$this
->dstimg,
$this
->quality);
}
if
(
$ratio
<
$resize_ratio
){
$newimg
=imagecreatetruecolor(
$this
->resize_width,
$this
->resize_height);
imagecopyresampled(
$newimg
,
$this
->im,0,0,0,0,
$this
->resize_width,
$this
->resize_height,
$this
->width,((
$this
->width)/
$resize_ratio
));
imagejpeg(
$newimg
,
$this
->dstimg,
$this
->quality);
}
}
else
{
if
(
$ratio
>=
$resize_ratio
){
$newimg
=imagecreatetruecolor(
$this
->resize_width,(
$this
->resize_width)/
$ratio
);
imagecopyresampled(
$newimg
,
$this
->im,0,0,0,0,
$this
->resize_width,(
$this
->resize_width)/
$ratio
,
$this
->width,
$this
->height);
imagejpeg(
$newimg
,
$this
->dstimg,
$this
->quality);
}
if
(
$ratio
<
$resize_ratio
){
@
$newimg
=imagecreatetruecolor((
$this
->resize_height)*
$ratio
,
$this
->resize_height);
@imagecopyresampled(
$newimg
,
$this
->im,0,0,0,0,(
$this
->resize_height)*
$ratio
,
$this
->resize_height,
$this
->width,
$this
->height);
@imagejpeg(
$newimg
,
$this
->dstimg,
$this
->quality);
}
}
}
function
initi_img(){
if
(
$this
->type==
'jpg'
||
$this
->type==
'jpeg'
){
$this
->im=imagecreatefromjpeg(
$this
->srcimg);
}
if
(
$this
->type==
'gif'
){
$this
->im=imagecreatefromgif(
$this
->srcimg);
}
if
(
$this
->type==
'png'
){
$this
->im=imagecreatefrompng(
$this
->srcimg);
}
if
(
$this
->type==
'wbm'
){
@
$this
->im=imagecreatefromwbmp(
$this
->srcimg);
}
if
(
$this
->type==
'bmp'
){
$this
->im=
$this
->ImageCreateFromBMP(
$this
->srcimg);
}
}
function
dst_img(
$dstpath
){
$full_length
=
strlen
(
$this
->srcimg);
$type_length
=
strlen
(
$this
->type);
$name_length
=
$full_length
-
$type_length
;
$name
=
substr
(
$this
->srcimg,0,
$name_length
-1);
$this
->dstimg=
$dstpath
;
}
function
ImageCreateFromBMP(
$filename
){
if
(!
$f1
=
fopen
(
$filename
,
"rb"
))returnFALSE;
$FILE
=unpack(
"vfile_type/Vfile_size/Vreserved/Vbitmap_offset"
,
fread
(
$f1
,14));
if
(
$FILE
[
'file_type'
]!=19778)returnFALSE;
$BMP
=unpack(
'Vheader_size/Vwidth/Vheight/vplanes/vbits_per_pixel'
.
'/Vcompression/Vsize_bitmap/Vhoriz_resolution'
.
'/Vvert_resolution/Vcolors_used/Vcolors_important'
,
fread
(
$f1
,40));
$BMP
[
'colors'
]=pow(2,
$BMP
[
'bits_per_pixel'
]);
if
(
$BMP
[
'size_bitmap'
]==0)
$BMP
[
'size_bitmap'
]=
$FILE
[
'file_size'
]-
$FILE
[
'bitmap_offset'
];
$BMP
[
'bytes_per_pixel'
]=
$BMP
[
'bits_per_pixel'
]/8;
$BMP
[
'bytes_per_pixel2'
]=
ceil
(
$BMP
[
'bytes_per_pixel'
]);
$BMP
[
'decal'
]=(
$BMP
[
'width'
]*
$BMP
[
'bytes_per_pixel'
]/4);
$BMP
[
'decal'
]-=
floor
(
$BMP
[
'width'
]*
$BMP
[
'bytes_per_pixel'
]/4);
$BMP
[
'decal'
]=4-(4*
$BMP
[
'decal'
]);
if
(
$BMP
[
'decal'
]==4)
$BMP
[
'decal'
]=0;
$PALETTE
=
array
();
if
(
$BMP
[
'colors'
]<16777216)
{
$PALETTE
=unpack(
'V'
.
$BMP
[
'colors'
],
fread
(
$f1
,
$BMP
[
'colors'
]*4));
}
$IMG
=
fread
(
$f1
,
$BMP
[
'size_bitmap'
]);
$VIDE
=
chr
(0);
$res
=imagecreatetruecolor(
$BMP
[
'width'
],
$BMP
[
'height'
]);
$P
=0;
$Y
=
$BMP
[
'height'
]-1;
while
(
$Y
>=0)
{
$X
=0;
while
(
$X
<
$BMP
[
'width'
])
{
if
(
$BMP
[
'bits_per_pixel'
]==24)
$COLOR
=unpack(
"V"
,
substr
(
$IMG
,
$P
,3).
$VIDE
);
elseif
(
$BMP
[
'bits_per_pixel'
]==16)
{
$COLOR
=unpack(
"n"
,
substr
(
$IMG
,
$P
,2));
$COLOR
[1]=
$PALETTE
[
$COLOR
[1]+1];
}
elseif
(
$BMP
[
'bits_per_pixel'
]==8)
{
$COLOR
=unpack(
"n"
,
$VIDE
.
substr
(
$IMG
,
$P
,1));
$COLOR
[1]=
$PALETTE
[
$COLOR
[1]+1];
}
elseif
(
$BMP
[
'bits_per_pixel'
]==4)
{
$COLOR
=unpack(
"n"
,
$VIDE
.
substr
(
$IMG
,
floor
(
$P
),1));
if
((
$P
*2)%2==0)
$COLOR
[1]=(
$COLOR
[1]>>4);
else
$COLOR
[1]=(
$COLOR
[1]&0x0F);
$COLOR
[1]=
$PALETTE
[
$COLOR
[1]+1];
}
elseif
(
$BMP
[
'bits_per_pixel'
]==1)
{
$COLOR
=unpack(
"n"
,
$VIDE
.
substr
(
$IMG
,
floor
(
$P
),1));
if
((
$P
*8)%8==0)
$COLOR
[1]=
$COLOR
[1]>>7;
elseif
((
$P
*8)%8==1)
$COLOR
[1]=(
$COLOR
[1]&0x40)>>6;
elseif
((
$P
*8)%8==2)
$COLOR
[1]=(
$COLOR
[1]&0x20)>>5;
elseif
((
$P
*8)%8==3)
$COLOR
[1]=(
$COLOR
[1]&0x10)>>4;
elseif
((
$P
*8)%8==4)
$COLOR
[1]=(
$COLOR
[1]&0x8)>>3;
elseif
((
$P
*8)%8==5)
$COLOR
[1]=(
$COLOR
[1]&0x4)>>2;
elseif
((
$P
*8)%8==6)
$COLOR
[1]=(
$COLOR
[1]&0x2)>>1;
elseif
((
$P
*8)%8==7)
$COLOR
[1]=(
$COLOR
[1]&0x1);
$COLOR
[1]=
$PALETTE
[
$COLOR
[1]+1];
}
else
returnFALSE;
imagesetpixel(
$res
,
$X
,
$Y
,
$COLOR
[1]);
$X
++;
$P
+=
$BMP
[
'bytes_per_pixel'
];
}
$Y
--;
$P
+=
$BMP
[
'decal'
];
}
fclose(
$f1
);
return
$res
;
}
}
?>