如何在PHP中没有丢失大jpg到非常小的尺寸?

时间:2014-02-28 08:48:39

标签: php

如何在php中将一个大jpg邮件压缩到非常小的尺寸?

http://img.choies.com/pimages/93665/5.jpg

这个img是一个很大的产品形象(750px * 1000px),但它只需要47k。图像非常清晰。

下面是我的图像类的一些代码,我调整了jpg的大小但获得了更大的jpg(120k)。

<?php 

class jy_image{

    // ......

    //创建图片把柄
    function create_image($img_path){
        $type=$this->get_image_type($img_path);
        $im=null;
        switch($type){
            case 'jpg':
            case 'jpeg':
            case 'jpe': $im=@imagecreatefromjpeg($img_path);break;
            case 'gif': $im=@imagecreatefromgif($img_path);break;
            case 'png': $im=@imagecreatefrompng($img_path);break;
            default:return false;
        }
        return $im;
    }

    // 缩小图像把柄
    function resize_image($img_path,$length,$size_op){
        $im=$this->create_image($img_path);
        if($im==false){
            return false;
        }
        $width=imagesx($im);
        $height=imagesy($im);

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

        //等比缩小图片把柄
        switch($size_op){
            case 'max': // 最大长边尺寸
                if($width>$height){
                    $w=$length;
                    $h=($height/$width)*$w;
                }else if($width<$height){
                    $h=$length;
                    $w=($width/$height)*$h;
                }else{
                    $w=$h=$length;
                }
                break;

            case 'max_width':   // 最大宽度
                $w= ($width>=$length)?$length:$width;
                $h= ($height/$width)*$w;
                break;

            case 'max_height':  // 最大高度
                $h= ($height>=$length)?$length:$height;
                $w= ($width/$height)*$h;
                break;
        }

        $im_new=imagecreatetruecolor($w,$h);
        imagecopyresampled($im_new,$im,0,0,0,0,$w,$h,$width,$height);
        return $im_new;
    }

}

?>

0 个答案:

没有答案