文章导读:在新的一年中,各位网友都进入紧张的学习或是工作阶段。网学的各位小编整理了PHP-PHP缩略图等比例无损压缩,可填充空白区域补充色的相关内容供大家参考,祝大家在新的一年里工作和学习顺利!
复制代码 代码如下:
<?php
error_reporting( E_ALL );
// 测试
imagezoom(''1.jpg'', ''2.jpg'', 400, 300, ''#FFFFFF'');
/*
php缩略图函数:
等比例无损压缩,可填充补充色 author: 华仔
主持格式:
bmp 、jpg 、gif、png
param:
@srcimage : 要缩小的
图片 @dstimage : 要保存的
图片 @dst_width: 缩小宽
@dst_height: 缩小高
@backgroundcolor: 补充色 如:#FFFFFF 支持 6位 不支持3位
*/
function imagezoom( $srcimage, $dstimage, $dst_width, $dst_height, $backgroundcolor ) {
// 中文件名乱码
if ( PHP_OS == ''WINNT'' ) {
$srcimage = iconv(''UTF-8'', ''GBK'', $srcimage);
$dstimage = iconv(''UTF-8'', ''GBK'', $dstimage);
}
$dstimg = imagecreatetruecolor( $dst_width, $dst_height );
$color = imagecolorallocate($dstimg
, hexdec(substr($backgroundcolor, 1, 2))
, hexdec(substr($backgroundcolor, 3, 2))
, hexdec(substr($backgroundcolor, 5, 2))
);
imagefill($dstimg, 0, 0, $color);
if ( !$arr=getimagesize($srcimage) ) {
echo "要生成缩略图的文件不存在";
exit;
}
$src_width = $arr[0];
$src_height = $arr;
$srcimg = null;
$method = getcreatemethod( $srcimage );
if ( $method ) {
eval( ''$srcimg = '' . $method . '';'' );
}
$dst_x = 0;
$dst_y = 0;
$dst_w = $dst_width;
$dst_h = $dst_height;
if ( ($dst_width / $dst_height - $src_width / $src_height) > 0 ) {
$dst_w = $src_width * ( $dst_height / $src_height );
$dst_x = ( $dst_width - $dst_w ) / 2;
} elseif ( ($dst_width / $dst_height - $src_width / $src_height) < 0 ) {
$dst_h = $src_height * ( $dst_width / $src_width );
$dst_y = ( $dst_height - $dst_h ) / 2;
}
imagecopyresampled($dstimg, $srcimg, $dst_x
, $dst_y, 0, 0, $dst_w, $dst_h, $src_width, $src_height);
// 保存格式
$arr = array(
''jpg'' => ''imagejpeg''
, ''jpeg'' => ''imagejpeg''
, ''png'' => ''imagepng''
, ''gif'' => ''imagegif''
, ''bmp'' => ''imagebmp''
);
$suffix = strtolower( array_pop(explode(''.'', $dstimage ) ) );
if (!in_array($suffix, array_keys($arr)) ) {
echo "保存的文件名错误";
exit;
} else {
eval( $arr[$suffix] . ''($dstimg, "''.$dstimage.''");'' );
}
imagejpeg($dstimg, $dstimage);
imagedestroy($dstimg);
imagedestroy($srcimg);
}
function getcreatemethod( $file ) {
$arr = array(
''474946'' => "imagecreatefromgif(''$file'')"
, ''FFD8FF'' => "imagecreatefromjpeg(''$file'')"
, ''424D'' => "imagecreatefrombmp(''$file'')"
, ''89504E'' => "imagecreatefrompng(''$file'')"
);
$fd = fopen( $file, "rb" );
$data = fread( $fd, 3 );
$data = str2hex( $data );
if ( array_key_exists( $data, $arr ) ) {
return $arr[$data];
} elseif ( array_key_exists( substr($data, 0, 4), $arr ) ) {
return $arr[substr($data, 0, 4)];
} else {
return false;
}
}
function str2hex( $str ) {
$ret = "";
for( $i = 0; $i < strlen( $str ) ; $i++ ) {
$ret .= ord($str[$i]) >= 16 ? strval( dechex( ord($str[$i]) ) )
: ''0''. strval( dechex( ord($str[$i]) ) );
}
return strtoupper( $ret );
}
// BMP 创建函数 php本身无
function imagecreatefrombmp($filename)
{
if (! $f1 = fopen($filename,"rb")) return FALSE;
$FILE = unpack("vfile_type/Vfile_size/Vreserved/
vbitmap_offset", fread($f1,14));
if