PHP · 2010年1月11日 0

一个缩略图的类

<?php
/**
 * 图片缩略图类,只可以处理'jpg','gif','png'格式
 *
 * 使用方法:
 * $img = new Thumb('./upload/','./thumb/');
 * //把当前目录下的a.jpg图片生成缩略图,图片名称为aaa.jpg,图片宽、高最大为100px
 * $img->doimage('a.jpg','aaa.jpg',100);
 *
 */
class Thumb {
    private $bigimagepath;
    private $smalllimagepath;
    private $imagetype = array('jpg','jpeg','jpe','gif','png');

    public function __construct($bigimagepath='./',$smallimagepath='./') {
        $this->bigimagepath = $bigimagepath;
        $this->smalllimagepath = $smallimagepath;
    }
    public function image($bigimagepath='./',$smallimagepath='./') {
        $this->__construct($bigimagepath,$smallimagepath);
    }

    public function setbigimagepath($path){
        $this->bigimagepath = $path;
    }
    public function setsmallimagepath($path) {
        $this->smalllimagepath = $path;
    }

    public function doimage($big_filename,$small_filename,$length,$quality=75) {
        $big_filename = $this->bigimagepath.$big_filename;
        $res = $this->resizeImage($big_filename,$length);
        if ($res==false) {
            return false;
        }
        $small_filename = $this->smalllimagepath.$small_filename;
        return $this->saveImage($res,$small_filename,$quality);
    }

/**
     * 根据文件扩展名取得图片的类型或false(表示不是图片)
     *
     * @param $filename 图片的文件名
     */
    private function getImageType($filename) {
        $file    = pathinfo($filename);
        $ext=strtolower($file['extension']);
        if (in_array($ext,$this->imagetype))
        return $ext;
        else return false;
    }

/**
     * 从给定的文件名创建图片(给定的图片类型只能是jpg、gif或png格式的)
     *
     * @param $filename 图片文件名
     * @return 图片资源
     */
    private function imageCreate($filename)    {
        $type=$this->getImageType($filename);
        $p=null; //图片资源
        switch ($type) {
            case 'jpg':
                $p=@imagecreatefromjpeg($filename);
                break;
            case 'jpeg':
                $p=@imagecreatefromjpeg($filename);
                break;
            case 'jpe':
                $p=@imagecreatefromjpeg($filename);
                break;
            case 'gif':
                $p=@imagecreatefromgif($filename);
                break;
            case 'png':
                $p=@imagecreatefrompng($filename);
                break;
            default:
                return false;
                break;//只能处理jpg、gif或png格式的图片
        }
        return $p;
    }

/**
     * 把图片的长边缩小为length个像素长,短边等比缩小,只能处理jpg、gif、png格式的图片
     *
     * @param $filename 图片文件名
     * @param $length 长边的像素数
     *
     * @return 图片资源
     */
    private function resizeImage($filename,$length)    {
        $img = $this->imageCreate($filename); //打开源图片
        if ($img==false) {
            return false;
        }

        $width=imagesx($img);    //宽
        $height=imagesy($img);   //高

        //如果原图片的尺寸比预计的缩略图的尺寸还小,直接返回原图
        if ($width<=$length && $height<=$length) {
            return $img;
        }

        //等比缩小
        if ($width>$height)    {
            $w=$length;
            $h=($height/$width)*$length;
        }    else if($width<$height)    {
            $h=$length;
            $w=($width/$height)*$length;
        }    else {
            //正方形的图片
            $w=$h=$length;
        }

        $p=imagecreatetruecolor($w,$h); //新建缩略图
        imagecopyresampled($p,$img,0,0,0,0,$w,$h,$width,$height); //缩小
        return $p; //返回图片资源
    }

/**
     * 将图片保存为文件
     *
     * @param $res 图片资源
     * @param string $filename 将要保存的文件名
     * @param int $quality 图片质量(0-100)只在生成jpg格式的图片时有效
     *
     * @return 成功,返回true,否则返回false
     */
    private function saveImage($res,$filename,$quality=75) {
        //图片类型
        $type=self::getImageType($filename);
        switch($type) {
            case 'jpe':
                return @imagejpeg($res,$filename,$quality);
                break;
            case 'jpeg':
                return @imagejpeg($res,$filename,$quality);
                break;
            case 'jpg':
                return @imagejpeg($res,$filename,$quality);
                break;
            case 'gif':
                return @imagegif($res,$filename);
                break;
            case 'png':
                return @imagepng($res,$filename);
                break;
            default:
                return false;
                break;
        }
        return true;
    }
}
?>