Image class v.3

image-class-v3

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);

ใส่ความเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *

คุณอาจใช้แท็กHTMLและแอททริบิวต์เหล่านี้: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>