最新消息:网站改版咯

php等比例压缩图片

php Yovae 2599浏览

最近在开发腾讯应用的时候由于设计到海量照片上传所以一个php等比例压缩图片程序自然是需要的,参考了几个朋友和网络上的源码再加上自己的东西予以优化,最后完成了一个效率还不错的图片上传处理程序,这里谈谈思路。

1.明确需要的图片压缩的各种规格大小

我是这样处理,在不同的场合我们需要显示的图片大小是不一样的,比如有时候只需要一个缩略图,有时候需要一个相对大小的预览图,最后呢当然需要是大图片,所以我把上传的图片先移动到一个缓存文件夹,然后利用写好的php图片压缩函数分别压缩成三中不同 的大小:

	 $size=array(//压缩后各种规格大小
		 'small'=>array('width'=>75,'height'=>75),
		 'origin'=>array('width'=>180,'height'=>240),
		 'big'=>array('width'=>800,'height'=>600),
    	 );

考虑到网页的页面大小有限所以直接限制最大为800*600,这样对于用户来说800*600的大小已经能够满足欣赏图片的需要了。

写php压缩图片程序的时候要注意的问题

1.一定要判断图片大小
如果不判断图片大小就对图片进行缩放处理,就会导致小图变大图后很模糊的问题,影响用户体验。
2.最好把图片等比例压缩
为什么要对图片进行等比例压缩呢?答案很简单,为了让图片压缩后不变形,也就是长宽比改变导致图片变形,长被拉长或高倍拉高,可能会导致本来是一张美女的头像被拉成一张乱七八糟的凤姐,哈哈,用户不杀了你才怪,所以做图片压缩的时候切记要等比例压缩,具体怎么实现骑士不难,判断宽高,需要裁切谁,然后根据与裁切后的大小判断比例,再裁切另一个就对了,比如有一张1024*600的图片,要压缩成最大为800*600的图片,可以这样:

$ratio_w=800/1024;
$ratio_h=600/600;
$ratio=$ratio_w<$ratio_h?$ratio_w:$ratio_h;

$new_width=1024*$ratio;
$new_height=600*$ratio;

这样新的宽的和高度就判断出来了。

最后分享一下我写的php等比例压缩图片函数

/**
	 +------------------------------------------------------------------------------
	 *                等比例压缩图片
	 +------------------------------------------------------------------------------
	 * @param  String $src_imagename 源文件名        比如 “source.jpg”
	 * @param  int    $maxwidth      压缩后最大宽度
	 * @param  int    $maxheight     压缩后最大高度
	 * @param  String $savename      保存的文件名    “d:save”
	 * @param  String $filetype      保存文件的格式 比如 ”.jpg“
	 * @author  Yovae     <yovae@qq.com>
	 * @version  1.0
	 +------------------------------------------------------------------------------
	 */
function resizeImage($src_imagename,$maxwidth,$maxheight,$savename,$filetype)
{
	$im=imagecreatefromjpeg($src_imagename);
    $current_width = imagesx($im);
    $current_height = imagesy($im);

    if(($maxwidth && $current_width > $maxwidth) || ($maxheight && $current_height > $maxheight))
    {
        if($maxwidth && $current_width>$maxwidth)
        {
            $widthratio = $maxwidth/$current_width;
            $resizewidth_tag = true;
        }

        if($maxheight && $current_height>$maxheight)
        {
            $heightratio = $maxheight/$current_height;
            $resizeheight_tag = true;
        }

        if($resizewidth_tag && $resizeheight_tag)
        {
            if($widthratio<$heightratio)
                $ratio = $widthratio;
            else
                $ratio = $heightratio;
        }

        if($resizewidth_tag && !$resizeheight_tag)
            $ratio = $widthratio;
        if($resizeheight_tag && !$resizewidth_tag)
            $ratio = $heightratio;

        $newwidth = $current_width * $ratio;
        $newheight = $current_height * $ratio;

        if(function_exists("imagecopyresampled"))
        {
            $newim = imagecreatetruecolor($newwidth,$newheight);
           	imagecopyresampled($newim,$im,0,0,0,0,$newwidth,$newheight,$current_width,$current_height);
        }
        else
        {
            $newim = imagecreate($newwidth,$newheight);
           imagecopyresized($newim,$im,0,0,0,0,$newwidth,$newheight,$current_width,$current_height);
        }

        $savename = $savename.$filetype;
        imagejpeg($newim,$savename);
        imagedestroy($newim);
    }
    else
    {
        $savename = $savename.$filetype;
        imagejpeg($im,$savename);
    }           
}

转载请注明:Yovae Studio » php等比例压缩图片