สร้าง thumbnail กับ size ภาพ ขนาดเกิน 2600*xxxx px ไม่ได้ ครับ
ปกติ ถ้าสร้าง กับ ไฟล์ ภาพ ขนาด ตำกว่า 2600*xxxx px ได้ครับ แต่ ถ้าเกิน จะสร้างไม่ได้ หรือ ไม่เห็นอะไรเลย ครับ
ต้องทำการแก้ไข ยังไงครับ
ข้างล่างนี้เป็น code ที่ใช้ครับ
ปกติ จะใช้แบบนี้ ครับ thumbcreate.php?file=image.jpg แล้วจะคืนค่า thumbnail กลับมา แต่ถ้า ไฟล์ภาพ ใหญ่มากๆ จะไม่เห็นอะไรเลยครับ
thumbcreate.php
<?php
define("THUMB_SIZE", 100);
$file = $_GET["file"];
$oldDimension = GetImageSize($file);
$oldWidth = $oldDimension[0];
$oldHeight = $oldDimension[1];
if ($oldWidth <= THUMB_SIZE && $oldHeight <= THUMB_SIZE) {
header("Location: $file");
exit;
}
$newDimension = calculateNewDimension($oldDimension);
$newWidth = $newDimension[0];
$newHeight = $newDimension[1];
$oldImage = loadImageFromFile($file);
$newImage = ImageCreateTrueColor($newWidth, $newHeight);
ImageCopyResampled($newImage, $oldImage, 0, 0, 0, 0, $newWidth, $newHeight, $oldWidth, $oldHeight);
ImageDestroy($oldImage);
ob_start();
ImageJPEG($newImage);
$imageDataLength = ob_get_length();
ImageDestroy($newImage);
header('Content-Type: image/jpeg');
header("Content-Length: " . $imageDataLength);
ob_end_flush();
function calculateNewDimension($oldDimension) {
$oldWidth = $oldDimension[0];
$oldHeight = $oldDimension[1];
if ($oldWidth > $oldHeight) {
$newWidth = THUMB_SIZE;
$scale = $oldWidth / THUMB_SIZE;
$newHeight = (int) round($oldHeight / $scale);
}
else {
$newHeight = THUMB_SIZE;
$scale = $oldHeight / THUMB_SIZE;
$newWidth = (int) round($oldWidth / $scale);
}
return array($newWidth, $newHeight);
}
function loadImageFromFile($file) {
$pathParts = pathinfo($file);
$ext = strtolower($pathParts["extension"]);
switch ($ext) {
case "gif":
return ImageCreateFromGIF($file);
break;
case "jpg":
case "jpeg":
return ImageCreateFromJPEG($file);
break;
case "png":
return ImageCreateFromPNG($file);
break;
}
}
?>
ต้องทำการแก้ไข ยังไงครับ
ข้างล่างนี้เป็น code ที่ใช้ครับ
ปกติ จะใช้แบบนี้ ครับ thumbcreate.php?file=image.jpg แล้วจะคืนค่า thumbnail กลับมา แต่ถ้า ไฟล์ภาพ ใหญ่มากๆ จะไม่เห็นอะไรเลยครับ
thumbcreate.php
<?php
define("THUMB_SIZE", 100);
$file = $_GET["file"];
$oldDimension = GetImageSize($file);
$oldWidth = $oldDimension[0];
$oldHeight = $oldDimension[1];
if ($oldWidth <= THUMB_SIZE && $oldHeight <= THUMB_SIZE) {
header("Location: $file");
exit;
}
$newDimension = calculateNewDimension($oldDimension);
$newWidth = $newDimension[0];
$newHeight = $newDimension[1];
$oldImage = loadImageFromFile($file);
$newImage = ImageCreateTrueColor($newWidth, $newHeight);
ImageCopyResampled($newImage, $oldImage, 0, 0, 0, 0, $newWidth, $newHeight, $oldWidth, $oldHeight);
ImageDestroy($oldImage);
ob_start();
ImageJPEG($newImage);
$imageDataLength = ob_get_length();
ImageDestroy($newImage);
header('Content-Type: image/jpeg');
header("Content-Length: " . $imageDataLength);
ob_end_flush();
function calculateNewDimension($oldDimension) {
$oldWidth = $oldDimension[0];
$oldHeight = $oldDimension[1];
if ($oldWidth > $oldHeight) {
$newWidth = THUMB_SIZE;
$scale = $oldWidth / THUMB_SIZE;
$newHeight = (int) round($oldHeight / $scale);
}
else {
$newHeight = THUMB_SIZE;
$scale = $oldHeight / THUMB_SIZE;
$newWidth = (int) round($oldWidth / $scale);
}
return array($newWidth, $newHeight);
}
function loadImageFromFile($file) {
$pathParts = pathinfo($file);
$ext = strtolower($pathParts["extension"]);
switch ($ext) {
case "gif":
return ImageCreateFromGIF($file);
break;
case "jpg":
case "jpeg":
return ImageCreateFromJPEG($file);
break;
case "png":
return ImageCreateFromPNG($file);
break;
}
}
?>
ไม่มี error หรือครับ
โดยปกติอาจเกิดจาก หน่วยความจำไม่พอนะครับ ให้ลองเพิ่มดูครับ
ini_set('memory_limit', '64M');
ลองเปลี่ยนแปลงค่า 64M ตามต้องการดูครับ
กรณีอื่นๆ อาจได้แก่ ฟงัก์ชั่นต่างๆคืนค่าไม่ถูกต้อง ให้ลองตรวจสอบผลลัพท์ทีละคำสั่ง ครับ
ini_set('memory_limit', '64M');
ของคุณ goragod ไปใส่ ไว้บรรทัดบนสุด ก็ใช้ได้เลยครับ
ขอบคุณ คุณ goragod มากๆ ครับ ใจดีสุดๆ ^_^