强大的PHP生成缩略图函数。

<?php
 
/**
  * 生成缩略图
  * @author yangzhiguo0903@163.com
  * @param string     源图绝对完整地址{带文件名及后缀名}
  * @param string     目标图绝对完整地址{带文件名及后缀名}
  * @param int        缩略图宽{0:此时目标高度不能为0,目标宽度为源图宽*(目标高度/源图高)}
  * @param int        缩略图高{0:此时目标宽度不能为0,目标高度为源图高*(目标宽度/源图宽)}
  * @param int        是否裁切{宽,高必须非0}
  * @param int/float  缩放{0:不缩放, 0<this<1:缩放到相应比例(此时宽高限制和裁切均失效)}
  * @return boolean
  */
function img2thumb( $src_img , $dst_img , $width = 75, $height = 75, $cut = 0, $proportion = 0)
{
     if (! is_file ( $src_img ))
     {
         return false;
     }
     $ot = fileext( $dst_img );
     $otfunc = 'image' . ( $ot == 'jpg' ? 'jpeg' : $ot );
     $srcinfo = getimagesize ( $src_img );
     $src_w = $srcinfo [0];
     $src_h = $srcinfo [1];
     $type  = strtolower ( substr (image_type_to_extension( $srcinfo [2]), 1));
     $createfun = 'imagecreatefrom' . ( $type == 'jpg' ? 'jpeg' : $type );
 
     $dst_h = $height ;
     $dst_w = $width ;
     $x = $y = 0;
 
     /**
      * 缩略图不超过源图尺寸(前提是宽或高只有一个)
      */
     if (( $width > $src_w && $height > $src_h ) || ( $height > $src_h && $width == 0) || ( $width > $src_w && $height == 0))
     {
         $proportion = 1;
     }
     if ( $width > $src_w )
     {
         $dst_w = $width = $src_w ;
     }
     if ( $height > $src_h )
     {
         $dst_h = $height = $src_h ;
     }
 
     if (! $width && ! $height && ! $proportion )
     {
         return false;
     }
     if (! $proportion )
     {
         if ( $cut == 0)
         {
             if ( $dst_w && $dst_h )
             {
                 if ( $dst_w / $src_w > $dst_h / $src_h )
                 {
                     $dst_w = $src_w * ( $dst_h / $src_h );
                     $x = 0 - ( $dst_w - $width ) / 2;
                 }
                 else
                 {
                     $dst_h = $src_h * ( $dst_w / $src_w );
                     $y = 0 - ( $dst_h - $height ) / 2;
                 }
             }
             else if ( $dst_w xor $dst_h )
             {
                 if ( $dst_w && ! $dst_h //有宽无高
                 {
                     $propor = $dst_w / $src_w ;
                     $height = $dst_h  = $src_h * $propor ;
                 }
                 else if (! $dst_w && $dst_h //有高无宽
                 {
                     $propor = $dst_h / $src_h ;
                     $width  = $dst_w = $src_w * $propor ;
                 }
             }
         }
         else
         {
             if (! $dst_h //裁剪时无高
             {
                 $height = $dst_h = $dst_w ;
             }
             if (! $dst_w //裁剪时无宽
             {
                 $width = $dst_w = $dst_h ;
             }
             $propor = min(max( $dst_w / $src_w , $dst_h / $src_h ), 1);
             $dst_w = (int) round ( $src_w * $propor );
             $dst_h = (int) round ( $src_h * $propor );
             $x = ( $width - $dst_w ) / 2;
             $y = ( $height - $dst_h ) / 2;
         }
     }
     else
     {
         $proportion = min( $proportion , 1);
         $height = $dst_h = $src_h * $proportion ;
         $width  = $dst_w = $src_w * $proportion ;
     }
 
     $src = $createfun ( $src_img );
     $dst = imagecreatetruecolor( $width ? $width : $dst_w , $height ? $height : $dst_h );
     $white = imagecolorallocate( $dst , 255, 255, 255);
     imagefill( $dst , 0, 0, $white );
 
     if (function_exists( 'imagecopyresampled' ))
     {
         imagecopyresampled( $dst , $src , $x , $y , 0, 0, $dst_w , $dst_h , $src_w , $src_h );
     }
     else
     {
         imagecopyresized( $dst , $src , $x , $y , 0, 0, $dst_w , $dst_h , $src_w , $src_h );
     }
     $otfunc ( $dst , $dst_img );
     imagedestroy( $dst );
     imagedestroy( $src );
     return true;

}
function fileext( $file )
{
     return pathinfo ( $file , PATHINFO_EXTENSION);
}

$src_img = "./ROSI_050_002.JPG" ;
$dst_img = "./ROSI_050_002_thumb.jpg" ;
$stat = img2thumb( $src_img , $dst_img , $width = 200, $height = 300, $cut = 0, $proportion = 0);
if ( $stat ){
     echo 'Resize Image Success!<br />' ;
     echo '<img src="' . $dst_img . '" />' ;   
} else {
     echo 'Resize Image Fail!'
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值