PHP图片裁剪与缩放

图片太大且规格不统一,显示的控制需要靠JavaScript来完成,用在移动设备上时显示效果不好且流量巨大,需要对现有图片库的图片进行一次处理,生成符合移动设备用的缩略图,将原来客户端JS做的工作转移到服务器端用PHP的GD库来集中处理。

图片源与需要的大小:

 
  
[align=left] $src_img = "wallpaper.jpg";
$dst_w = 300;
$dst_h = 200;[/align]

剪裁图像,保证图像区域最大化显示,并按比例缩放到指定大小 

 

一开始采用了 imagecopy resized 方法进行图像等比缩小,实际操作后发现,图像缩小后燥点非常严重。后再换用 imagecopysampled 方法,该方法会对图像进行重新采样,对缩小的图像进行平滑处理,使清晰度得到很大提高


 

代码
 
   
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 );

 

 

转载于:https://www.cnblogs.com/xiaomia/archive/2010/11/13/1876191.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值