PHP:圖片不變形處理(留白處理與截取處理)

此函數用於處理圖片,變成縮略圖,能使圖片不變形,能選擇兩種模式,一是圖片留白處理(放在畫布中間),另一個是截取圖片處理(從中間截取);

<?php
//將$filestring的圖像文件變成等比不變形的縮略圖($dstwidth*$dstheight)
//$type 用1表示留白方式處理,2表示截取方式處理
function getThumb($filestring,$dstwidth,$dstheight,$type)
{
    //0.局部變量聲明
    $srcimg=0;
    $dstx=$dsty=$srcx=$srcy=0;
    $dstimg=imagecreatetruecolor($dstwidth,$dstheight);
    //1.得到$filestring裏的文件類型(png,gif,jpeg,jpg)
    $yuan=getimagesize($filestring);
    $filetype=$yuan['mime'];
    switch($filetype)
    {
        case "image/png":$srcimg=imagecreatefrompng($filestring);break;
        case "image/jpg":
        case "image/jpeg":$srcimg=imagecreatefromjpeg($filestring);break;
        case "image/gif":$srcimg=imagecreatefromgif($filestring);break;
    }
    //2.得到原來文件的寬和高$src_w,$src_h
    $src_w=imagesx($srcimg);
    $src_h=imagesy($srcimg);
    //3.計算變形
    if($dstwidth/$dstheight < $src_w/$src_h)//傳來的圖像是橫圖
    {
        if($type==1)//用戶需要留白處理
        {
            $dsty=(int)($dstheight-$src_h*$dstwidth/$src_w)/2;
            $dstheight=$dstheight-2*$dsty;
        }
        else//用戶需要截取處理
        {
            $srcx=(int)($src_w-$dstwidth*$src_h/$dstheight)/2;
            $src_w=$src_w-2*$srcx;
        }
    }
    else  //傳來的圖像是豎圖或等比的圖
    {
        if($type==1)//用戶需要留白處理
        {
            $dstx=(int)($dstwidth-$src_w*$dstheight/$src_h)/2;
            $dstwidth=$dstwidth-2*$dstx;
        }
        else//用戶需要截取處理
        {
            $srcy=(int)($src_h-$dstheight*$src_w/$dstwidth)/2;
            $src_h=$src_h-2*$srcy;
        }       
    }
    //4.繪製縮略圖
    imagecopyresampled($dstimg,$srcimg,$dstx,$dsty,$srcx,$srcy,$dstwidth,$dstheight,$src_w,$src_h);
    switch($filetype)
    {
        case "image/png":imagepng($dstimg,"img_thumb.jpg",9);break;
        case "image/jpg":
        case "image/jpeg":imagejpeg($dstimg,"img_thumb.jpg",100);break;
        case "image/gif":imagegif($dstimg,"img_thumb.jpg",100);break;
    }
    return $dstimg;

}
?>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章