يمكن لهذه الحزمة تحسين ملفات PNG وJPG وWEBPs وAVIFs وSVGs وGIFs عن طريق تشغيلها من خلال سلسلة من أدوات تحسين الصور المتنوعة. وإليك كيف يمكنك استخدامه:
use SpatieImageOptimizerOptimizerChainFactory;$optimizerChain = OptimizerChainFactory::create();$optimizerChain->optimize($pathToImage);
سيتم استبدال الصورة الموجودة في $pathToImage
بإصدار محسّن يجب أن يكون أصغر حجمًا. ستكتشف الحزمة تلقائيًا ثنائيات التحسين المثبتة على نظامك وتستخدمها.
فيما يلي بعض أمثلة التحويلات التي تم إجراؤها بواسطة هذه الحزمة.
محبة لارافيل؟ ثم انتقل إلى التكامل المحدد في Laravel.
باستخدام وورد؟ ثم جرب الأمر WP CLI.
متحمس SilverStripe؟ لا تضيع الوقت، انتقل إلى وحدة SilverStripe.
نحن نستثمر الكثير من الموارد في إنشاء أفضل الحزم مفتوحة المصدر في فئتها. يمكنك دعمنا عن طريق شراء أحد منتجاتنا المدفوعة.
نحن نقدر بشدة إرسالك لنا بطاقة بريدية من مسقط رأسك، مع ذكر الحزمة (الحزم) التي تستخدمها. ستجد عنواننا على صفحة الاتصال لدينا. ننشر جميع البطاقات البريدية المستلمة على جدار البطاقات البريدية الافتراضية لدينا.
يمكنك تثبيت الحزمة عبر الملحن:
الملحن يتطلب Spatie/محسن الصورة
ستستخدم الحزمة أدوات التحسين هذه إذا كانت موجودة على نظامك:
jpegOptim
اختيار
الكمية 2
إس في جي أو 1
جيفسيكل
com.cwebp
com.avifenc
إليك كيفية تثبيت جميع أدوات التحسين على Ubuntu/Debian:
sudo apt-get install jpegoptim sudo apt-get install optipng sudo apt-get install pngquant Sudo npm install -g svgo sudo apt-get install gifsicle sudo apt-get install webp sudo apt-get install libavif-bin # الحد الأدنى 0.9.3
وإليك كيفية تثبيت الثنائيات على MacOS (باستخدام Homebrew):
الشراب تثبيت jpegoptim اختيار تثبيت الشراب الشراب تثبيت pngquant تثبيت npm -g svgo الشراب تثبيت gifsicle الشراب تثبيت webp قم بتثبيت libavif
وإليك كيفية تثبيت الثنائيات على Fedora/RHEL/CentOS:
Sudo dnf تثبيت epel-release سودو dnf تثبيت jpegoptim Sudo dnf تثبيت optipng سودو dnf تثبيت pngquant Sudo npm install -g svgo سودو dnf تثبيت gifsicle Sudo dnf قم بتثبيت أدوات libwebp Sudo dnf تثبيت أدوات libavif
ستقرر الحزمة تلقائيًا الأدوات التي سيتم استخدامها على صورة معينة.
سيتم تصغير حجم ملفات 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 الخاص بك. ستجد المزيد من المعلومات حول ذلك في هذه المدونة الرائعة التي كتبتها سارة سويدان.
سيتم تحسين صور GIF بواسطة Gifsicle. سيتم استخدام هذه الخيارات:
-O3
: يؤدي هذا إلى ضبط مستوى التحسين على الحد الأقصى لـ Gifsicle، والذي ينتج النتائج الأبطأ ولكن الأفضل
سيتم تحسين WEBPs بواسطة 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 يقوم بضبط جهاز التشفير لقياس التشويه.
(الإعدادات أصلية مأخوذة من هنا وهنا)
هذه هي الطريقة الافتراضية لاستخدام الحزمة:
use SpatieImageOptimizerOptimizerChainFactory;$optimizerChain = OptimizerChainFactory::create();$optimizerChain->optimize($pathToImage);
سيتم استبدال الصورة الموجودة في $pathToImage
بإصدار محسّن يجب أن يكون أصغر حجمًا.
ستكتشف الحزمة تلقائيًا ثنائيات التحسين المثبتة على نظامك وتستخدمها.
للحفاظ على الصورة الأصلية، يمكنك المرور عبر وسيطة ثانية optimize
:
use SpatieImageOptimizerOptimizerChainFactory;$optimizerChain = OptimizerChainFactory::create();$optimizerChain->optimize($pathToImage, $pathToOutput);
في هذا المثال، لن تلمس الحزمة $pathToImage
وتكتب نسخة محسنة إلى $pathToOutput
.
يمكنك ضبط الحد الأقصى للوقت بالثواني الذي يمكن لكل مُحسِّن فردي في السلسلة استخدامه عن طريق استدعاء setTimeout
:
$optimizerChain->setTimeout(10) ->تحسين($pathToImage);
في هذا المثال، سيحصل كل مُحسِّن في السلسلة على 10 ثوانٍ كحد أقصى للقيام بمهمته.
إذا كنت تريد تخصيص سلسلة أدوات التحسين، فيمكنك القيام بذلك عن طريق إضافة Optimizer
s يدويًا إلى OptimizerChain
.
فيما يلي مثال حيث نريد استخدام optipng
و jpegoptim
فقط:
استخدم SpatieImageOptimizerOptimizerChain;استخدم SpatieImageOptimizerOptimizersJpegoptim;استخدم SpatieImageOptimizerOptimizersPngquant;$optimizerChain = (OptimizerChain الجديد) ->addOptimizer(new Jpegoptim([ '--strip-all'، '--all-progressive'، ])) ->addOptimizer(new Pngquant([ '--force'، ]))
لاحظ أنه يمكنك تمرير الخيارات التي يجب أن يستخدمها Optimizer
إلى المُنشئ الخاص به.
هل تريد استخدام أداة مساعدة أخرى لسطر الأوامر لتحسين صورك؟ لا مشكلة. فقط اكتب المحسن الخاص بك. المُحسِّن هو أي فئة تقوم بتنفيذ واجهة SpatieImageOptimizerOptimizersOptimizer
:
مساحة الاسم SpatieImageOptimizerOptimizers;use SpatieImageOptimizerImage;interface Optimizer {/** * إرجاع اسم الملف الثنائي المطلوب تنفيذه. * * @return string */public function minorName(): 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 ->addOptimizer(YourCustomOptimizer() الجديد) ->تحسين($pathToImage);
بشكل افتراضي، لن ترمي الحزمة أي أخطاء وستعمل فقط بصمت. للتحقق مما تفعله الحزمة، يمكنك تعيين مسجل:
استخدم SpatieImageOptimizerOptimizerChainFactory;$optimizerChain = OptimizerChainFactory::create();$optimizerChain ->useLogger(new MyLogger()) ->تحسين($pathToImage);
المسجل هو فئة تطبق PsrLogLoggerInterface
. مكتبة التسجيل الجيدة المتوافقة تمامًا هي Monolog. ستكتب الحزمة لتسجيل Optimizers
المستخدمة والأوامر التي يتم تنفيذها ومخرجاتها.
فيما يلي بعض أمثلة التحويلات الواقعية التي تتم بواسطة هذه الحزمة.
منهجية الصور JPG وWEBP وAVIF: تمت تغذية الصورة الأصلية إلى مساحة/صورة (باستخدام برنامج تشغيل GD الافتراضي) وتم تغيير حجمها إلى عرض 2048 بكسل:
SpatieImageImage::load('original.jpg') ->العرض (2048) ->حفظ('image.jpg'); // image.png، image.webp، image.avif
إبداعي
771 كيلو بايت
الأمثل
511 كيلو بايت (-33.7%، DSSIM: 0.00052061)
ائتمانات: جيف شيلدون، عبر Unsplash
إبداعي
461 كيلو بايت
الأمثل
184 كيلو بايت (-60.0%، DSSIM: 0.00166036)
ائتمانات: جيف شيلدون، عبر Unsplash
إبداعي
725 كيلو بايت
الأمثل
194 كيلو بايت (-73.2%، DSSIM: 0.00163751)
ائتمانات: جيف شيلدون، عبر Unsplash
الأصل: Photoshop 'حفظ للويب' | PNG-24 بشفافية
39 كيلو بايت
الأمثل
16 كيلو بايت (-59%، DSSIM: 0.00000251)
الأصل: المصور | تصدير SVG محسّن للويب
25 كيلو بايت
الأمثل
20 كيلو بايت (-21.5%)
الرجاء مراجعة سجل التغيير لمزيد من المعلومات عما تغير مؤخرًا.
اختبار الملحن
يرجى الاطلاع على المساهمة للحصول على التفاصيل.
إذا وجدت خطأً يتعلق بالأمان، فيرجى إرسال بريد إلكتروني إلى العنوان [email protected] بدلاً من استخدام أداة تعقب المشكلات.
أنت حر في استخدام هذه الحزمة (وهي مرخصة من معهد ماساتشوستس للتكنولوجيا)، ولكن إذا وصلت إلى بيئة الإنتاج الخاصة بك، فإننا نقدر بشدة إرسالك لنا بطاقة بريدية من مسقط رأسك، مع ذكر الحزمة (الحزم) التي تستخدمها.
عنواننا هو: سباتي، كرويكسترات 22، 2018 أنتويرب، بلجيكا.
ننشر جميع البطاقات البريدية المستلمة على موقع شركتنا.
فريك فان دير هيرتن
جميع المساهمين
هذه الحزمة مستوحاة من psliwa/image-optimizer
الدعم العاطفي المقدم من Joke Forment
رخصة معهد ماساتشوستس للتكنولوجيا (MIT). يرجى الاطلاع على ملف الترخيص لمزيد من المعلومات.