商品缩略图实现

<?php
// 验证码类

class image {
    protected $im;
    protected $img_width;
    protected $img_height;
    protected $img_type;
	

    static public function make_thumb($ori,$w=200,$h=200) {
        // 判断原图大小,如果原图比缩略还小,不必处理.

        // 读出大图当画布
        $info = self::getinfo($ori);
        if($info['func'] === false) {
            return false;
        }

        $createfunc = 'imagecreatefrom' . $info['func']; // 分析出读取大图所用的函数名.
        $src = $createfunc($ori);

        // 创建小画布,并把背景做成灰色
        $small = imagecreatetruecolor($w,$h);
        $gray = imagecolorallocate($small,255,255,255);
        imagefill($small,0,0,$gray);

        // 复制大图到小图
        $scale = min($w/$info['width'], $h/$info['height']); // 以更小的缩小比例为准,才能装下

        // 根据比例,算最终复制过去的块的大小.
        $realw = $info['width'] * $scale;
        $realh = $info['height'] * $scale;

        // 生成小图
        /*
        bool imagecopyresampled ( resource $dst_image , resource $src_image , int $dst_x , int $dst_y , int $src_x , int $src_y , int $dst_w , int $dst_h , int $src_w , int $src_h )
        */

        // 计算留白
        $lw = round(($w - $realw)/2); // 计算左侧留的宽度
        $lh = round(($h - $realh)/2); // 计算上部留的高度

        imagecopyresampled($small,$src,$lw,$lh,0,0,$realw,$realh,$info['width'],$info['height']);

       
        // 计算小图片的存储路径
		$pic = str_replace(ROOT,'',$ori);;

        $thumburl = str_replace('.','_thumb.',$pic);
		$thumburl = ROOT . $thumburl;

        $imagefunc = 'image' . $info['func'];
	

        if($imagefunc($small,$thumburl)) {
            return str_replace(ROOT,'',$thumburl);
        } else {
            return false;
        }


    }

    static public function getinfo($ori) {
        $arr = getimagesize($ori);

        // 如果原始图片分析不出来,直接false
        if($arr === false) {
            return false;
        }
        
        $info = array();
        
        $info['width'] = $arr[0];
        $info['height'] = $arr[1];
        
        switch($arr[2]) {
            case 1:
            $info['func'] = 'gif';
            break;

            case 2:
            $info['func'] = 'jpeg';
            break;

            case 3:
            $info['func'] = 'png';
            break;

            case 6:
            $info['func'] = 'wbmp';
            break;

            default:
            $info['func'] = false;
        
        }

        return $info;
    }


}

?>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值