Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
322 views
in Technique[技术] by (71.8m points)

image - Pillow Python (Watermarking) - Error Messages

so I am trying to pick a folder, select every photo, watermark it with an individual text and safe it in a different folder. I have watched a lot of YouTube Videos and googled a lot but I can't help it anymore... Im always getting error messages and I can't see why.

So my current code is:

import PIL

from PIL import Image

from PIL import ImageDraw 
from PIL import ImageFont
import os

for f in os.listdir('.'):
    if f.endswith('.jpg'):
        i = Image.open(f)
        draw = ImageDraw.Draw(f)
        text = "Test, 22.01.2021"
        font = ImageFont.truetype("arial.ttf",75)
        textwidth, textheight = draw.textsize(text, font)
        width, height = f.size
        x=width/2-textwidth/2
        y=height-textheight-300
        draw.text((x,y), text, font=font)
    
        fn, fext = os.path.splitext(f)
        i.save('Test/{}.jpg'.format(fn))

Errors:

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
/opt/anaconda3/lib/python3.7/site-packages/PIL/ImageDraw.py in Draw(im, mode)
    464     try:
--> 465         return im.getdraw(mode)
    466     except AttributeError:

AttributeError: 'str' object has no attribute 'getdraw'

During handling of the above exception, another exception occurred:

AttributeError                            Traceback (most recent call last)
<ipython-input-5-5c49936ed159> in <module>
      9     if f.endswith('.jpg'):
     10         i = Image.open(f)
---> 11         draw = ImageDraw.Draw(f)
     12         text = "Jonas Knaab, 22.01.2021"
     13         font = ImageFont.truetype("arial.ttf",75)

/opt/anaconda3/lib/python3.7/site-packages/PIL/ImageDraw.py in Draw(im, mode)
    465         return im.getdraw(mode)
    466     except AttributeError:
--> 467         return ImageDraw(im, mode)
    468 
    469 

/opt/anaconda3/lib/python3.7/site-packages/PIL/ImageDraw.py in __init__(self, im, mode)
     57            defaults to the mode of the image.
     58         """
---> 59         im.load()
     60         if im.readonly:
     61             im._copy()  # make it writeable

AttributeError: 'str' object has no attribute 'load'

------------------

Maybe you guys can help me somehow?

Cheers

!!EDIT!!

after changing ..."Draw(f)" to "Draw(i) I do not get the same error messages but it still doesn't work.

---------------------------------------------------------------------------
OSError                                   Traceback (most recent call last)
<ipython-input-9-3b2bbb3d5783> in <module>
     11         draw = ImageDraw.Draw(i)
     12         text = "Jonas Knaab, 22.01.2021"
---> 13         font = ImageFont.truetype("arial.ttf",75)
     14         textwidth, textheight = draw.textsize(text, font)
     15         width, height = f.size

/opt/anaconda3/lib/python3.7/site-packages/PIL/ImageFont.py in truetype(font, size, index, encoding, layout_engine)
    640 
    641     try:
--> 642         return freetype(font)
    643     except OSError:
    644         if not isPath(font):

/opt/anaconda3/lib/python3.7/site-packages/PIL/ImageFont.py in freetype(font)
    637 
    638     def freetype(font):
--> 639         return FreeTypeFont(font, size, index, encoding, layout_engine)
    640 
    641     try:

/opt/anaconda3/lib/python3.7/site-packages/PIL/ImageFont.py in __init__(self, font, size, index, encoding, layout_engine)
    186                     return
    187             self.font = core.getfont(
--> 188                 font, size, index, encoding, layout_engine=layout_engine
    189             )
    190         else:

OSError: cannot open resource
question from:https://stackoverflow.com/questions/65850303/pillow-python-watermarking-error-messages

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

You're using string as an argument to ImageDraw.Draw(). Use i variable instead of f.

i = Image.open(f)
draw = ImageDraw.Draw(i)

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...