OSError: cannot open resource while trying to use ImageFont.py
OSError: cannot open resource while trying to use ImageFont.py
我正在使用 python 生成令牌作为安全措施。这是代码:
from PIL import Image, ImageDraw, ImageFont
image=Image.new("RGBA",(220,20),(255,255,255))
image_base=ImageDraw.Draw(image)
font = ImageFont.truetype("arial.ttf", 15)
font.size = 16
image_base.text((80,0),emailed_password,(0,0,0),font=font)
image_bytes=BytesIO()
image.save(image_bytes,format='png')
logo_file = open('static\images\RCI_logo.jpg', 'rb')
logo_bytes = logo_file.read()
logo_file.close()
token_name='registration_token'
secret_code_attachment = MIMEImage(image_bytes.getvalue(), name = '{0}.png'.format(token_name))
secret_code_attachment.add_header('Content-ID', '<{0}>'.format(token_name))
secret_code_attachment.add_header('Content-Disposition', 'inline')
message.attach(secret_code_attachment)
logo_file_name='logo_file_svg'
logo_attachment = MIMEImage(logo_bytes, name = '{0}.jpg'.format(logo_file_name))
logo_attachment.add_header('Content-ID', '<{0}>'.format(logo_file_name))
logo_attachment.add_header('Content-Disposition', 'inline')
message.attach(logo_attachment)
html = 'some message'
html_attachment = MIMEText(html, 'html')
message.attach(html_attachment)
smtpObj.sendmail(sender,receiver,message.as_string())
错误似乎是无法加载字体。虽然我是从 PIL 导入 ImageFont。
错误信息如下:
ERROR in app: Exception on /registration [POST], referer: http://my.com/registration
Traceback (most recent call last):, referer: http://my.com/registration
File "/usr/local/lib/python3.5/dist-packages/flask/app.py", line 1982, in wsgi_app, referer: http://my.com.com/registration
response = self.full_dispatch_request(), referer: http://my.com/registration
File "/usr/local/lib/python3.5/dist-packages/flask/app.py", line 1614, in full_dispatch_request, referer: http://my.com/registration
rv = self.handle_user_exception(e), referer: http://my.com/registration
File "/usr/local/lib/python3.5/dist-packages/flask/app.py", line 1517, in handle_user_exception, referer: http://my.com/registration
reraise(exc_type, exc_value, tb), referer: http://my.com/registration
File "/usr/local/lib/python3.5/dist-packages/flask/_compat.py", line 33, in reraise, referer: http://my.com/registration
raise value, referer: http://my.com/registration
File "/usr/local/lib/python3.5/dist-packages/flask/app.py", line 1612, in full_dispatch_request, referer: http://my.com/registration
rv = self.dispatch_request(), referer: http://my.com/registration
File "/usr/local/lib/python3.5/dist-packages/flask/app.py", line 1598, in dispatch_request, referer: http://my.com/registration
return self.view_functions[rule.endpoint](**req.view_args), referer: http://my.com/registration
File "/var/www/rci/rciApp/__init__.py", line 260, in registration, referer: http://my.com/registration
font = ImageFont.truetype("arial.ttf", 15), referer: http://my/registration
File "/usr/lib/python3/dist-packages/PIL/ImageFont.py", line 239, in truetype, referer: http://my.com/registration
return FreeTypeFont(font, size, index, encoding), referer: http://my.com/registration
File "/usr/lib/python3/dist-packages/PIL/ImageFont.py", line 128, in __init__, referer: http://my.com/registration
self.font = core.getfont(font, size, index, encoding), referer: http://my.com/registration
OSError: cannot open resource, referer: http://my.com/registration
我的理解是 ImageFont 导致了问题,因为它无法加载正确的字体。我不确定如何修复它。更令人费解的是,在我将它放在服务器上之前,它一直可以工作。
遇到同样的问题,很明显是font
文件无法被PIL
找到。
在 font = ImageFont.truetype("arial.ttf", 15)
中找不到 arial.ttf
。
解决方案是 cd /usr/share/fonts/truetype
并找到一个可用的字体文件,然后用它替换 "arial.ttf"
。(对于 windows 用户,字体文件在 C:\WINDOWS\Fonts
)
调试打印你的文件路径并检查它是否正确。
我也遇到了。尽管字体存在于静态文件夹中,但其他静态资源仍在加载,但字体除外 — 事实证明这是路径中的愚蠢错误。
我输入了:
ImageFont.truetype(STATIC_ROOT + "fonts/arial.ttf", 44)
而不是:
ImageFont.truetype(STATIC_ROOT + "/fonts/arial.ttf", 44)
我正在使用 python 生成令牌作为安全措施。这是代码:
from PIL import Image, ImageDraw, ImageFont
image=Image.new("RGBA",(220,20),(255,255,255))
image_base=ImageDraw.Draw(image)
font = ImageFont.truetype("arial.ttf", 15)
font.size = 16
image_base.text((80,0),emailed_password,(0,0,0),font=font)
image_bytes=BytesIO()
image.save(image_bytes,format='png')
logo_file = open('static\images\RCI_logo.jpg', 'rb')
logo_bytes = logo_file.read()
logo_file.close()
token_name='registration_token'
secret_code_attachment = MIMEImage(image_bytes.getvalue(), name = '{0}.png'.format(token_name))
secret_code_attachment.add_header('Content-ID', '<{0}>'.format(token_name))
secret_code_attachment.add_header('Content-Disposition', 'inline')
message.attach(secret_code_attachment)
logo_file_name='logo_file_svg'
logo_attachment = MIMEImage(logo_bytes, name = '{0}.jpg'.format(logo_file_name))
logo_attachment.add_header('Content-ID', '<{0}>'.format(logo_file_name))
logo_attachment.add_header('Content-Disposition', 'inline')
message.attach(logo_attachment)
html = 'some message'
html_attachment = MIMEText(html, 'html')
message.attach(html_attachment)
smtpObj.sendmail(sender,receiver,message.as_string())
错误似乎是无法加载字体。虽然我是从 PIL 导入 ImageFont。
错误信息如下:
ERROR in app: Exception on /registration [POST], referer: http://my.com/registration
Traceback (most recent call last):, referer: http://my.com/registration
File "/usr/local/lib/python3.5/dist-packages/flask/app.py", line 1982, in wsgi_app, referer: http://my.com.com/registration
response = self.full_dispatch_request(), referer: http://my.com/registration
File "/usr/local/lib/python3.5/dist-packages/flask/app.py", line 1614, in full_dispatch_request, referer: http://my.com/registration
rv = self.handle_user_exception(e), referer: http://my.com/registration
File "/usr/local/lib/python3.5/dist-packages/flask/app.py", line 1517, in handle_user_exception, referer: http://my.com/registration
reraise(exc_type, exc_value, tb), referer: http://my.com/registration
File "/usr/local/lib/python3.5/dist-packages/flask/_compat.py", line 33, in reraise, referer: http://my.com/registration
raise value, referer: http://my.com/registration
File "/usr/local/lib/python3.5/dist-packages/flask/app.py", line 1612, in full_dispatch_request, referer: http://my.com/registration
rv = self.dispatch_request(), referer: http://my.com/registration
File "/usr/local/lib/python3.5/dist-packages/flask/app.py", line 1598, in dispatch_request, referer: http://my.com/registration
return self.view_functions[rule.endpoint](**req.view_args), referer: http://my.com/registration
File "/var/www/rci/rciApp/__init__.py", line 260, in registration, referer: http://my.com/registration
font = ImageFont.truetype("arial.ttf", 15), referer: http://my/registration
File "/usr/lib/python3/dist-packages/PIL/ImageFont.py", line 239, in truetype, referer: http://my.com/registration
return FreeTypeFont(font, size, index, encoding), referer: http://my.com/registration
File "/usr/lib/python3/dist-packages/PIL/ImageFont.py", line 128, in __init__, referer: http://my.com/registration
self.font = core.getfont(font, size, index, encoding), referer: http://my.com/registration
OSError: cannot open resource, referer: http://my.com/registration
我的理解是 ImageFont 导致了问题,因为它无法加载正确的字体。我不确定如何修复它。更令人费解的是,在我将它放在服务器上之前,它一直可以工作。
遇到同样的问题,很明显是font
文件无法被PIL
找到。
在 font = ImageFont.truetype("arial.ttf", 15)
中找不到 arial.ttf
。
解决方案是 cd /usr/share/fonts/truetype
并找到一个可用的字体文件,然后用它替换 "arial.ttf"
。(对于 windows 用户,字体文件在 C:\WINDOWS\Fonts
)
调试打印你的文件路径并检查它是否正确。
我也遇到了。尽管字体存在于静态文件夹中,但其他静态资源仍在加载,但字体除外 — 事实证明这是路径中的愚蠢错误。
我输入了:
ImageFont.truetype(STATIC_ROOT + "fonts/arial.ttf", 44)
而不是:
ImageFont.truetype(STATIC_ROOT + "/fonts/arial.ttf", 44)