有GD格式及ImageMagick縮圖方式
/**
* GD縮圖
* $dir - 原始目錄
* $file - 檔案名稱
* $size - 最終的大小
*/
function squareThumbnailByGd($dir, $file, $size) {
$ratioSize = 120; // 預先縮圖,無論圖片大小,先強制縮成指定像素為基準的大小
$realPosition = $dir . $file; // 圖片加路徑
$thumbDir = $dir . 'thumbnails/'; // 縮圖目錄
if (file_exists($realPosition)) {
$fileName = current(explode('.', $file)); // 檔名
$ext = strtolower(end(explode('.', $realPosition))); // 副檔名
$newName = $fileName . '_' . $size . 'x' . $size . '_byGD.' . 'jpg'; //新檔名
// 如果該縮圖存在則直接出圖
if (file_exists($thumbDir . $newName)) {
echo '<img src="' . $thumbDir . $newName . '" />';
return;
}
switch ($ext) {
case 'jpg':
case 'jpeg':
$src = imagecreatefromjpeg($realPosition);
break;
case 'gif':
$src = imagecreatefromgif($realPosition);
break;
case 'png':
$src = imagecreatefrompng($realPosition);
break;
}
$srcW = imagesx($src); // 原始寬度
$srcH = imagesy($src); // 原始高度
if ($srcW >= $srcH) {
// 以高來等比例縮第一次圖
$newW = ceil($srcW / $srcH * $ratioSize); // 新寬度
$newH = $ratioSize; // 新高度
} else {
// 以寬來等比例縮第一次圖
$newW = $ratioSize; // 新寬度
$newH = ceil($srcH / $srcW * $ratioSize); // 新高度
}
// 縮第一次圖
$im = imagecreatetruecolor($newW, $newH);
imagecopyresampled($im, $src, 0, 0, 0, 0, $newW, $newH, $srcW, $srcH);
// 縮需求大小的圖
$im2 = imagecreatetruecolor($size, $size);
$coordX = ($newW - $size) / 2;
$coordY = ($newH - $size) / 2;
imagecopyresampled($im2, $im, 0, 0, $coordX, $coordY, $newW, $newH, $newW, $newH);
imagejpeg($im2, $thumbDir . $newName, 100); //輸出
imagedestroy($im);
imagedestroy($im2);
echo '<img src="' . $thumbDir . $newName . '" />';
}
}
- 12月 22 週二 200923:33
縮圖
1
