图片太大且规格不统一,显示的控制需要靠JavaScript来完成,用在移动设备上时显示效果不好且流量巨大,需要对现有图片库的图片进行一次处理,生成符合移动设备用的缩略图,将原来客户端JS做的工作转移到服务器端用PHP的GD库来集中处理。
图片源与需要的大小:
[align=left] $src_img = "wallpaper.jpg";
$dst_w = 300;
$dst_h = 200;[/align]
剪裁图像,保证图像区域最大化显示,并按比例缩放到指定大小
list ( $src_w , $src_h ) = getimagesize ( $src_img ); // 获取原图尺寸
$dst_scale = $dst_h / $dst_w ; // 目标图像长宽比
$src_scale = $src_h / $src_w ; // 原图长宽比
if ( $src_scale >= $dst_scale ){ // 过高
$w = intval ( $src_w );
$h = intval ( $dst_scale * $w );
$x = 0 ;
$y = ( $src_h - $h ) / 3 ;
}
else { // 过宽
$h = intval ( $src_h );
$w = intval ( $h / $dst_scale );
$x = ( $src_w - $w ) / 2 ;
$y = 0 ;
}
// 剪裁
$source = imagecreatefromjpeg( $src_img );
$croped = imagecreatetruecolor( $w , $h );
imagecopy( $croped , $source , 0 , 0 , $x , $y , $src_w , $src_h );
// 缩放
$scale = $dst_w / $w ;
$target = imagecreatetruecolor( $dst_w , $dst_h );
$final_w = intval ( $w * $scale );
$final_h = intval ( $h * $scale );
imagecopyresampled( $target , $croped , 0 , 0 , 0 , 0 , $final_w , $final_h , $w , $h );
// 保存
$timestamp = time ();
imagejpeg( $target , " $timestamp .jpg " );
imagedestroy( $target );