مكتبة PHP لتغيير حجم الصور وقياسها واقتصاصها.
إذا كنت لا ترغب في اقتصاص الصور وتغيير حجمها وتخزينها على الخادم الخاص بك، فإن Gumlet.com هي خدمة مجانية يمكنها معالجة الصور في الوقت الفعلي وتقديمها في جميع أنحاء العالم من خلال CDN.
هذه الحزمة متاحة من خلال Packagist مع البائع ومعرف الحزمة نفس هذا الريبو.
إذا كنت تستخدم 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 ' );
لتغيير حجم الصورة لتتناسب بشكل أفضل مع مجموعة معينة من الأبعاد (مع الحفاظ على نسبة العرض إلى الارتفاع):
$ 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 ' );
سيؤدي هذا إلى تغيير حجم الصورة إلى أقرب ما يمكن من الأبعاد التي تم تمريرها، ثم قص الباقي وتوسيطه.
في حالة المثال أعلاه، سيتم تغيير حجم صورة بحجم 400 بكسل × 600 بكسل إلى 200 بكسل × 300 بكسل، ثم سيتم إزالة 50 بكسل من الأعلى والأسفل، ويتبقى لك 200 بكسل × 200 بكسل.
أوضاع الاقتصاص:
يتوفر عدد قليل من خيارات وضع الاقتصاص حتى تتمكن من اختيار الطريقة التي تريد بها التعامل مع العرض أو الارتفاع الذي يتجاوز في نهاية المطاف بعد تغيير حجم الصورة. وضع الاقتصاص الافتراضي المستخدم هو 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 ' );
في حالة أن لديك صورة بحجم 400 بكسل × 600 بكسل وتريد اقتصاصها إلى 200 بكسل × 200 بكسل، فسيتم تغيير حجم الصورة إلى 200 بكسل × 300 بكسل، ثم يمكنك الإشارة إلى الطريقة التي تريد بها التعامل مع تلك الـ 100 بكسل التي تتجاوز قيمة الاقتصاص الوضع الذي تريد استخدامه.
على سبيل المثال، سيؤدي تمرير وضع الاقتصاص CROPTOP
إلى إزالة 100 بكسل من الأسفل ويترك لك 200 بكسل × 200 بكسل.
$ image = new ImageResize ( ' image.jpg ' );
$ image -> crop ( 200 , 200 , true , ImageResize:: CROPTOP );
$ image -> save ( ' image2.jpg ' );
على العكس من ذلك، سيؤدي تمرير وضع الاقتصاص CROPBOTTOM
إلى إزالة 100 بكسل من الأعلى ويترك لك 200 بكسل × 200 بكسل.
$ 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