PIL هي مكتبة تصوير Python التي توفر لمترجم Python إمكانات تحرير الصور. تم تطويره بواسطة فريدريك لوند والعديد من المساهمين الآخرين. الوسادة هي شوكة PIL الصديقة ومكتبة سهلة الاستخدام تم تطويرها بواسطة Alex Clark ومساهمين آخرين. سنعمل مع الوسادة.
واجهة جافا القابلة للمقارنة
تثبيت:
- لينكس: في محطة Linux اكتب ما يلي:
pip install Pillowتثبيت النقطة عبر المحطة:sudo apt-get update
sudo apt-get install python-pip - ويندوز: تحميل حزمة الوسادة المناسبة وفقًا لإصدار بايثون الخاص بك. تأكد من التنزيل وفقًا لإصدار python الموجود لديك.
سنعمل هنا مع وحدة الصورة التي توفر فئة تحمل الاسم نفسه وتوفر الكثير من الوظائف للعمل على صورنا. لاستيراد وحدة الصورة، يجب أن يبدأ الكود الخاص بنا بالسطر التالي:
from PIL import Imageالعمليات مع الصور:
- افتح صورة معينة من المسار: Python
#img = Image.open(path) # On successful execution of this statement # an object of Image type is returned and stored in img variable) try: img = Image.open(path) except IOError: pass # Use the above statement within try block as it can # raise an IOError if file cannot be found # or image cannot be opened.
- استرداد حجم الصورة : تحتوي مثيلات فئة الصورة التي تم إنشاؤها على العديد من السمات، إحدى سماتها المفيدة هي الحجم. Python
بعض السمات الأخرى هي: Image.width Image.height Image.format Image.info إلخ.from PIL import Image filename = 'image.webp' with Image.open(filename) as image: width height = image.size #Image.size gives a 2-tuple and the width height can be obtained
- حفظ التغييرات في الصورة: لحفظ أي تغييرات أجريتها على ملف الصورة، نحتاج إلى توفير المسار بالإضافة إلى تنسيق الصورة. Python
img.save(path format) # format is optional if no format is specified #it is determined from the filename extension
- تدوير الصورة: يحتاج تدوير الصورة إلى زاوية كمعلمة لتدوير الصورة. Python
from PIL import Image def main(): try: #Relative Path img = Image.open('picture.webp') #Angle given img = img.rotate(180) #Saved in the same relative location img.save('rotated_picture.webp') except IOError: pass if __name__ == '__main__': main()
ملاحظة: تتوفر علامة توسيع اختيارية كأحد وسيطات طريقة التدوير والتي إذا تم ضبطها على "صحيح" فإنها تعمل على توسيع الصورة الناتجة لجعلها كبيرة بما يكفي لاستيعاب الصورة التي تم تدويرها بالكامل. كما هو موضح في مقتطف الكود أعلاه، فقد استخدمت مسارًا نسبيًا حيث توجد صورتي في نفس الدليل مثل ملف كود بايثون الخاص بي، ويمكن استخدام المسار المطلق أيضًا.
- اقتصاص صورة: يأخذ Image.crop(box) إحداثيات بكسل مكونة من 4 صفوف (يسار أعلى يمين أسفل) ويعيد منطقة مستطيلة من الصورة المستخدمة. Python
from PIL import Image def main(): try: #Relative Path img = Image.open('picture.webp') width height = img.size area = (0 0 width/2 height/2) img = img.crop(area) #Saved in the same relative location img.save('cropped_picture.webp') except IOError: pass if __name__ == '__main__': main()
- تغيير حجم الصورة: Image.resize(size)- يتم توفير الحجم هنا على شكل صفين من العرض والارتفاع. Python
from PIL import Image def main(): try: #Relative Path img = Image.open('picture.webp') width height = img.size img = img.resize((width/2 height/2)) #Saved in the same relative location img.save('resized_picture.webp') except IOError: pass if __name__ == '__main__': main()
- لصق صورة على صورة أخرى: يمكن أن تكون الوسيطة الثانية صفًا مزدوجًا (تحديد الزاوية اليسرى العليا) أو صفًا رباعيًا (يسارًا أعلى يمينًا أسفل) - في هذه الحالة يجب أن يتطابق حجم الصورة الملصقة مع حجم منطقة المربع هذه أو لا شيء وهو ما يعادل (0 0). Python
from PIL import Image def main(): try: #Relative Path #Image on which we want to paste img = Image.open('picture.webp') #Relative Path #Image which we want to paste img2 = Image.open('picture2.webp') img.paste(img2 (50 50)) #Saved in the same relative location img.save('pasted_picture.webp') except IOError: pass if __name__ == '__main__': main() ##An additional argument for an optional image mask image is also available.
- الحصول على رسم بياني للصورة: سيؤدي هذا إلى إرجاع رسم بياني للصورة كقائمة بعدد وحدات البكسل واحد لكل بكسل في الصورة. (الرسم البياني للصورة هو تمثيل رسومي لتوزيع الدرجة اللونية في صورة رقمية. ويحتوي على جميع قيم السطوع الموجودة في الصورة. ويرسم عدد وحدات البكسل لكل قيمة سطوع. ويساعد في إجراء إعدادات التعريض الضوئي.) من صورة استيراد PIL Python
def main(): try: #Relative Path img = Image.open('picture.webp') #Getting histogram of image print img.histogram() except IOError: pass if __name__ == '__main__': main()
- نقل الصورة: هذه الميزة تعطينا صورة معكوسة للصورة Python
from PIL import Image def main(): try: #Relative Path img = Image.open('picture.webp') #transposing image transposed_img = img.transpose(Image.FLIP_LEFT_RIGHT) #Save transposed image transposed_img.save('transposed.webp') except IOError: pass if __name__ == '__main__': main()
- تقسيم الصورة إلى نطاقات فردية: يؤدي تقسيم الصورة في وضع RGB إلى إنشاء ثلاث صور جديدة تحتوي كل منها على نسخة من النطاقات الفردية الأصلية. Python
from PIL import Image def main(): try: #Relative Path img = Image.open('picture.webp') #splitting the image print img.split() except IOError: pass if __name__ == '__main__': main()
- خريطة الموقع: تحويل صورة إلى صورة نقطية X11 (تنسيق صورة ثنائي للنص العادي). تقوم بإرجاع سلسلة تحتوي على صورة نقطية X11 ولا يمكن استخدامها إلا لصور الوضع 1، أي صور بالأبيض والأسود بحجم 1 بت بكسل. من صورة استيراد PIL Python
def main(): try: #Relative Path img = Image.open('picture.webp') print img.mode #converting image to bitmap print img.tobitmap() print type(img.tobitmap()) except IOError: pass if __name__ == '__main__': main()
- إنشاء صورة مصغرة: تقوم هذه الطريقة بإنشاء صورة مصغرة للصورة المفتوحة. ولا يقوم بإرجاع كائن صورة جديد، بل يقوم بإجراء تعديل موضعي على كائن الصورة المفتوح حاليًا نفسه. إذا كنت لا تريد تغيير كائن الصورة الأصلي، فقم بإنشاء نسخة ثم قم بتطبيق هذه الطريقة. تقوم هذه الطريقة أيضًا بتقييم مدى ملاءمة الحفاظ على نسبة العرض إلى الارتفاع للصورة وفقًا للحجم الذي تم تمريره. من صورة استيراد PIL Python
def main(): try: #Relative Path img = Image.open('picture.webp') #In-place modification img.thumbnail((200 200)) img.save('thumb.webp') except IOError: pass if __name__ == '__main__': main()