Image class version 3 นี้ย้ายมาจาก V image class 2 โดยที่ยังคงคุณสมบัติเดิมๆเอาไว้ครบๆแต่เพิ่มเติมที่รองรับ Imagick driver ด้วย ซึ่งเจ้าตัว Imagick นี้ใช้ Image Magick เป็นตัวจัดการภาพอีกที และมันมีความสามารถเหนือกว่า GD ตรงที่สามารถจัดการกับภาพเคลื่อนไหวหรือ GIF animation ได้สะดวก
ดาวน์โหลด หรือติดตั้งผ่าน Composer
อ้างอิง เอกสาร API
ตาราง Property/Method ต่างๆ
Name | Description | Example |
---|---|---|
Properties | ||
allow_resize_larger | อนุญาตให้ขยายรูปใหญ่กว่าต้นฉบับได้ (true/false) | $Image->allow_resize_larger = false; |
jpg_quality | กำหนดคุณภาพของรูป jpg (0-100) | $Image->jpg_quality = 100; |
png_quality | กำหนดคุณภาพของรูป png (0-9) | $Image->png_quality = 0; |
master_dim | กำหนดให้ยึดแนวที่ระบุเป็นหลัก (auto, width, height) | $Image->master_dim = 'auto'; |
status | ตรวจสอบค่าที่ได้หลังเรียก method ใดๆเพื่อทำงาน จะได้ค่า true, false |
if ($Image->status === false && $Image->status_msg != null) {// there is an error message.} |
status_msg | เรียกดูสถานะที่ได้หลังเรียก method ใดๆเพื่อทำงาน จะได้ค่า string |
echo $Image->status_msg; |
source_image_data | เรียกดูค่าต่างๆของรูปภาพนั้นเมื่อทำการเรียก Driver class แล้ว จะได้ค่าที่เป็น array พร้อมความกว้าง, สูง, ประเภทรูป, ฯลฯ | $Image = new \Rundiz\Image\Drivers\Gd('/path/to/image.jpg'); print_r($Image->source_image_data); |
imagick_filter | กำหนด filter ก่อนจะทำการสั่งปรับแต่งภาพด้วยวิธีใดๆ ใช้ได้เมื่อใช้กับ Imagick driver เท่านั้น (อ้างอิง) |
$Image->imagick_filter = \Imagick::FILTER_LANCZOS; |
save_animate_gif | กำหนดให้อนุญาตบันทึกภาพหรือแสดงภาพเป็น GIF animation หรือไม่ (true, false) กำหนดเป็น true เมื่ออนุญาต, หากไม่อนุญาตจะเป็นภาพนิ่งธรรมดาให้กำหนด false ใช้ได้เมื่อใช้กับ Imagick driver เท่านั้น |
$Image->save_animate_gif = true; |
Imagick | รับค่า object ของ Imagick ไปทำงานต่อภายนอกได้เมื่อคุณต้องการใช้งานเพิ่มเติม | $MyImagickObject = $Image->Imagick; |
ImagickWatermark | รับค่า object ของ Imagick ของภาพ watermark ไปทำงานต่อภายนอก | $MyWatermarkObject = $Image->ImagickWatermark; |
Methods | ||
clear() | ล้างค่าต่างๆเมื่อทำงานเสร็จ เช่น หากกรณีต้องการย่อภาพหลายๆภาพ ให้ทำการล้างค่านี้ก่อนทำการเรียกย่อภาพลำดับต่อไป | $Image->clear(); |
crop($width, $height, $start_x = '0', $start_y = '0', $fill = 'transparent') | ครอปภาพตามขนาดที่กำหนด $width ความกว้างที่จะทำการครอป $height ความสูง $start_x ตำแหน่งที่จะเริ่มต้นในแกน x (ตัวเลขหรือ 'center') $start_y ตำแหน่งที่จะเริ่มต้นในแกน y (ตัวเลขหรือ 'middle') $fill สีที่จะทำการเทเมื่อเป็นภาพที่มีส่วนโปร่งใส (white, black, transparent) |
$Image->crop(500, 500, 'center', 'middle'); |
getImageSize() | ส่งกลับค่าขนาดของภาพในแบบ array ['width'] and ['height'] | print_r($Image->getImageSize()); |
resize($width, $height) | เปลี่ยนขนาดภาพตามอัตราส่วน $width ความกว้าง $height ความสูง |
$Image->resize(500, 500); |
resizeNoRatio($width, $height) | เปลี่ยนขนาดภาพโดยไม่สนใจอัตราส่วน $width ความกว้าง $height ความสูง |
$Image->resizeNoRatio(1000, 500); |
rotate($degree = 90) | หมุนภาพ โดยค่า $degree จะหมุนทวนเข็มนาฬิกาเสมอ หากต้องการหมุน 90 องศาไปทางขวาตามเข็มนาฬิกาให้ใช้ 270 $degree ค่าองศาในการหมุนภาพ (0, 90, 180, 270) สำหรับผู้ใช้ PHP รุ่น 5.5 หรือใหม่กว่า สามารถใช้การ flip ได้โดยกำหนดเป็น (hor, vrt, horvrt) แต่หากคุณใช้ PHP เก่ากว่า 5.5 แนะนำให้ใช้ Imagick driver ถ้าบน server ของคุณได้ติดตั้งเอาไว้ |
$Image->rotate(90); |
watermarkImage($wm_img_path, $wm_img_start_x = 0, $wm_img_start_y = 0) | เพิ่มลายน้ำให้กับภาพโดยใช้ลายน้ำแบบรูปภาพ $wm_img_path พาธรูปภาพที่เป็นลายน้ำ $wm_img_start_x ตำแหน่งเริ่มต้นในแกน x กำหนดเป็นตัวเลข หรือ 'left', 'center', 'right' $wm_img_start_y ตำแหน่งเริ่มต้นในแกน y กำหนดเป็นตัวเลข หรือ 'top', 'middle', 'bottom' |
$Image->watermarkImage('watermark.png', 'center', 'middle'); |
watermarkText($wm_txt_text, $wm_txt_font_path, $wm_txt_start_x = 0, $wm_txt_start_y = 0, $wm_txt_font_size = 10, $wm_txt_font_color = 'transwhitetext', $wm_txt_font_alpha = 60) | เพิ่มลายน้ำให้กับภาพโดยใช้ลายน้ำแบบข้อความ $wm_txt_text ข้อความที่จะเป็นลายน้ำ $wm_txt_font_path พาธไฟล์ที่เป็น true type font $wm_txt_start_x ตำแหน่งเริ่มต้นในแกน x กำหนดเป็นตัวเลข หรือ 'left', 'center', 'right' $wm_txt_start_y ตำแหน่งเริ่มต้นในแกน y กำหนดเป็นตัวเลข หรือ 'top', 'middle', 'bottom' $wm_txt_font_size ขนาดตัวอักษร กำหนดเป็นตัวเลข $wm_txt_font_color สีตัวอักษร กำหนดเป็น 'black', 'white', 'transwhitetext' $wm_txt_font_alpha ความใสของตัวอักษร กำหนดเป็นตัวเลข (0-127) |
$Image->watermarkText('Copyright. 2016', 'tahoma.ttf', 'center', 'middle', 14); |
save($file_name) | บันทึกภาพลงเป็นไฟล์ $file_name พาธและชื่อไฟล์ที่จะบันทึก |
$Image->save('/path/to/new-file-name.jpg'); |
show($file_ext = '') | แสดงภาพทางเบราเซอร์ $file_ext นามสกุลไฟล์ |
$Image->show(); |
ตัวอย่าง
การเริ่ม class หากไม่ได้ติดตั้งผ่าน Composer ให้ทำการ include/require ไฟล์ Interface และ AbstractClass ด้วยทุกครั้ง เช่น
require __DIR__.'/imageclass3/Rundiz/Image/ImageInterface.php';
require __DIR__.'/imageclass3/Rundiz/Image/ImageAbstractClass.php';
จากนั้นจึงค่อย include/require ไฟล์ที่เป็น Driver ที่จะใช้ เช่น หากจะใช้ GD ให้เรียกไฟล์ Rundiz/Image/Drivers/Gd.php หรือหากจะใช้ Imagick ให้เรียกใช้ไฟล์ Rundiz/Image/Drivers/Imagick.php
require __DIR__.'/imageclass3/Rundiz/Image/Drivers/Gd.php';
require __DIR__.'/imageclass3/Rundiz/Image/Drivers/Imagick.php';
แต่ทั้งนี้ถ้าหากติดตั้งผ่าน Composer ก็ให้เรียกใช้ได้เลย ไม่ต้อง include/require อะไรอีก
เปลี่ยนขนาดภาพ, ย่อภาพ
$Image = new \Rundiz\Image\Drivers\Gd('/path/to/source-image.jpg');
$Image->resize(900, 600);
$Image->save('/path/to/new-image.jpg');
ในกรณีที่ภาพต้นฉบับเล็กกว่าขนาดที่กำหนด จะไม่สามารถปรับเปลี่ยนขนาดภาพได้ คุณต้องกำหนดอนุญาตให้ขยายรูปใหญ่กว่าต้นฉบับได้ ดังนี้
$Image = new \Rundiz\Image\Drivers\Gd('/path/to/source-image.jpg');
$Image->allow_resize_larger = true;
$Image->resize(2900, 2600);
$Image->save('/path/to/new-image.jpg');
ครอปภาพ
$Image = new \Rundiz\Image\Drivers\Gd('/path/to/source-image.jpg');
$Image->crop(400, 400, 'center', 'middle');
$Image->save();
หมุนภาพ
$Image = new \Rundiz\Image\Drivers\Gd('/path/to/source-image.jpg');
$Image->rotate(270);
$Image->save('/path/to/new-image.jpg');
กลับด้านภาพ (flip, flop)
ทำได้เฉพาะ PHP 5.5 ขึ้นไป หรือใช้ Imagick driver.
$Image = new \Rundiz\Image\Drivers\Gd('/path/to/source-image.jpg');
$Image->rotate('horvrt');
$Image->save('/path/to/new-image.jpg');
ใส่ลายน้ำ (watermark)
การใส่ลายน้ำแบบภาพ
$Image = new \Rundiz\Image\Drivers\Gd('/path/to/source-image.jpg');
$Image->watermarkImage('/path/to/watermark-image.png', 'right', 'bottom');
$Image->save('/path/to/new-image.jpg');
การใส่ลายน้ำแบบข้อความ
$Image = new \Rundiz\Image\Drivers\Gd('/path/to/source-image.jpg');
$Image->watermarkText('watermark เป็นภาษาไทยก็ได้.', '/path/to/font.ttf', 'center', 'middle', 15);
$Image->save('/path/to/new-image.jpg');
การจัดการทีละหลายๆรูปและหลายๆขั้นตอน
คุณสามารถใช้งาน class นี้จัดการรูป (เปลี่ยนขนาด, หมุน, ครอป, ใส่ลายน้ำ) ได้ทีละหลายๆรูปและหลายๆขั้นตอนไปด้วยกัน.
$images = array('/path/to/image1.jpg', '/path/to/image2.png', '/path/to/image3.gif');
$i = 1;
foreach ($images as $each_image) {
$Image = new \Rundiz\Image\Drivers\Gd($each_image);
$Image->resize(900, 600);
$Image->rotate('vrt');
$Image->crop(600, 600);
$Image->watermarkImage('/path/to/watermark-image.png', 'left', 'bottom');
$Image->save('/path/to/new-image-'.$i.'.jpg'); // คำเตือน! เมื่อกำหนดชื่อและนามสกุลภาพในการ save มันจะทำการเปลี่ยนประเภทของภาพไปตามนามสกุลที่กำหนดให้
$Image->clear();
$i++;
}
unset($each_image, $i, $images);