ที่มา , อ้างถึง , แหล่งข้อมูล

จำนวนการเปิดอ่าน 884
คะแนนเอกสาร

ใน Library Imagick จะมี method ที่ใช้สำหรับการย่อขนาดภาพ ได้อย่างเมพๆ ตัวนึง นั่นก็คือ resizeImage ซึ่งจะมีโครงสร้าง ดังนี้

bool Imagick::resizeImage ( 
    int $columns , 
    int $rows , 
    int $filter , 
    float $blur 
    [, bool $bestfit = false ] 
)

โดยตัวแปลแต่ละอย่าง จะทำหน้าที่ดังนี้

  • $columns ความกว้างของภาพ ที่ต้องการ (ซึ่งก็ไม่รู้ทำไม มันไม่ใช่คำว่า width)
  • $rows ความสูงของภาพ ที่ต้องการ (หรือก็คือ height)
  • $filter อัลกอริทึ่มในการย่อภาพ ซึ่งจะอธิบายในหัวข้อถัดไป ว่ามีแบบไหน และได้ผลเป็นยังไง ได้บ้าง
  • $blur ความคมชัดของภาพ หลังจากย่อแล้ว
  • $bestfit ใช้ในการปรับขนาดของภาพ หลังจากย่อ ถ้า scale ความกว้าง ความสูง ของเรา ใส่แล้วไม่ตรงกับภาพขนาดจริง

วิธีการใช้งาน และคำสั่ง ในการย่อภาพ

รูปแบบคำสั่ง ก็ไม่ได้ยากอะไรมากมาย แค่โหลดภาพเข้าไป สั่งย่อ แล้วก็ พ่นภาพผลลัพธ์ ออกมา เท่านั้นเอง ดังนี้

$src_file = 'image.jpg';
$dest_file = 'image.resize.jpg';

$img = new Imagick();
$img -> readImage($src_file);

$img -> resizeImage(100, 100, Imagick::FILTER_UNDEFINED, 1, true);

$img -> writeImage($dest_file);

$img -> clear();
$img -> destroy();

เพียงเท่านี้เอง เราก็จะได้ไฟล์ image.resize.jpg ที่ถูกย่อแล้ว มาใช้งาน

ภาพต้นฉบับ

ขนาดจริง 148 x 240

image

ภาพหลังจากย่อแล้ว

ขนาดจริง 61 x 100

image

ขนาดจริง

ภาพหลังจากย่อ แต่ไม่ใส่ bestfit

ขนาดจริง 100 x 100

image

จะสังเกตเห็นว่า ถ้าไม่ใส่ $bestfit เป็น true จะได้ ผลลัพธ์ตาม ความกว้างสูงที่เรากำหนดเลย แต่ภาพจะเพี้ยน

การใช้ filter แต่ละแบบ

แสดงเป็นตาราง ด้านล่าง ดังนี้ครับ เลือกใช้ได้ตามแบบที่ชอบเลย บางแบบมันจะทำให้การประมวลผล นานขึ้น ซึ่งผมได้เขียนเวลาใน ที่ใช้ในการประมวลผลของภาพ เชอรี่นี้ กำกับไว้ด้วย เพื่อเอาไว้พิจารณาใช้งาน

FILTER_UNDEFINED

image

0.0031149387359619

FILTER_POINT

image

0.0029199123382568

FILTER_POINT

image

0.0014009475708008

FILTER_TRIANGLE

image

0.0023899078369141

FILTER_HERMITE

image

0.0023171901702881

FILTER_HANNING

image

0.003169059753418

FILTER_HAMMING

image

0.0040550231933594

FILTER_BLACKMAN

image

0.0031530857086182

FILTER_GAUSSIAN

image

0.0026590824127197

FILTER_QUADRATIC

image

0.0024449825286865

FILTER_CUBIC

image

0.0026161670684814

FILTER_CATROM

image

0.0025761127471924

FILTER_MITCHELL

image

0.0026459693908691

FILTER_LANCZOS

image

0.0026772022247314

FILTER_BESSEL

image

0.0046288967132568

FILTER_SINC

image

0.005281925201416

รู้สึกภาพตัวอย่าง ดูแทบไม่เห็นความแตกต่างเลยครับ เหอะๆๆ