1. 程式人生 > >解決php縮圖變形的問題

解決php縮圖變形的問題

之前php生成縮略時候遇到問題,得到自己尺寸,變形.

以下生成php縮略函式自己前人基礎修改,增加生成縮略位置,/*01 02 03 04 0506 07 08 09 1011 12 13 14 1516 17 18 19 2021 22 23 24 25*/所示.

其中13表示居中生成縮略圖.而01表示部分生成縮略圖.依次類推可以原圖基本得到自己縮略以及尺寸.

下面函式原型,效率一般,如果朋友可以修改,最好了.

function createThumbs($SFile,$DFile,$DWidth,$DHeight,$SWidth,$SHeight,$Suf,$x)

{ //$SFile 源圖片路徑名稱 : pic/pics/pic.jpg

//$DFile 目標圖片路徑,縮略存放路徑 thumbs/thum/thum.jpg

//$DWidth  生成圖片尺寸

//$DHeight 要生成的圖片尺寸

//$SWidth 源圖片尺寸寬 

//$SHeight  源圖片尺寸高

//$Suf  圖片名稱 ,網站生成.jpggif兩種格式,所以函式涉及兩種格式.

//$x 縮略圖片生成位置選擇,如$x=3 ,左右居中 而$x=15時,居中,生成縮略

/*01 02 03 04 0506 07 08 09 1011 12 13 14 1516 17 18 19 20
21 22 23 24 25*/$rSor=$SWidth/$SHeight;  //源圖片的寬和高比值$rDes=$DWidth/$DHeight; 目標檔案的寬和高比值$SX=$SY=0;   //初始化X和Y軸偏移的值$tw=$DWidth; //目標變數的寬度$th=$DHeight; //目標變數的高度$DWidth<230?$v=32:$v=97;  // 如果寬小於230,那就圖片生成質量為32,否則是97 自己可以適當修改,最大值為100if($rSor<$rDes){ //如果源比值比目標比值小,則..$th=$DWidth/$rSor; $SY=($DHeight-$th)/2;}elseif($rSor>$rDes){ //如果源比值比目標比值大,則...
$tw=$rSor*$DHeight; $SX=($DWidth-$tw)/2;

}//以上就是生成求得$SX和$SY值,也就使得上下和左右居中

//以下就是根據不同的$x值而生成不的$SX和$XY值.

switch($x){ //生成縮圖片的位置case 1: $SX=0; $SY=0;break;case 2: $SX*=0.5; $SY=0;break;case 3: $SY=0;break;case 4: $SX*=1.5; $SY=0;break;case 5: $SX*=2; $SY=0;break;case 6: $SX=0; $SY*=0.5;break;case 7: $SX*=0.5; $SY*=0.5;break;case 8: $SY*=0.5;break;case 9: $SX*=1.5; $SY*=0.5;break;case 10:$SX*=2; $SY*=0.5;break;case 11:$SX=0; break;case 12:$SX*=0.5; break;case 13: break;case 14:$SX*=1.5; break;case 15:$SX*=2; break;case 16:$SX=0; $SY*=1.5;break;case 17:$SX*=0.5; $SY*=1.5;break;case 18: $SY*=1.5;break;case 19:$SX*=1.5; $SY*=1.5;break;case 20:$SX*=2; $SY*=1.5;break;case 21:$SX=0; $SY*=2;break;case 22:$SX*=0.5; $SY*=2;break;case 23: $SY*=2;break;case 24:$SX*=1.5; $SY*=2;break;case 25:$SX*=2; $SY*=2;break;default:break;

}

下面這個不用介紹了,大家都知道.

$tn=imagecreatetruecolor($DWidth,$DHeight);$Suf=='jpg'?$image=imagecreatefromjpeg($SFile):$image=imagecreatefromgif($SFile);imagecopyresampled($tn,$image,round($SX),round($SY),0,0,round($tw),round($th),$SWidth,$SHeight);imagejpeg($tn,$DFile,$v);ImageDestroy($tn);

}

函式缺點生成動態gif格式縮略圖片.其實我自己也很鬱悶,這是php本身沒有這樣的功能,就是有那效率可就差得遠了.

以上函式有什麼缺點,還望各路高手斧正!