• 0
linux web man

اصدار نسخة تجريبية من مكتبة معالجة الصور

سؤال

بسم الله الرحمن الرحيم

تم بعون الله إطلاق الاصدار التجريبي الأول من مكتبة معالجة الصور "image processing library" والتي تحوي عدداً لا بأس به من الدوال الأساسية للتعامل مع الصور سنستعرضها هنا . يُذكر بأن هذا الاصدار تجريبي وما يزال يحوي عدداً من المشاكل (وأهمها السرعة) سأعمل على تصحيحها في الاصدارات القادمة .
اعادة تحجيم الصور :
في حال اردت تغيير ابعاد الصور أو إنشاء صور مصغرات , يُمكنك استخدام دالة resize() التي تُستخدم بثلاث طُرق : الطريقة الاولى هي تحديد وسيطين الاول هو مقبض الصورة , وأما الثاني فهو النسبة المئوية لاعادة تحجيم الصورة ولا يلزم استخدام الرمز % في الوسيط الثاني . مثلاً الكود التالي يقوم بتصغير الصورة بنسبة 50 % :

<?php$image = imagecreatefromjpeg('example.jpg');resize($image, 50);header("Content-Type: image/png");imagepng($image);?>


الطريقة الثانية هي تمرير ثلاث وسائط الى الدالة , الاول هو مقبض الصورة و الثاين هو عرض الصورة الناتجة مقدرا ً بواحدة البكسل و الثالث هو ارتفاع الصورة , لكن قد تُسبب هذه العملية بتشويه الصور احيانا .

<?php$image = imagecreatefromjpeg('example.jpg');resize($image, 340, 260);header("Content-Type: image/png");imagepng($image);?>


أما الطريقة الثالثة فتقبل نفس وسائط الطريقة الثانية لكن مع زيادة وسيط رابع للمحافظة على ابعاد الصورة , حيث يقوم بتحديد اكبر الابعاد ومن ثم ايجاد النسبة المئوية للتضغير أو التكبير .

<?php$image = imagecreatefromjpeg('example.jpg');resize($image, 340, 260, true);header("Content-Type: image/png");imagepng($image);?>

اقتطاع الصور :
وذلك بواسطة الدالة crop() التي تقبل خمسة وسائط , الاول هو مقبض الصورة و الثاني هي احداثيات X الخاصة ببداية مكان الاقتطاع والثالث هو احداثيات Y , اما الرابع فهو عرض الصورة الناتجة و الخامس هو ارتفاع الصورة .

<?php$image = imagecreatefromjpeg('example.jpg');crop($image, 50, 50, 150 , 100);header("Content-Type: image/png");imagepng($image);?>


قلب الصور :
مكتبة GD لا توفر بشكل افتراضي امكانية قلب الصور رأسياً أو افقيا ً , لكن مع الدالتين flip_vertical, flip_horizontal التان يُمرر إليهما وسيط وحيد هو مقبض الصورة , يمكن عمل ذلك بكل سهولة كما في المثال التالي الذي يقوم بقلب الصورة رأسيا :

<?php$image = imagecreatefromjpeg('example.jpg');flip_vertical($image);header("Content-Type: image/png");imagepng($image);?>


اضافة علامات مائية :
يمكن إضافة نص أو صورة كعلامة مائية , وذلك باستخدام إحدى الدالتين text_watermark() أو image_watermark() , وكما واضح من التوثيق فان الدالة text_watermark() تاخذ تسعة وسائط لكن اهمها هي احداثيات X و Y ; حيث تقبل قيمة عددية بالإضافة الى احدى الكلمات "right , left , center" يالنسبة الى X , أو "top , buttom , center" بالنسبة الى Y , و الوسيط المنطقي $angled يحدد هل النص سيكتب بشكل افقي ام بتميله وجعله واقعا على قطر الصورة .
اما الدالة image_watermark() فتقبل (بالإضافة الى الصورة الاصلية و صورة العلامة المائية) احداثيات X وY كما في الدالة السابقة بالإضافة الى نسبة الشفافية .
عمل تدرج لوني :
وذلك باستخدام الدالة gradient() التي تقبل الوسيط الأول كالصورة الهدف والوسيط الثاني هو مصفوفة ثنائية البُعد البعد الاول هو مصفوفة ايضا ً تحوي قيم لون بداية التدرج (الاحمر , الاخضر , الازرق) و كذلك البعد الثاني لكن للون نهاية التدرج , والوسيط الاخير يُمثل اتجاه التدرج (افقي أو عمودي) , مثال :

<?php$image = imagecreatefromjpeg('example.jpg');gradient($image, array(array(255, 128, 0), array(255, 255, 255)), 'h');header("Content-Type: image/png");imagepng($image);?>

بقية الدوال لا تحتاج الى شرح , فأغلبها لا تقبل الا وسيطا ً وحيدا ً هو الصورة الهدف وتطبيق مختلف التأثيرات على الصوروهذه الدوال هي "antialiasing,old_tv,slice,pixelate,spread,border,gray,unsharp,duotone,interlace,scatter,mirror,screen" وهذه أمثلة عنها :
post-268329-0-55367800-1366485160_thumb.
اضافة الى ذلك قُمت بتضمين الدالة التي قمت بكتابتها في موضوع الكتابة باللغة العربية على الصور مع تصحيح مشكلة كتابة حرفين أو حرف واحد ومشكلة الاحرف الانكليزية و الارقام و الرموز مع بقاء مشكلة التشكيل قائمة .
ميزات هذه المكتبة : تحوي عددا من التأثيرات الغير موجودة في بقية المكتبات , تمكين الكتابة باللغة العربية .
عيوب هذه المكتبة : البطئ - عدد من الفلاتر لا تستطيع التحكم فيها بالشكل المطلوب (فلتر unsharp mask مثلاً) , عدم وجود ملف README يحوي شرح مفصل لكامل الدوال .
لا تزال هذه المكتبة في بداياتها واتمنى ان اسمع آرائكم ومقترحاتكم في التعليقات

تحميل هذه المكتبة : image_processing_library_v0.4.zip

تم تعديل بواسطه Abd Allatif
1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

3 إجابة على هذا السؤال .

  • 0

السلام عليكم

 

ما شاء الله عليك عبداللطيف على هذا العمل الرائع , والأجمل صفحات التجربة والأمثلة التي تضعها دائماً مع أكوادك

 

بالنسبة للآراء فأولها إستخدام البرمجة الكائنية وتجزئة الأعمال على دوال منفصلة لعدم تكرار نفس الكود الذي يقوم بعمل نفس العملية -مما سيوفر من وقت التنفيذ أيضاً-

- بالنسبة لطول وقت التنفيذ فهذا بسبب الدوران على عدد النقاط جميعها للصورة لتنفيذ تأثير معين وهذا أمر لا مفر منه , ولكن يمكن لنا تقليل الوقت بالحفظ الموقت للبيانات أي بيانات كل بكسيل في مصفوفة لحين الإحتياج إليها حتى لا نقوم بتكرار إستدعاء الدوال في كل مرة لكل بكسيل وطبعاً تغيير محتوى هذه المتغيرات بعد تطبيق التأثير على البكسيل .

 

- الكود أصدر خطأ تخطي وقت التنفيذ المسموح به وهو 30 ثانية عند تنفيذ جميع التأثيرات معاً على الصورة , ربما إمكانيات جهازي المتواضعه هي سبب ظهور هذا الخطأ عندي :) , يمكن زيادة وقت التنفيذ للكود ولكن ربما يؤدي هذا من يستخدم الكود لإغلاق موقعه :D , فالأفضل هو عدم تنفيذ أكثر من عدد معين من التأثيرات .

 

دمت في أمان الله

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

السلام عليكم

 

جزاك الله خيرا على المجهود الطيب. لماذا لاتقوم بإستضافة مشروعك على bitbucket او github ؟

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

وعليكم السلام و رحمة الله وبركاته

 
جزاك الله خيرا على المجهود الطيب. لماذا لاتقوم بإستضافة مشروعك على bitbucket او github ؟

 
شكرا لك على نصيحتك , إن شاء الله الإصدار القادم من هذه المكتبة و مشروع acaptcha على github


بالنسبة للآراء فأولها إستخدام البرمجة الكائنية وتجزئة الأعمال على دوال منفصلة لعدم تكرار نفس الكود الذي يقوم بعمل نفس العملية -مما سيوفر من وقت التنفيذ أيضاً-
- بالنسبة لطول وقت التنفيذ فهذا بسبب الدوران على عدد النقاط جميعها للصورة لتنفيذ تأثير معين وهذا أمر لا مفر منه , ولكن يمكن لنا تقليل الوقت بالحفظ الموقت للبيانات أي بيانات كل بكسيل في مصفوفة لحين الإحتياج إليها حتى لا نقوم بتكرار إستدعاء الدوال في كل مرة لكل بكسيل وطبعاً تغيير محتوى هذه المتغيرات بعد تطبيق التأثير على البكسيل .
 

إن شاء الله الاصدار القادم سأستخدم فيه البرمجة غرضية التوجه و ساحاول زيادة سرعة تطبيق الدوال كما اقترحت عن طريق الحفظ الموقت لبيانات البكسلات , بالاضافة لزيادة عدد الفلاتر .

 

دمتم في حفظ الله و رعايته

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

من فضلك سجل دخول لتتمكن من التعليق

ستتمكن من اضافه تعليقات بعد التسجيل



سجل دخولك الان

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .