之前我用php生成縮略圖的時候就遇到這樣的問題,要麼是不能得到想要自己的尺寸,要麼就是變形.
以下這個生成php縮略圖的函數是自己在前人的基礎上做的修改,增加了生成縮略圖的位置,如/*
01 02 03 04 05
06 07 08 09 10
11 12 13 14 15
16 17 18 19 20
21 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 圖片的後綴名稱 ,因我網站就是生成.jpg和gif兩種格式,所以本函數就涉及得這兩種格式.
//$x 縮略圖片的生成位置選擇,如$x=3 則靠上部,左右居中 而$x=15時,則上下居中,靠右生成縮略圖
01 02 03 04 05
06 07 08 09 10
11 12 13 14 15
16 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 自己可以適當修改,最大值爲100
if($rSor<$rDes){ //如果源比值比目標比值小,則..
$th=$DWidth/$rSor;
$SY=($DHeight-$th)/2;
}elseif($rSor>$rDes){ //如果源比值比目標比值大,則...
$tw=$rSor*$DHeight;
$SX=($DWidth-$tw)/2;
}//以上就是生成求得$SX和$SY值,也就使得上下和左右居中
//以下就是根據不同的$x值而生成不的$SX和$XY值.
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;
}
下面這個不用介紹了,大家都知道.
$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本身沒有這樣的功能,就是有那效率可就差得遠了.
以上函數有什麼缺點,還望各路高手斧正!