คลาสนี้เป็นทางเลือกแทนแพ็คเกจ Intervention Image เพื่อการทำงานกับข้อความบนรูปภาพที่ยืดหยุ่นยิ่งขึ้น ใช้วิธีนี้หากคุณต้องการ ปรับข้อความให้พอดี กับพื้นที่ที่กำหนด คำนวณขนาดแบบอักษร โดยอัตโนมัติ และเปลี่ยน ความสูงของบรรทัด วิธีการวาดข้อความยังรู้วิธีคืนขนาดที่แท้จริงของจารึกซึ่งจะช่วยให้วางบล็อกไว้ข้างใต้ได้
นอกเหนือจากการทำงานที่ยืดหยุ่นกับข้อความแล้ว คลาสนี้ยังมี Image API ที่คล้ายกับแพ็คเกจการแทรกแซง รวมถึงการปรับขนาดโปสเตอร์อัจฉริยะ ฟิลเตอร์ การวาดรูปทรง และการซ้อนภาพอื่นๆ
หากคุณไม่ได้ใช้ composer ในงานของคุณ คุณอาจสนใจในความเรียบง่ายของคลาสและการไม่ต้องพึ่งพาใดๆ โปรดทราบว่าคลาสนี้รองรับไดรเวอร์ PHP-GD เท่านั้น คุณยังสามารถสืบทอดคลาสของคุณได้อย่างง่ายดาย — คุณสามารถแทนที่เมธอดทั้งหมดของพาเรนต์ได้
วิธีที่ดีที่สุดในการติดตั้ง poster editor อย่างรวดเร็วและง่ายดายด้วย Composer
อย่างไรก็ตาม คุณสามารถกำหนดคลาสได้โดยตรงโดยไม่ต้องใช้ตัวโหลด ซึ่งจะไม่ส่งผลกระทบต่อประสิทธิภาพแต่อย่างใด
php composer.phar require antonlukin/poster-editor
ในกรณีที่เกิดข้อผิดพลาด วิธีการเรียนจะส่งกลับข้อยกเว้น
ดังนั้นจึงเป็นการดีที่สุดที่จะเรียกพวกมันในบล็อก try..catch
// Using composer
require_once __DIR__ . ' /vendor/autoload.php ' ;
// Or directly
// require_once __DIR__ . '/PosterEditor.php';
try {
$ image = new PosterEditor PosterEditor ();
$ image -> make ( ' images/bridge.jpg ' )-> fit ( 600 , 600 );
$ image -> show ();
} catch ( Exception $ e ) {
echo $ e -> getMessage ();
} $image->get()
รับทรัพยากรรูปภาพเพื่อใช้คำสั่ง raw gd
$image->set(instance $resourse)
ตั้งค่าทรัพยากรรูปภาพหลังจากใช้คำสั่ง raw gd
$image->make(mixed $data)
สร้างอินสแตนซ์รูปภาพใหม่จากไฟล์หรือข้อมูลไบนารี
$image->insert(mixed $data, array $options = array())
วางแหล่งที่มาของรูปภาพที่กำหนดไว้เหนือรูปภาพปัจจุบันด้วยตำแหน่งที่ไม่บังคับ พารามิเตอร์แรกอาจเป็นข้อมูลไบนารีหรือเส้นทางไปยังไฟล์หรืออินสแตนซ์ของคลาสอื่น ตัวเลือกคืออาร์เรย์ของพิกัดออฟเซ็ตสัมพันธ์ x/y จากมุมซ้ายบนและความทึบตั้งแต่ 0 ถึง 100 โดยที่ 0 คือไม่มีความโปร่งใส โดยค่าเริ่มต้น รูปภาพจะอยู่ตรงกลาง
$image->canvas(int $width, int $height, array $options = array())
เริ่มต้นผ้าใบตามความกว้างและความสูง ตัวเลือกสีพื้นหลังอยู่ในชุดการตั้งค่าสี/ความทึบ โดยค่าเริ่มต้น ผ้าใบสีดำไม่มีความทึบ
$image->show(string $format = null, int $quality = 90)
ส่งการตอบสนอง HTTP ด้วยรูปภาพปัจจุบันในรูปแบบและคุณภาพที่กำหนด รูปแบบเป็นนามสกุลไฟล์รูปภาพ ตามค่าเริ่มต้น ข้อมูลการตอบสนองจะถูกเข้ารหัสตามประเภทของรูปภาพปัจจุบัน หากยังไม่มีการกำหนดประเภทรูปภาพ วิธีการจะส่งคืนข้อมูลที่เข้ารหัส JPEG คุณภาพจะถูกทำให้เป็นมาตรฐานสำหรับไฟล์ทุกประเภท โดยมีตั้งแต่ 0 (คุณภาพต่ำ ไฟล์ขนาดเล็ก) ถึง 100 (คุณภาพดีที่สุด ไฟล์ขนาดใหญ่) ค่าเริ่มต้นคือ 90 รูปแบบ PNG จะไม่สูญเสียคุณภาพและคุณภาพจะมีผลกับขนาดภาพและความเร็วการบีบอัดเท่านั้น
$image->save(string $path, int $quality = 90, string $format = null)
บันทึกสถานะปัจจุบันของวัตถุรูปภาพในระบบไฟล์ กำหนดทางเลือกให้กับเส้นทางที่ควรบันทึกรูปภาพ ประเภทรูปภาพจะถูกกำหนดโดยนามสกุลไฟล์ หากไม่มีส่วนขยาย ข้อมูลตอบกลับจะถูกเข้ารหัสตามประเภทของรูปภาพปัจจุบัน หากยังไม่มีการกำหนดประเภทรูปภาพ วิธีการจะส่งคืนข้อมูลที่เข้ารหัส JPEG คุณสามารถเลือกแทนที่สิ่งนี้ด้วยพารามิเตอร์รูปแบบได้ คุณภาพจะถูกทำให้เป็นมาตรฐานสำหรับไฟล์ทุกประเภท โดยมีตั้งแต่ 0 (คุณภาพต่ำ ไฟล์ขนาดเล็ก) ถึง 100 (คุณภาพดีที่สุด ไฟล์ขนาดใหญ่) ค่าเริ่มต้นคือ 90 รูปแบบ PNG จะไม่สูญเสียคุณภาพและคุณภาพจะมีผลกับขนาดภาพและความเร็วการบีบอัดเท่านั้น
$image->destroy()
เพิ่มหน่วยความจำที่เกี่ยวข้องกับอินสแตนซ์รูปภาพปัจจุบันก่อนที่สคริปต์ PHP จะสิ้นสุด โดยปกติทรัพยากรจะถูกทำลายโดยอัตโนมัติหลังจากสคริปต์เสร็จสิ้น
$image->width()
ส่งกลับความสูงเป็นพิกเซลของรูปภาพปัจจุบัน
$image->height()
ส่งกลับความสูงเป็นพิกเซลของรูปภาพปัจจุบัน
$image->resize(int $width, int $height)
ปรับขนาดภาพปัจจุบันตามความกว้างและความสูงที่กำหนด ไม่สนใจอัตราส่วนภาพ หากต้องการปรับขนาดตามสัดส่วน ให้ใช้วิธี upsize และ downsize
$image->upsize(int $width = null, int $height = null)
ขยายรูปภาพในด้านที่ใหญ่ที่สุด คำนวณโดยอัตราส่วนสำหรับความกว้างหรือความสูงที่เป็นโมฆะ
$image->downsize(int $width = null, int $height = null)
ลดขนาดรูปภาพในด้านที่ใหญ่ที่สุด คำนวณโดยอัตราส่วนสำหรับความกว้างหรือความสูงที่เป็นโมฆะ
$image->crop(int $width, int $height, array $options = array())
ตัดส่วนสี่เหลี่ยมของรูปภาพปัจจุบันออกตามความกว้างและความสูงที่กำหนด กำหนดพิกัด x,y ที่เป็นตัวเลือกเพื่อย้ายมุมซ้ายบนของจุดตัดไปยังตำแหน่งที่ต้องการ
$image->fit(int $width, int $height, string $position = 'center')
รวมการครอบตัดและการปรับขนาดเพื่อจัดรูปแบบรูปภาพอย่างชาญฉลาด วิธีการจะค้นหาอัตราส่วนที่เหมาะสมที่สุดบนรูปภาพปัจจุบันโดยอัตโนมัติ จากนั้นตัดออกและปรับขนาดให้เป็นขนาดที่กำหนด ตำแหน่งที่เป็นไปได้ top-left , top , top-right , bottom-left , bottom , bottom-right , right , left และ center ตามค่าเริ่มต้น
$image->line(int $x1, int $y1, int $x2, int $y2, array $options = array())
ลากเส้นจาก x,y จุดที่ 1 ถึง x,y จุดที่ 2 บนรูปภาพปัจจุบัน ใช้พารามิเตอร์ตัวเลือกเพื่อตั้งค่าสี ความทึบ และความกว้าง
$image->rectangle(int $x, int $y, int $width, int $height, array $options = array())
วาดรูปสี่เหลี่ยมสีบนรูปภาพปัจจุบัน ใช้พารามิเตอร์ตัวเลือกเพื่อตั้งค่าสี ความทึบ ความหนา และโครงร่าง
$image->ellipse(int $x, int $y, int $width, int $height, array $options = array())
วาดวงรี ใช้พารามิเตอร์ตัวเลือกเพื่อตั้งค่าสี ความทึบ และโครงร่าง
$image->brightness(int $level = 0)
เปลี่ยนความสว่างของภาพปัจจุบันตามระดับที่กำหนด ใช้ค่าระหว่าง -100 สำหรับความสว่างขั้นต่ำ 0 หากไม่มีการเปลี่ยนแปลง และ +100 สำหรับความสว่างสูงสุด
$image->contrast(int $level = 0)
เปลี่ยนความคมชัดของภาพปัจจุบันตามระดับที่กำหนด ใช้ค่าระหว่าง -100 สำหรับคอนทราสต์ขั้นต่ำ 0 หากไม่มีการเปลี่ยนแปลง และ +100 สำหรับคอนทราสต์สูงสุด
$image->grayscale()
เปลี่ยนรูปภาพให้เป็นเวอร์ชันโทนสีเทา
$image->blur()
ใช้เอฟเฟกต์ภาพเบลอ
$image->invert()
สลับสีของภาพ
$image->blackout()
วาดรูปสี่เหลี่ยมผืนผ้าทึบแสงสีดำบนภาพ
$image->rotate(int $angle, array $options = array())
หมุนภาพ กำหนดมุมเป็นองศาและสีเสริมของโซนที่ไม่มีหลังคาหลังการหมุน
$image->text(string $text, array $options = array(), array &$boundary = array())
วาดข้อความบนภาพ ตัวเลือกที่เป็นไปได้:
ใช้ขอบเขตเพื่อดูขนาดที่แท้จริงของกล่องข้อความที่วาด ดูตัวอย่างโดยละเอียดด้านล่าง
$ image = new PosterEditor PosterEditor ();
$ image -> make ( ' images/bridge.jpg ' )-> fit ( 1200 , 630 , ' bottom ' )-> blackout ( 50 );
$ logo = new PosterEditor PosterEditor ();
$ logo -> make ( ' images/logo.png ' )-> downsize ( 150 , null );
$ image -> insert ( $ logo , array ( ' x ' => 50 , ' y ' => 50 ))-> show ();
$ image = new PosterEditor PosterEditor ();
$ image -> make ( ' images/bridge.jpg ' )-> fit ( 1200 , 630 );
$ image -> grayscale ()-> brightness (- 40 );
$ image -> text (
' Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat Lorem ipsum dolor sit amet ' , // phpcs:ignore
array (
' x ' => 100 ,
' y ' => 100 ,
' width ' => 1000 ,
' height ' => 400 ,
' horizontal ' => ' center ' ,
' vertical ' => ' center ' ,
' fontpath ' => ' fonts/opensans.ttf ' ,
' fontsize ' => 24 ,
' lineheight ' => 1.75 ,
' color ' => ' #ffffff ' ,
' opacity ' => 0 ,
' debug ' => true ,
)
);
$ image -> show ( ' jpg ' , 70 );
$ image = new PosterEditor PosterEditor ();
$ image -> make ( ' images/bridge.jpg ' )-> fit ( 900 , 600 );
$ image -> blackout ( 70 );
$ image -> text (
' Lorem ipsum dolor d d 4 g sit amet, consectetur adipiscing et, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex eas commodo consequat sdfsdfl ' , // phpcs:ignore
array (
' x ' => 100 ,
' y ' => 100 ,
' width ' => 600 ,
' height ' => 400 ,
' horizontal ' => ' justify ' ,
' vertical ' => ' justify ' ,
' fontpath ' => ' fonts/opensans.ttf ' ,
' fontsize ' => 20 ,
' lineheight ' => 1.5 ,
' color ' => ' #ffffff ' ,
' opacity ' => 0 ,
' debug ' => true ,
)
);
$ image -> show ( ' png ' );
$ image = new PosterEditor PosterEditor ();
$ image -> make ( ' images/bridge.jpg ' )-> crop (
900 , 600 ,
array (
' x ' => ' 0 ' ,
' y ' => ' 100 '
)
);
$ image -> grayscale ()-> brightness (- 40 );
$ image -> text (
' Large title with unknown height. Can be multi-line ' ,
array (
' x ' => 50 ,
' y ' => 100 ,
' width ' => 800 ,
' fontpath ' => ' /fonts/merriweather.ttf ' ,
' fontsize ' => 48 ,
' lineheight ' => 1.5 ,
' color ' => ' #9999ff ' ,
),
$ boundary
);
$ image -> text (
' This text appears right after title using smart boundaries ' ,
array (
' x ' => 50 ,
' y ' => $ boundary [ ' y ' ] + $ boundary [ ' height ' ],
' width ' => 800 ,
' fontpath ' => ' /fonts/opensans.ttf ' ,
' fontsize ' => 20 ,
' lineheight ' => 1.5 ,
' color ' => ' #ff9999 ' ,
),
$ boundary
);
$ image -> show ();
$ image = new PosterEditor PosterEditor ();
$ image -> make ( ' images/bridge.jpg ' )-> fit ( 1000 , 630 , ' bottom ' );
$ image -> contrast ( 5 )-> brightness (- 30 )-> blur ();
$ image -> rectangle (
20 , 20 , 960 , 590 ,
array (
' color ' => ' #ffffff ' ,
' outline ' => true ,
' width ' => 4 ,
)
);
$ image -> ellipse (
200 , 200 , 200 , 200 ,
array (
' color ' => ' #00ff00 ' ,
' opacity ' => 50 ,
)
);
$ image -> ellipse (
800 , 200 , 200 , 200 ,
array (
' color ' => ' #ff0000 ' ,
' opacity ' => 50 ,
)
);
$ image -> rectangle (
480 , 280 , 80 , 140 ,
array (
' color ' => ' #0000ff ' ,
)
);
$ image -> line (
200 , 500 , 800 , 500 ,
array (
' color ' => array ( 255 , 255 , 0 ),
' opacity ' => 10 ,
' width ' => 4 ,
)
);
$ image -> show ( ' png ' );
รหัสโครงการทั้งหมดถูกเก็บไว้ใน Github วิธีที่ดีที่สุดในการช่วยโปรเจ็กต์คือการรายงานจุดบกพร่องหรือเพิ่มฟังก์ชันการทำงานใหม่ๆ คุณยังสามารถเปิดประเด็นที่นี่หรือส่งคำขอดึงข้อมูลใหม่ได้