แพ็คเกจนี้สามารถเพิ่มประสิทธิภาพ PNGs, JPG, WEBPs, AVIFs, SVGs และ GIFs ได้โดยการรันผ่านเครื่องมือเพิ่มประสิทธิภาพภาพต่างๆ นี่คือวิธีการใช้งาน:
ใช้ SpatieImageOptimizerOptimizerChainFactory;$optimizerChain = OptimizerChainFactory::create();$optimizerChain->เพิ่มประสิทธิภาพ($pathToImage);
รูปภาพที่ $pathToImage
จะถูกเขียนทับด้วยเวอร์ชันที่ได้รับการปรับปรุงซึ่งควรมีขนาดเล็กลง แพ็คเกจจะตรวจจับไบนารีการปรับให้เหมาะสมที่ติดตั้งบนระบบของคุณโดยอัตโนมัติและใช้งาน
นี่คือตัวอย่างการแปลงบางส่วนที่ทำโดยแพ็คเกจนี้
รัก Laravel? จากนั้นตรงไปที่การบูรณาการเฉพาะของ Laravel
ใช้เวิร์ดเพรส? จากนั้นลองใช้คำสั่ง WP CLI
ผู้ที่ชื่นชอบ SilverStripe? ไม่ต้องเสียเวลา ไปที่โมดูล SilverStripe
เราลงทุนทรัพยากรจำนวนมากเพื่อสร้างแพ็คเกจโอเพ่นซอร์สที่ดีที่สุดในระดับเดียวกัน คุณสามารถสนับสนุนเราได้โดยการซื้อหนึ่งในผลิตภัณฑ์ที่ต้องชำระเงินของเรา
เราขอขอบคุณอย่างยิ่งที่คุณส่งโปสการ์ดจากบ้านเกิดของคุณถึงเรา โดยระบุว่าคุณใช้แพ็คเกจใดของเรา คุณจะพบที่อยู่ของเราในหน้าติดต่อของเรา เราเผยแพร่โปสการ์ดที่ได้รับทั้งหมดบนวอลล์โปสการ์ดเสมือนของเรา
คุณสามารถติดตั้งแพ็คเกจผ่านทางผู้แต่ง:
ผู้แต่งต้องการ spatie/image-optimizer
แพ็คเกจจะใช้เครื่องมือเพิ่มประสิทธิภาพเหล่านี้หากมีอยู่ในระบบของคุณ:
JpegOptim
ตัวเลือก
PNGquant 2
เอสวีจีโอ 1
กิฟซี่เคิล
cwebp
อาวิเฟนซ์
ต่อไปนี้เป็นวิธีติดตั้งเครื่องมือเพิ่มประสิทธิภาพทั้งหมดบน Ubuntu/Debian:
sudo apt-get ติดตั้ง jpegoptim sudo apt-get ติดตั้ง optipng sudo apt-get ติดตั้ง pngquant sudo npm ติดตั้ง -g svgo sudo apt-get ติดตั้ง gifsicle sudo apt-get ติดตั้ง webp sudo apt-get ติดตั้ง libavif-bin # ขั้นต่ำ 0.9.3
และนี่คือวิธีการติดตั้งไบนารีบน MacOS (โดยใช้ Homebrew):
ชงติดตั้ง jpegoptim ชงการติดตั้ง optipng ชงติดตั้ง pngquant ติดตั้ง npm -g svgo ชงติดตั้ง gifsicle ชงติดตั้ง webp ชงติดตั้ง libavif
และวิธีการติดตั้งไบนารีบน Fedora/RHEL/CentOS:
sudo dnf ติดตั้ง epel-release sudo dnf ติดตั้ง jpegoptim sudo dnf ติดตั้ง optipng sudo dnf ติดตั้ง pngquant sudo npm ติดตั้ง -g svgo sudo dnf ติดตั้ง gifsicle sudo dnf ติดตั้ง libwebp-tools sudo dnf ติดตั้ง libavif-tools
แพ็คเกจจะตัดสินใจโดยอัตโนมัติว่าจะใช้เครื่องมือใดกับรูปภาพใดรูปภาพหนึ่ง
JPG จะถูกทำให้เล็กลงโดยเรียกใช้ผ่าน JpegOptim มีการใช้ตัวเลือกเหล่านี้:
-m85
: สิ่งนี้จะจัดเก็บภาพด้วยคุณภาพ 85% ดูเหมือนว่าการตั้งค่านี้จะเป็นไปตามกฎการบีบอัด Pagespeed ของ Google
--strip-all
: จะตัดข้อมูลข้อความทั้งหมดออก เช่น ความคิดเห็นและข้อมูล EXIF
--all-progressive
: สิ่งนี้จะทำให้แน่ใจว่าภาพที่ได้นั้นเป็นภาพแบบโปรเกรสซีฟ ซึ่งหมายความว่าสามารถดาวน์โหลดได้โดยใช้รายละเอียดที่สูงขึ้นเรื่อยๆ หลายรอบ
PNG จะถูกทำให้เล็กลงโดยการรันผ่านเครื่องมือสองตัว อันแรกคือ Pngquant 2 ซึ่งเป็นคอมเพรสเซอร์ PNG ที่สูญเสียไป เราไม่ได้ตั้งค่าตัวเลือกเพิ่มเติม ระบบจะใช้ค่าเริ่มต้น หลังจากนั้นเราจะเรียกใช้อิมเมจผ่านอันที่สอง: Optipng มีการใช้ตัวเลือกเหล่านี้:
-i0
: สิ่งนี้จะส่งผลให้รูปภาพสแกนแบบโปรเกรสซีฟไม่อินเทอร์เลซ
-o2
: นี่เป็นการตั้งค่าระดับการปรับให้เหมาะสมเป็นสอง (การทดลองบีบอัด IDAT หลายรายการ)
SVG จะถูกย่อขนาดโดย SVGO การกำหนดค่าเริ่มต้นของ SVGO จะถูกนำมาใช้ โดยละเว้น cleanupIDs
และปลั๊กอิน removeViewBox
เนื่องจากเป็นที่ทราบกันว่าสิ่งเหล่านี้ทำให้เกิดปัญหาเมื่อแสดง SVG ที่ปรับให้เหมาะสมหลายรายการในหน้าเดียว
โปรดทราบว่า SVGO สามารถทำลาย svg ของคุณได้ คุณจะพบข้อมูลเพิ่มเติมเกี่ยวกับเรื่องนั้นได้ในบล็อกโพสต์ที่ยอดเยี่ยมนี้โดย Sara Soueidan
GIF จะได้รับการเพิ่มประสิทธิภาพโดย Gifsicle ตัวเลือกเหล่านี้จะถูกใช้:
-O3
: เป็นการตั้งค่าระดับการปรับให้เหมาะสมเป็นค่าสูงสุดของ Gifsicle ซึ่งให้ผลลัพธ์ที่ช้าที่สุดแต่ดีที่สุด
WEBP จะได้รับการเพิ่มประสิทธิภาพโดย Cwebp ตัวเลือกเหล่านี้จะถูกใช้:
-m 6
สำหรับวิธีการบีบอัดที่ช้าที่สุดเพื่อให้ได้การบีบอัดที่ดีที่สุด
-pass 10
เพื่อเพิ่มจำนวนการวิเคราะห์ให้สูงสุด
-mt
multithreading สำหรับการปรับปรุงความเร็วบางอย่าง
-q 90
ปัจจัยด้านคุณภาพที่ทำให้เกิดการเปลี่ยนแปลงที่เห็นได้ชัดเจนน้อยที่สุด
(การตั้งค่าเดิมนำมาจากที่นี่)
AVIF จะได้รับการปรับให้เหมาะสมโดย avifenc ตัวเลือกเหล่านี้จะถูกใช้:
-a cq-level=23
: ระดับคุณภาพคงที่ ค่าที่ต่ำกว่าหมายถึงคุณภาพที่ดีขึ้นและขนาดไฟล์ที่ใหญ่ขึ้น (0-63)
-j all
: จำนวนงาน (เธรดผู้ปฏิบัติงาน all
ใช้คอร์ที่มีอยู่ทั้งหมด)
--min 0
: ควอไลเซอร์ขั้นต่ำสำหรับสี (0-63)
--max 63
: ควอไลเซอร์สูงสุดสำหรับสี (0-63)
--minalpha 0
: ควอไลเซอร์ขั้นต่ำสำหรับอัลฟ่า (0-63)
--maxalpha 63
: ควอไลเซอร์สูงสุดสำหรับอัลฟ่า (0-63)
-a end-usage=q
โหมดควบคุมอัตราที่ตั้งค่าเป็นโหมดคุณภาพคงที่
-a tune=ssim
: SSIM เพื่อปรับแต่งตัวเข้ารหัสสำหรับการวัดความผิดเพี้ยน
(การตั้งค่าดั้งเดิมนำมาจากที่นี่และที่นี่)
นี่เป็นวิธีเริ่มต้นในการใช้แพ็คเกจ:
ใช้ SpatieImageOptimizerOptimizerChainFactory;$optimizerChain = OptimizerChainFactory::create();$optimizerChain->เพิ่มประสิทธิภาพ($pathToImage);
รูปภาพที่ $pathToImage
จะถูกเขียนทับด้วยเวอร์ชันที่ได้รับการปรับปรุงซึ่งควรมีขนาดเล็กลง
แพ็คเกจจะตรวจจับไบนารีการปรับให้เหมาะสมที่ติดตั้งบนระบบของคุณโดยอัตโนมัติและใช้งาน
หากต้องการเก็บภาพต้นฉบับไว้ คุณสามารถส่งผ่านอาร์กิวเมนต์ที่สอง optimize
:
ใช้ SpatieImageOptimizerOptimizerChainFactory;$optimizerChain = OptimizerChainFactory::create();$optimizerChain->เพิ่มประสิทธิภาพ($pathToImage, $pathToOutput);
ในตัวอย่างนี้ แพ็คเกจจะไม่แตะ $pathToImage
และเขียนเวอร์ชันที่ปรับให้เหมาะสมไปที่ $pathToOutput
คุณสามารถตั้งค่าเวลาสูงสุดเป็นวินาทีที่เครื่องมือเพิ่มประสิทธิภาพแต่ละตัวในห่วงโซ่สามารถใช้ได้โดยการเรียก setTimeout
:
$optimizerChain->setTimeout(10) ->เพิ่มประสิทธิภาพ($pathToImage);
ในตัวอย่างนี้ เครื่องมือเพิ่มประสิทธิภาพแต่ละตัวในห่วงโซ่จะได้รับเวลาสูงสุด 10 วินาทีในการทำงาน
หากคุณต้องการปรับแต่งสายโซ่ของเครื่องมือเพิ่มประสิทธิภาพ คุณสามารถทำได้โดยการเพิ่ม Optimizer
ด้วยตนเองใน OptimizerChain
นี่คือตัวอย่างที่เราต้องการให้ใช้ optipng
และ jpegoptim
เท่านั้น:
ใช้ SpatieImageOptimizerOptimizerChain; ใช้ SpatieImageOptimizerOptimizersJpegoptim; ใช้ SpatieImageOptimizerOptimizersPngquant;$optimizerChain = (OptimizerChain ใหม่) ->addOptimizer(Jpegoptim ใหม่([ '--strip-all', '--all-progressive', - ->addOptimizer(Pngquant ใหม่([ '--force', -
โปรดสังเกตว่าคุณสามารถส่งตัวเลือกที่ Optimizer
ควรใช้ให้กับ Constructor ได้
ต้องการใช้ยูทิลิตีบรรทัดคำสั่งอื่นเพื่อปรับแต่งภาพของคุณหรือไม่? ไม่มีปัญหา. เพียงแค่เขียนเครื่องมือเพิ่มประสิทธิภาพของคุณเอง เครื่องมือเพิ่มประสิทธิภาพคือคลาสใดๆ ที่ใช้อินเทอร์เฟซ SpatieImageOptimizerOptimizersOptimizer
:
เนมสเปซ SpatieImageOptimizerOptimizers; ใช้ SpatieImageOptimizerImage; เครื่องมือเพิ่มประสิทธิภาพอินเทอร์เฟซ {/** * ส่งกลับชื่อของไบนารี่ที่จะดำเนินการ * * @return string */public function binaryName(): string;/** * กำหนดว่าเครื่องมือเพิ่มประสิทธิภาพสามารถจัดการรูปภาพที่กำหนดได้หรือไม่ * * @param SpatieImageOptimizerImage $image * * @return bool */public function canHandle(Image $image): bool;/** * กำหนดพาธไปยังรูปภาพที่ควรปรับให้เหมาะสม * * @param string $imagePath * * @return $this */public function setImagePath(string $imagePath);/** * ตั้งค่าตัวเลือกที่เครื่องมือเพิ่มประสิทธิภาพควรใช้ * * @param array $options * * @return $this */public function setOptions(array $options = []);/** * รับคำสั่งที่ควรดำเนินการ * * @return string */ฟังก์ชั่นสาธารณะ getCommand(): string; -
หากคุณต้องการดูตัวอย่างการใช้งาน โปรดดูที่เครื่องมือเพิ่มประสิทธิภาพที่มีอยู่ซึ่งมาพร้อมกับแพ็คเกจนี้
คุณสามารถเพิ่มเครื่องมือเพิ่มประสิทธิภาพของคุณได้อย่างง่ายดายโดยใช้วิธี addOptimizer
บน OptimizerChain
ใช้ SpatieImageOptimizerImageOptimizerFactory;$optimizerChain = OptimizerChainFactory::create();$optimizerChain ->เพิ่มเครื่องมือเพิ่มประสิทธิภาพ(YourCustomOptimizer()) ใหม่ ->เพิ่มประสิทธิภาพ($pathToImage);
ตามค่าเริ่มต้น แพ็คเกจจะไม่เกิดข้อผิดพลาดใดๆ และทำงานโดยไม่มีการแจ้งเตือน หากต้องการตรวจสอบว่าแพ็คเกจกำลังทำอะไรอยู่ คุณสามารถตั้งค่าตัวบันทึกได้:
ใช้ SpatieImageOptimizerOptimizerChainFactory;$optimizerChain = OptimizerChainFactory::create();$optimizerChain ->useLogger(MyLogger() ใหม่) ->เพิ่มประสิทธิภาพ($pathToImage);
คนตัดไม้เป็นคลาสที่ใช้ PsrLogLoggerInterface
ไลบรารีการบันทึกที่ดีซึ่งเป็นไปตามข้อกำหนดอย่างสมบูรณ์คือ Monolog แพ็คเกจจะเขียนบันทึกว่า Optimizers
ใดที่ใช้ คำสั่งใดที่ดำเนินการและเอาต์พุต
นี่คือตัวอย่างการแปลงในชีวิตจริงที่ทำโดยแพ็คเกจนี้
วิธีการสำหรับรูปภาพ JPG, WEBP, AVIF: รูปภาพต้นฉบับถูกป้อนไปที่ Spatie/รูปภาพ (โดยใช้ไดรเวอร์ GD เริ่มต้น) และปรับขนาดเป็นความกว้าง 2048px:
SpatieImageImage::load('Original.jpg') ->ความกว้าง(2048) ->บันทึก('image.jpg'); // image.png, image.webp, image.avif
ต้นฉบับ
771 KB
ปรับให้เหมาะสม
511 KB (-33.7%, DSSIM: 0.00052061)
เครดิต: Jeff Sheldon ผ่าน Unsplash
ต้นฉบับ
461 KB
ปรับให้เหมาะสม
184 KB (-60.0%, DSSIM: 0.00166036)
เครดิต: Jeff Sheldon ผ่าน Unsplash
ต้นฉบับ
725 กิโลไบต์
ปรับให้เหมาะสม
194 กิโลไบต์ (-73.2%, DSSIM: 0.00163751)
เครดิต: Jeff Sheldon ผ่าน Unsplash
ต้นฉบับ: Photoshop 'บันทึกสำหรับเว็บ' | PNG-24 ด้วยความโปร่งใส
39 กิโลไบต์
ปรับให้เหมาะสม
16 KB (-59%, DSSIM: 0.00000251)
ต้นฉบับ: ผู้วาดภาพประกอบ | การส่งออก SVG ที่ปรับให้เหมาะสมกับเว็บ
25 กิโลไบต์
ปรับให้เหมาะสม
20 กิโลไบต์ (-21.5%)
โปรดดู CHANGELOG สำหรับข้อมูลเพิ่มเติมว่ามีอะไรเปลี่ยนแปลงเมื่อเร็วๆ นี้
การทดสอบผู้แต่ง
โปรดดูการมีส่วนร่วมเพื่อดูรายละเอียด
หากคุณพบข้อบกพร่องเกี่ยวกับการรักษาความปลอดภัย โปรดส่งอีเมลมาที่ [email protected] แทนการใช้ตัวติดตามปัญหา
คุณใช้แพ็คเกจนี้ได้ฟรี (ได้รับใบอนุญาตจาก MIT) แต่ถ้าทำให้เหมาะกับสภาพแวดล้อมการใช้งานจริงของคุณ เราขอขอบคุณอย่างยิ่งที่คุณส่งโปสการ์ดจากบ้านเกิดของคุณมาให้เรา โดยระบุแพ็คเกจที่คุณใช้อยู่
ที่อยู่ของเราคือ: Spatie, Kruikstraat 22, 2018 แอนต์เวิร์ป, เบลเยียม
เราเผยแพร่ไปรษณียบัตรที่ได้รับทั้งหมดบนเว็บไซต์ของบริษัทของเรา
ฟรีค ฟาน เดอร์ แฮร์เทน
ผู้ร่วมให้ข้อมูลทั้งหมด
แพ็คเกจนี้ได้รับแรงบันดาลใจจาก psliwa/image-optimizer
การสนับสนุนทางอารมณ์โดย Joke Forment
ใบอนุญาตเอ็มไอที (MIT) โปรดดูไฟล์ใบอนุญาตสำหรับข้อมูลเพิ่มเติม