A-AA+then

สร้าง thumbnail กับ size ภาพ ขนาดเกิน 2600*xxxx px ไม่ได้ ครับ

1,506
ปกติ ถ้าสร้าง กับ ไฟล์ ภาพ ขนาด ตำกว่า 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;
    }
  }
?>

3 ความคิดเห็น

ไม่มี error หรือครับ

โดยปกติอาจเกิดจาก หน่วยความจำไม่พอนะครับ ให้ลองเพิ่มดูครับ

ini_set('memory_limit', '64M');

ลองเปลี่ยนแปลงค่า 64M ตามต้องการดูครับ

กรณีอื่นๆ อาจได้แก่ ฟงัก์ชั่นต่างๆคืนค่าไม่ถูกต้อง ให้ลองตรวจสอบผลลัพท์ทีละคำสั่ง ครับ

1

ใช้ได้แล้ว ครับ  ผมแค่ ก๊อป บรรทัด

ini_set('memory_limit', '64M');

ของคุณ goragod ไปใส่ ไว้บรรทัดบนสุด ก็ใช้ได้เลยครับ

ขอบคุณ คุณ goragod มากๆ ครับ ใจดีสุดๆ  ^_^
2

ยังก็ลองใช้ของตัวนี้ดูนะครับสุดยอดดี ลิงค์
3
^