استبدال حد على صورة في Python PIL

0

لدي تطبيق معرض حيث يقوم المستخدمون بتحميل الصور ورمزها يعطيها حدودًا ، ويكتب بعض سمات الصورة على الحدود ويخزنها.

image2 = Image.open('media/' + str(image.file))
width, height = image2.size;
image2 = ImageOps.expand(image2, border=(int(width/25),int(height/20),int(width/25),int(height/10)), fill='rgb(0,0,0)')

(لاحظ أن الحد السفلي هنا أطول من الأعلى لأنني أكتب سمات على الحد السفلي.) الآن أقوم ببناء ميزة تحرير للصور التي تم تحميلها حيث يمكن للمستخدم تغيير سمات الصور التي تم تحميلها. لكن السمات المكتوبة بالفعل على الحدود يجب استبدالها.

لذا هنا ، فإن نهجي هو وضع رقعة سوداء على الحد السفلي وإعادة كتابة السمات الجديدة دون تغيير الحدود العليا والجانبية ودون تغيير نسبة العرض إلى الارتفاع. كل هذا يجب القيام به باستخدام PIL.

السؤال هو كيف أضع صندوقًا أسود على الحد السفلي؟

لقد جربت ImageOps.fit () كما هو مذكور هنا https://pillow.readthedocs.io/en/3.3.x/reference/ImageOps.html#PIL.ImageOps.fit ، ولكن لا يبدو أن نسبة العرض إلى الارتفاع صحيحة أريد الكتابة فوق مربع أسود على الحدود السوداء وعدم اقتصاص الصورة.

2 الاجابة

1
افضل جواب

بالنسبة لي يبدو أن الحل الأسهل هو رسم وحدات البكسل السوداء بسرعة في المنطقة التي تريدها باستخدام حلقات مزدوجة و Image.putpixel

Imagen 690384

from PIL import Image

img = Image.open('red.png')

for x in range(img.width):
    for y in range(img.height - 40, img.height):
        img.putpixel((x, y), (0, 0, 0))

img.save('red2.png')

Imagen 690385

:مؤلف
0

أبسط طريقة في رأيي هي إنشاء صورة سوداء جديدة ولصقها على صورتك الحالية -

from PIL import Image
im = Image.open('test.png')
blackBox = Image.new(im.mode, (im.width, 50), '#000')
im.paste(blackBox, (0, im.height - blackBox.height))

بدلاً من ذلك ، يمكنك استخدام ImageDraw - http://pillow.readthedocs.io/en/5.2.x/reference/ImageDraw.html - والذي يمكنك استخدامه لرسم المستطيلات والأشكال الأخرى.

from PIL import Image, ImageDraw
im = Image.open('test.png')
d = ImageDraw.Draw(im)
d.rectangle((0, im.height - 50, im.width, im.height), fill='#000')
:مؤلف

أسئلة ذات صلة

فوق
قائمة طعام