やりたいこと
PythonでPILLOWライブラリを活用し、画像の生成をしたいです。
これまでは、画像の座標を直打ちして作成していたのですが、
拡張性・メンテナンス性の良いコードを書いてみたいと思い、クラス定義をしました。
しかし、作成したコードを実行すると、下記に示すようなエラーが発出します。
(→ 生じるエラー、を参照ください)
コンストラクタやメソッド内で使いたい変数なので、メソッドの外で宣言し、
コンストラクタや各メソッド内で
global font
と宣言すれば使えるのかと思ったのですが、正しく動作するコードを
どのように記述すればよいのか解りませんので、どなたかおわかりの方教えて下さい。
環境
- Windows10 64bit
- Python v3.8.3
- PILLOWモジュール
コード
Python3
1from PIL import Image, ImageFont, ImageDraw 2 3class Component(): 4 5 # フォントの設定は他のメソッドでも使うので 6 # 共用させるために、この位置で宣言しました 7 # ------------------------------------------- 8 DefaultFontName = "KikaiChokokuJIS.otf" 9 DefaultFontSize = 40 10 font = ImageFont(DefaultFontName, DefaultFontSize) 11 12 def __init__(self, mode="RGB", size=(1920,1020),bkcolor=(203,0,0)): 13 global font 14 self.mode = mode 15 self.size = size 16 self.bkcolor = bkcolor 17 self.image = Image.new(self.mode,self.size,self.bkcolor) 18 self.draw = ImageDraw.Draw(self.image) 19 self.draw.text((300,500),datetime.datetime.now(),fill=(0,0,255),font=font) 20 self.image.save("templates/static/images/test.jpg", quality=85) 21 22 def DrawBox(self, pos_x,pos_y,fill=(128,128,128),outline=(50,50,50),title="Default"): 23 global font 24 self.pos_x = pos_x 25 self.pos_y = pos_y 26 self.title = title 27 28 self.draw.recangle((self.pos_x,self.pos_y,self.pos_x+300,self.pos_y+300), 29 fill=fill, 30 outline=outline, 31 width=5) 32 self.draw.text((self.pos_x,self.pos_y),self.title,fill=(255,255,255),font=font) 33 34 def Output(self): 35 code = str(random.random() * 1000) 36 return "test.jpg/?=" + code 37 38test_image = Component() 39print(test_image)
生じるエラー
Error
1class Component(): 2font = ImageFont(DefaultFontName, DefaultFontSize) 3TypeError: 'module' object is not callable
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/03/26 23:24
退会済みユーザー
2021/03/26 23:54 編集
2021/03/28 11:21