php 缩略图封装类 制作缩略图

<?php
class ImageLib{
    private $error;
    public function getError(){
        return $this->error;
    }
    /*
     * 制作缩略图
     * @param $src_path string 源图的路径
     * @param $max_w int 画布的宽度
     * @param $max_h int 画布的高度
     * @param $flag bool 是否等比
     * @param $prefix string 缩略图的前缀 
     */
    public function thumb($src_path,$max_w,$max_h,$prefix='s_',$flag=false){
        $ext=  strtolower(strrchr($src_path,'.'));  //获取文件的后缀
        switch($ext){
            case '.jpg':
                $type='jpeg';
                break;
            case '.gif':
                $type='gif';
                break;
            case '.png':
                $type='png';
                break;
            default:
                $this->error='文件格式不正确';
                return false;
        }
        $open_fn='imagecreatefrom'.$type;   //拼接打开图片的函数
        $src=$open_fn($src_path);    //打开源图
        $dst=imagecreatetruecolor($max_w,$max_h);	//创建目标图
        $src_w=imagesx($src);	//源图的宽度
        $src_h=imagesy($src);	//源图的高度
        if($flag){  //等比缩放
            if($max_w/$max_h<$src_w/$src_h){
                    $dst_w=$max_w;
                    $dst_h=$max_w*$src_h/$src_w;
            }else {
                    $dst_h=$max_h;
                    $dst_w=$max_h*$src_w/$src_h;
            }
            //在目标图上显示的位置
            $dst_x=(int)(($max_w-$dst_w)/2);
            $dst_y=(int)(($max_h-$dst_h)/2);
        }else{   //不等比
            $dst_x=0;
            $dst_y=0;
            $dst_w=$max_w;
            $dst_h=$max_h;
        }
        //生成缩略图
        imagecopyresampled($dst,$src,$dst_x,$dst_y,0,0,$dst_w,$dst_h,$src_w,$src_h);
        $filename=basename($src_path);  //文件名称
        $foldername=substr(dirname($src_path),-10); //文件夹名
        $thumb_path=$GLOBALS['config']['app']['upload_path'].$foldername.DS.$prefix.$filename;//保存路径
        imagepng($dst,$thumb_path);
        imagedestroy($dst);
        imagedestroy($src);
        return $foldername.'/'.$prefix.$filename;
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值