封裝 thumbnail() 與 imageToFile() 兩個函式,支援 JPEG/PNG/GIF/BMP,自動偵測型別並維持長寬比。
<?php
function thumbnail($inputFile, $maxSize = 100) {
$info = getimagesize($inputFile);
$type = isset($info['type']) ? $info['type'] : $info[2];
if (!(imagetypes() & $type)) return false; // 不支援格式
$w = isset($info['width']) ? $info['width'] : $info[0];
$h = isset($info['height']) ? $info['height'] : $info[1];
if ($w <= $maxSize && $h <= $maxSize) return imagecreatefromstring(file_get_contents($inputFile));
$wRatio = $maxSize / $w; $hRatio = $maxSize / $h;
if ($wRatio * $h < $maxSize) { $tW = $maxSize; $tH = ceil($wRatio * $h); }
else { $tH = $maxSize; $tW = ceil($hRatio * $w); }
$src = imagecreatefromstring(file_get_contents($inputFile));
$thumb = imagecreatetruecolor($tW, $tH);
imagecopyresampled($thumb, $src, 0,0,0,0, $tW,$tH, $w,$h);
imagedestroy($src);
return $thumb;
}
function imageToFile($im, $fileName, $quality = 80) {
if (!$im || file_exists($fileName)) return false;
$ext = strtolower(substr($fileName, strrpos($fileName, '.')));
switch ($ext) {
case '.gif': return imagegif($im, $fileName);
case '.jpg': case '.jpeg': return imagejpeg($im, $fileName, $quality);
case '.png': return imagepng($im, $fileName);
case '.bmp': return imagewbmp($im, $fileName);
default: return false;
}
}
// 使用範例
$im = thumbnail('temp.jpg', 100);
imageToFile($im, 'temp-thumbnail.jpg');
?>