PHP自适应宽高度等比例缩略图函数 (无裁切)

对于产品类或者图片类网站来说,缩略图是一个很重要的应用。其实说来很简单,也就是把大图缩放成一个小图,用于图片的列表展示,这样可以达到用户快速浏览的目的,又能节省带宽。

如果是等比例缩放,比如小图是大图的1/2或者1/5之类的,比较容易处理。但有时候我们需要处理大量不同尺寸的大图,让其生成固定宽高度的缩略图。那就需要一种自适应的方式缩放,就是大图在缩放的过程中,如果宽度先达到缩略图的宽度,那大图多余的高度就被裁剪掉;如果高度先达到缩略图的高度,那大图多余的宽度就被裁剪掉。这样处理既让缩略图不失真变形,又能最大化保留大图内容。

今天用PHP写了一个缩略图函数,可以达到这种自适应的等比例缩放效果。

<?php
/*
缩略图函数

作者:影子超
博客:www.shadowchao.com
邮箱:superl3c@gmail.com

参数说明:
$w ---------- 缩略图宽度
$h ---------- 缩略图高度
$dst_path --- 缩略图路径
$src_path --- 源图像路径
*/
function zoom_image($w,$h,$dst_path,$src_path){
  if(!file_exists($src_path)){
    die("源图像文件未找到!");
  }
  list($src_w,$src_h,$src_type)=getimagesize($src_path);
  switch($src_type){
    case 1:$src_im=@imagecreatefromgif($src_path);break;
    case 2:$src_im=@imagecreatefromjpeg($src_path);break;
    case 3:$src_im=@imagecreatefrompng($src_path);break;
    default:die("不能识别的图像类型!");
  }
  $dst_im=@imagecreatetruecolor($w,$h);
  $scale_w=$src_w/$w;
  $scale_h=$src_h/$h;
  if($scale_w>$scale_h){
    $src_w=$scale_h*$w;
  }else{
    $src_h=$scale_w*$h;
  }
  imagecopyresampled($dst_im,$src_im,0,0,0,0,$w,$h,$src_w,$src_h);
  switch($src_type){
    case 1:imagegif($dst_im,$dst_path,80);break;
    case 2:imagejpeg($dst_im,$dst_path,80);break;
    case 3:imagepng($dst_im,$dst_path,80);break;
  }
  imagedestroy($dst_im);
  imagedestroy($src_im);
}
?>

函数共有4个参数,分别是你想生成的缩略图的宽度、高度、存储的路径以及大图的文件地址(可以是URL地址^_^)

调用方式如:zoom_image(100,100,"abc_small.jpg","abc_big.jpg"),调用无返回,直接将处理后的小图存放在指定路径下。





//生成缩略图(带裁切)

function thum_img($img,$small_img){

 $thumb = imagecreatetruecolor(100, 100);

 $bg = imagecolorallocate($thumb, 255, 255, 255);

 imagefilledrectangle($thumb, 0, 0, 100, 100, $bg);

 $i = 0;

 $j1 = $j2 = 190;

 $imgarr = getimagesize($img);

 if($imgarr['0']>$imgarr['1']){

 $j1 = $imgarr['0']/($imgarr['1']/$j2);

 $i = ceil(($j2-$j1)/2);

 }elseif($imgarr['0']<=$imgarr['1']){

 $j2 = $imgarr['1']/($imgarr['0']/$j2);

 }

 if($imgarr['mime']=='image/gif'){

 $source = imagecreatefromgif($img);

 }elseif($imgarr['mime']=='image/jpeg'){

 $source = imagecreatefromjpeg($img);

 }elseif($imgarr['mime']=='image/png'){

 $source = imagecreatefrompng($img);

 }elseif($imgarr['mime']=='image/bmp'){

 $source = imagecreatefromwbmp($img);

 }

 imagecopyresampled($thumb, $source, $i, 0, 0, 0, $j1, $j2, $imgarr[0], $imgarr[1]);

 return imagejpeg($thumb,$small_img);

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值