PHP(16) 生成縮略圖

 
PHP(16) 生成縮略圖
 
在PHP中實現生成縮略圖的操做是很是簡單的,其主要依靠的函數是p_w_picpathcopyresampled或p_w_picpathcopyresized.其區別在於前者將從新採樣!這裏咱們主要採用p_w_picpathcopyresampled

Imagecopyresampled函數的語法結構是:

p_w_picpathcopyresampled ( resource $目標圖像資源 , resource $源圖像資源 , int $目標圖像X軸, int 目標圖像Y軸 , int $源圖像X軸 , int $源圖像Y軸 , int $目標圖像寬度 , int $目標圖像高度 , int $源圖像寬度 , int $源圖像高度 );
這個函數的參數較多,可是理解起來仍是很是簡單的!
 
其含義是:從某圖像(源圖像)的某個位置(X,Y)起復制指定區域(width,height)後,粘貼到另一個圖像(目標圖像)的某個位置(X,Y)起的指定區域(width,height)。
 

那麼,咱們就從這個函數來分析一下,咱們應該作的準備工做。

第一:目標圖像,並且目標圖像的數據是來源於源圖像的,因此,咱們只須要準備一張空圖像就能夠了,因此…

$destImg = p_w_picpathcreatetruecolor(width,height);

但關鍵問題是,目標圖像的資源的寬度和高度沒有辦法事先固定!並且咱們的目的是生成原圖的縮略圖,因此,若是咱們知道了源圖像的寬度和高度後,那麼就能夠肯定目標圖像的寬度和高度了!好了,幹活!

第二步:獲取源圖像的寬度和高度---getp_w_picpathsize

getp_w_picpathsize函數的語法是:

$變量名稱 = getp_w_picpathsize(「文件的位置及全稱」);

因此,咱們只須要知道源圖像的位置及全稱就能夠了,好了,咱們先固定一個文件吧!

$filename = 「./01.jpg」;

list($srcWidth,$srcHeight) = getp_w_picpathsize($filename);

 
如今好了,源圖像的尺寸已經知道了,那麼,第一步也就能夠肯定了,並且,如今咱們發現第二步和第一步的順序也必須調換一下!其代碼以下:
$filename = 「./01.jpg」;

$scalePercent = 0.5;

list($srcWidth,$srcHeight,$imgType) = getp_w_picpathsize($filename);

$destWidth = ceil($srcWidth * $scalePercent);

$destHeight = ceil($srcHeight * $scalePercent);

通過以上的分析,p_w_picpathcopyresampled函數的不少參數就能夠肯定下了,如今就變成了:

p_w_picpathcopyresampled($destImg,$源圖像資源,0,0,0,0,$destWidth,$destHeight,$srcWidth,$srcHeight);
那麼如今的關鍵問題是:如何將源圖像變量資源(resource)類型的變量!

在GD函數庫中,p_w_picpathcreate、p_w_picpathcreatetruecolor是建立一個空白的圖像資源;而p_w_picpathcreatefromgif、p_w_picpathcreatefromjpeg、p_w_picpathcreatefrompng,則是將已經存在的圖像文件變成圖像資源,好了,幹活吧!
$srcImage = p_w_picpathcreatefromjpeg($filename);
好了,如今全部的參數都肯定好了!以下

p_w_picpathcopyresampled($destImg,$srcImg,0,0,0,0,$destWidth,$destHeight,$srcWidth,$srcHeight);
最後,只剩下一個問題,將縮略圖生成文件存儲到磁盤上就OK了!

Imagejpeg($destImg,」./small.jpg」);

Imagedestroy($srcImg);

Imagedestroy($destImg);

最後的代碼以下:
 
<?php
 
$filename   = "./01.jpg";
 
$scalePercent = 0.5;
 
list ( $srcWidth , $srcHeight ) = getp_w_picpathsize($filename);
 
$destWidth = ceil($srcWidth * $scalePercent);
 
$destHeight = ceil($srcHeight * $scalePercent);
 
$destImg = p_w_picpathcreatetruecolor($destWidth,$destHeight);
 
$srcImg = p_w_picpathcreatefromjpeg($filename);
 
p_w_picpathcopyresampled( $destImg , $srcImg , 0 , 0 , 0 , 0 , $destWidth , $destHeight , $srcWidth , $srcHeight );
 
p_w_picpathjpeg( $destImg , "small.jpg" );
 
p_w_picpathdestroy( $srcImg );
 
p_w_picpathdestroy( $destImg );
 
?>
 
固然如今的這個功能還有一些侷限性,例如源文件不能固定、沒有添加水印效果等,這些,我會在之後的博文中繼續給你們做介紹!
相關文章
相關標籤/搜索