ไลบรารี PHP เพื่อปรับขนาด ปรับขนาด และครอบตัดรูปภาพ
หากคุณไม่ต้องการครอบตัด ปรับขนาด และจัดเก็บรูปภาพบนเซิร์ฟเวอร์ของคุณ Gumlet.com เป็นบริการ ฟรี ที่สามารถประมวลผลรูปภาพแบบเรียลไทม์และให้บริการทั่วโลกผ่าน CDN
แพ็คเกจนี้พร้อมใช้งานผ่าน Packagist โดยมีผู้จำหน่ายและตัวระบุแพ็คเกจเหมือนกับ repo นี้
หากใช้ Composer ให้เพิ่ม: ในไฟล์ composer.json
{
"require" : {
"gumlet/php-image-resize" : " 2.0.* "
}
}
หากคุณยังคงใช้ PHP 5.3 โปรดติดตั้งเวอร์ชัน 1.7.0
และหากคุณใช้ PHP 5.4 โปรดติดตั้งเวอร์ชัน 1.8.0
ของไลบรารีนี้
เพิ่มการรองรับ WebP ด้วย PHP 5.6.0
และไลบรารี่เวอร์ชันปัจจุบันรองรับสิ่งนั้น หากคุณกำลังประสบปัญหา โปรดใช้ไลบรารี่เวอร์ชัน 1.9.2
นี้
สำหรับเวอร์ชัน PHP >= 7.2 ควรใช้ไลบรารีเวอร์ชัน 2.0.1
หรือสูงกว่า
มิฉะนั้น:
include ' /path/to/ImageResize.php ' ;
เนื่องจากคลาสนี้ใช้เนมสเปซ เมื่อสร้างอินสแตนซ์อ็อบเจ็กต์ คุณจำเป็นต้องใช้เนมสเปซแบบเต็ม:
$ image = new Gumlet ImageResize ();
หรือนามแฝงว่า:
use Gumlet ImageResize ;
$ image = new ImageResize ();
หมายเหตุ: ไลบรารีนี้ใช้คลาส GD ซึ่งไม่รองรับการปรับขนาดไฟล์ GIF แบบเคลื่อนไหว
หากต้องการปรับขนาดรูปภาพ ในกรณีนี้ให้มีขนาดเพียงครึ่งหนึ่ง (การปรับขนาดเป็นเปอร์เซ็นต์):
$ image = new ImageResize ( ' image.jpg ' );
$ image -> scale ( 50 );
$ image -> save ( ' image2.jpg ' );
หากต้องการปรับขนาดรูปภาพตามมิติเดียว (คงอัตราส่วนไว้):
$ image = new ImageResize ( ' image.jpg ' );
$ image -> resizeToHeight ( 500 );
$ image -> save ( ' image2.jpg ' );
$ image = new ImageResize ( ' image.jpg ' );
$ image -> resizeToWidth ( 300 );
$ image -> save ( ' image2.jpg ' );
หากต้องการปรับขนาดรูปภาพตามการวัดที่กำหนดโดยไม่คำนึงถึงการวางแนว (คงอัตราส่วนไว้):
$ image = new ImageResize ( ' image.jpg ' );
$ image -> resizeToLongSide ( 500 );
$ image -> save ( ' image2.jpg ' );
$ image = new ImageResize ( ' image.jpg ' );
$ image -> resizeToShortSide ( 300 );
$ image -> save ( ' image2.jpg ' );
หากต้องการปรับขนาดรูปภาพให้พอดีกับชุดขนาดที่กำหนด (รักษาอัตราส่วน aspet):
$ image = new ImageResize ( ' image.jpg ' );
$ image -> resizeToBestFit ( 500 , 300 );
$ image -> save ( ' image2.jpg ' );
ฟังก์ชันการปรับขนาดทั้งหมดมีตัวเลือก $allow_enlarge
ซึ่งตั้งค่าเป็นเท็จตามค่าเริ่มต้น คุณสามารถเปิดใช้งานได้โดยส่งค่า true
ไปยังฟังก์ชันปรับขนาดใดๆ:
$ image = new ImageResize ( ' image.jpg ' );
$ image -> resize ( 500 , 300 , $ allow_enlarge = True );
$ image -> save ( ' image2.jpg ' );
หากคุณยินดีจะจัดการอัตราส่วนภาพด้วยตัวเอง คุณสามารถปรับขนาดได้โดยตรง:
$ image = new ImageResize ( ' image.jpg ' );
$ image -> resize ( 800 , 600 );
$ image -> save ( ' image2.jpg ' );
ซึ่งจะทำให้รูปภาพของคุณเอียงหากคุณไม่ได้ใช้อัตราส่วนความกว้าง/ความสูงเดียวกันกับรูปภาพต้นฉบับ
หากต้องการครอบตัดรูปภาพ:
$ image = new ImageResize ( ' image.jpg ' );
$ image -> crop ( 200 , 200 );
$ image -> save ( ' image2.jpg ' );
วิธีนี้จะปรับขนาดรูปภาพให้ใกล้เคียงกับขนาดที่ผ่านไปมากที่สุด จากนั้นจึงครอบตัดและจัดกึ่งกลางส่วนที่เหลือ
ในกรณีของตัวอย่างข้างต้น รูปภาพขนาด 400px × 600px จะถูกปรับขนาดลงเป็น 200px × 300px จากนั้น 50px จะถูกลบออกจากด้านบนและด้านล่าง เหลือให้คุณเหลือ 200px × 200px
โหมดครอบตัด:
มีตัวเลือกโหมดครอบตัดไม่กี่แบบเพื่อให้คุณเลือกวิธีที่คุณต้องการจัดการกับความกว้างหรือความสูงที่เกินในที่สุดหลังจากปรับขนาดรูปภาพลง โหมดครอบตัดเริ่มต้นที่ใช้คือ CROPCENTER
ด้วยเหตุนี้โค้ดเหล่านั้นจึงเทียบเท่ากัน:
$ image = new ImageResize ( ' image.jpg ' );
$ image -> crop ( 200 , 200 );
$ image -> save ( ' image2.jpg ' );
$ image = new ImageResize ( ' image.jpg ' );
$ image -> crop ( 200 , 200 , true , ImageResize:: CROPCENTER );
$ image -> save ( ' image2.jpg ' );
ในกรณีที่คุณมีรูปภาพขนาด 400px × 600px และคุณต้องการครอบตัดเป็น 200px × 200px รูปภาพจะถูกปรับขนาดลงเป็น 200px × 300px จากนั้นคุณสามารถระบุวิธีที่คุณต้องการจัดการกับ 100px เหล่านั้นที่เกินค่าที่ผ่านค่าของการครอบตัด โหมดที่คุณต้องการใช้
ตัวอย่างเช่น การส่งผ่านโหมดครอบตัด CROPTOP
จะส่งผลให้ 100px ถูกนำออกจากด้านล่าง เหลือ 200px × 200px
$ image = new ImageResize ( ' image.jpg ' );
$ image -> crop ( 200 , 200 , true , ImageResize:: CROPTOP );
$ image -> save ( ' image2.jpg ' );
ในทางตรงกันข้าม การผ่านโหมดครอบตัด CROPBOTTOM
จะส่งผลให้ 100px ถูกนำออกจากด้านบน ทำให้คุณเหลือ 200px × 200px
$ image = new ImageResize ( ' image.jpg ' );
$ image -> crop ( 200 , 200 , true , ImageResize:: CROPBOTTOM );
$ image -> save ( ' image2.jpg ' );
ฟรีครอป:
นอกจากนี้ยังมีวิธีกำหนดตำแหน่งการครอบตัดแบบกำหนดเอง คุณสามารถกำหนด $x และ $y ในวิธี freecrop
:
$ image = new ImageResize ( ' image.jpg ' );
$ image -> freecrop ( 200 , 200 , $ x = 20 , $ y = 20 );
$ image -> save ( ' image2.jpg ' );
วิธีโหลดรูปภาพจากสตริง:
$ image = ImageResize:: createFromString ( base64_decode ( ' R0lGODlhAQABAIAAAAQCBP///yH5BAEAAAEALAAAAAABAAEAAAICRAEAOw== ' ));
$ image -> scale ( 50 );
$ image -> save ( ' image.jpg ' );
คุณยังสามารถส่งคืนผลลัพธ์เป็นสตริงได้:
$ image = ImageResize:: createFromString ( base64_decode ( ' R0lGODlhAQABAIAAAAQCBP///yH5BAEAAAEALAAAAAABAAEAAAICRAEAOw== ' ));
$ image -> scale ( 50 );
echo $ image -> getImageAsString ();
รองรับ Magic __toString()
ด้วย:
$ image = ImageResize:: createFromString ( base64_decode ( ' R0lGODlhAQABAIAAAAQCBP///yH5BAEAAAEALAAAAAABAAEAAAICRAEAOw== ' ));
$ image -> resize ( 10 , 10 );
echo ( string ) $ image ;
ดังที่เห็นข้างต้น คุณสามารถเรียก $image->save('image.jpg');
หากต้องการเรนเดอร์รูปภาพโดยตรงในเบราว์เซอร์ คุณสามารถเรียก $image->output()
;
เมื่อบันทึกลงดิสก์หรือส่งออกไปยังเบราว์เซอร์ สคริปต์จะถือว่าเอาต์พุตประเภทเดียวกันกับอินพุต
หากคุณต้องการบันทึก/ส่งออกเป็นรูปภาพประเภทอื่น คุณจะต้องส่งค่าคงที่ PHP IMAGETYPE_
* (รองรับ):
IMAGETYPE_GIF
IMAGETYPE_JPEG
IMAGETYPE_PNG
ซึ่งจะทำให้คุณสามารถบันทึกแหล่งที่มาเป็นประเภทอื่นได้:
$ image = new ImageResize ( ' image.jpg ' );
$ image -> resize ( 800 , 600 );
$ image -> save ( ' image.png ' , IMAGETYPE_PNG );
คุณสมบัติ $quality_jpg
, $quality_webp
และ $quality_png
พร้อมให้คุณกำหนดค่า:
$ image = new ImageResize ( ' image.jpg ' );
$ image -> quality_jpg = 100 ;
$ image -> resize ( 800 , 600 );
$ image -> save ( ' image2.jpg ' );
โดยค่าเริ่มต้นจะถูกตั้งค่าเป็น 85 และ 6 ตามลำดับ ดูรายการคู่มือสำหรับ imagejpeg()
และ imagepng()
สำหรับข้อมูลเพิ่มเติม
คุณยังสามารถส่งผ่านคุณภาพโดยตรงไปยังเมธอด save()
, output()
และ getImageAsString()
ได้:
$ image = new ImageResize ( ' image.jpg ' );
$ image -> crop ( 200 , 200 );
$ image -> save ( ' image2.jpg ' , null , 100 );
$ image = new ImageResize ( ' image.jpg ' );
$ image -> resizeToWidth ( 300 );
$ image -> output ( IMAGETYPE_PNG , 4 );
$ image = new ImageResize ( ' image.jpg ' );
$ image -> scale ( 50 );
$ result = $ image -> getImageAsString ( IMAGETYPE_PNG , 4 );
เรากำลังส่ง null
สำหรับประเภทรูปภาพในตัวอย่างด้านบนเพื่อข้ามไปและระบุคุณภาพ ในกรณีนี้ ระบบจะถือว่าประเภทรูปภาพเหมือนกับอินพุต
ตามค่าเริ่มต้น การอินเทอร์เลซรูปภาพจะเปิดอยู่ สามารถปิดการใช้งานได้โดยตั้งค่า $interlace
เป็น 0
:
$ image = new ImageResize ( ' image.jpg ' );
$ image -> scale ( 50 );
$ image -> interlace = 0 ;
$ image -> save ( ' image2.jpg ' );
เมื่อดำเนินการ ภาพต้นฉบับจะยังคงอยู่ เพื่อให้คุณสามารถเชื่อมโยงการดำเนินการได้โดยไม่ทำลายมากเกินไป
สิ่งนี้มีประโยชน์สำหรับการสร้างหลายขนาด:
$ image = new ImageResize ( ' image.jpg ' );
$ image
-> scale ( 50 )
-> save ( ' image2.jpg ' )
-> resizeToWidth ( 300 )
-> save ( ' image3.jpg ' )
-> crop ( 100 , 100 )
-> save ( ' image4.jpg ' )
;
ImageResize พ่น ImageResizeException สำหรับข้อผิดพลาดของตัวเอง คุณสามารถจับสิ่งนั้นหรือจับ Exception ทั่วไปที่มันขยายออกไป
เป็นสิ่งที่ไม่ควรคาดหวัง แต่หากมีสิ่งใดผิดพลาดอย่างร้ายแรงในระหว่างทาง ให้สังเกตหรือเตือนข้อผิดพลาดอาจแสดงได้จาก PHP GD และฟังก์ชันรูปภาพ (http://php.net/manual/en/ref.image.php)
try {
$ image = new ImageResize ( null );
echo " This line will not be printed " ;
} catch ( ImageResizeException $ e ) {
echo " Something went wrong " . $ e -> getMessage ();
}
คุณสามารถใช้เอฟเฟกต์พิเศษกับรูปภาพใหม่ เช่น เบลอหรือเพิ่มแบนเนอร์
$ image = new ImageResize ( ' image.jpg ' );
// Add blure
$ image -> addFilter ( function ( $ imageDesc ) {
imagefilter ( $ imageDesc , IMG_FILTER_GAUSSIAN_BLUR );
});
// Add banner on bottom left corner
$ image18Plus = ' banner.png '
$ image -> addFilter ( function ( $ imageDesc ) use ( $ image18Plus ) {
$ logo = imagecreatefrompng ( $ image18Plus );
$ logo_width = imagesx ( $ logo );
$ logo_height = imagesy ( $ logo );
$ image_width = imagesx ( $ imageDesc );
$ image_height = imagesy ( $ imageDesc );
$ image_x = $ image_width - $ logo_width - 10 ;
$ image_y = $ image_height - $ logo_height - 10 ;
imagecopy ( $ imageDesc , $ logo , $ image_x , $ image_y , 0 , 0 , $ logo_width , $ logo_height );
});
พลิกรูปภาพโดยใช้โหมดที่กำหนดและวิธีนี้ใช้ได้กับ PHP เวอร์ชัน 5.4 เท่านั้น
$ flip = new ImageResize ( ' image.png ' );
$ image = imagecreatetruecolor ( 200 , 100 );
$ image -> addFilter ( function ( $ image ) {
imageflip ( $ image , IMG_FLIP_HORIZONTAL );
});
ฟังก์ชันทั้งสองจะถูกใช้ตามลำดับที่เพิ่มเข้าไป
คุณสามารถเปิดใช้งานการแก้ไขสีแกมม่าซึ่งปิดใช้งานตามค่าเริ่มต้นได้
$ image = new ImageResize ( ' image.png ' );
$ image -> gamma ( true );
https://gumlet.github.io/php-image-resize/index.html
ห้องสมุดนี้ดูแลโดย Gumlet.com