반응형
AttributeError: 'ImageDraw' object has no attribute 'textsize'¶
- pil에 ImageDraww.Draw로 생성된 객체의 textsize 메서드를 사용할때 생기는 오류입니다.
- ImageFont.truetype로 생성된 객체에 getbbox 함수를 사용하여 오류를 해결할 수 있습니다.
In [1]:
from PIL import Image, ImageDraw, ImageFont
# Banner settings
banner_width = 1024
banner_height = 256
background_color = (255, 204, 0) # Bright yellow background
text = "2024년 축 당선"
text_color = (0, 0, 0) # Black text
font_size = 40
# Create an empty Image
banner = Image.new("RGB", (banner_width, banner_height), background_color)
draw = ImageDraw.Draw(banner)
# Load a truetype or opentype font
font_path = "/usr/share/fonts/truetype/nanum/NanumGothicBold.ttf"
font = ImageFont.truetype(font_path, font_size)
# Calculate text width and height
text_width, text_height = draw.textsize(text, font=font)
--------------------------------------------------------------------------- AttributeError Traceback (most recent call last) Cell In[1], line 21 18 font = ImageFont.truetype(font_path, font_size) 20 # Calculate text width and height ---> 21 text_width, text_height = draw.textsize(text, font=font) AttributeError: 'ImageDraw' object has no attribute 'textsize'
In [2]:
from PIL import Image, ImageDraw, ImageFont
# Banner settings
banner_width = 1024
banner_height = 256
background_color = (255, 204, 0) # Bright yellow background
text = "2024년 축 당선"
text_color = (0, 0, 0) # Black text
font_size = 40
# Create an empty Image
banner = Image.new("RGB", (banner_width, banner_height), background_color)
draw = ImageDraw.Draw(banner)
# Load a truetype or opentype font
# mac os 용 path 입니다. 윈도우는 다를 수 있습니다. (window : C:\Windows\Fonts\NanumGothicBold.ttf 폰트가 없다면 다운 받아야 합니다.)
font_path = "/usr/share/fonts/truetype/nanum/NanumGothicBold.ttf"
font = ImageFont.truetype(font_path, font_size)
# Calculate text width and height
_, _, text_width, text_height = font.getbbox(text)
- 나머지 코드를 완성하면 원하는 글이 작성되는 것을 볼 수 있습니다.
In [3]:
### 이미지 위에 글쓰기
# 1. 텍스트 위치 설정을 위해 텍스트 사이지를 도출합니다.
_, _, tw, th = font.getbbox(text)
# 2. 이미지 사이즈를 정보 확인
w, h = banner.size
# 3. font 위치 설정
font_start_coordinate = (int(w/2)-tw/2, int(h/2)-int(font.size/2))
# 4. 이미지에 폰트 넣기 / (text 시작 위치, text 내용, 폰트 적용, 폰트색)
draw.text(font_start_coordinate, text, font=font, fill=(0,0,0))
banner
Out[3]:
반응형
'python' 카테고리의 다른 글
파이썬에서 재귀 함수의 호출 제한 이해하기 (0) | 2024.05.01 |
---|---|
ERROR: Could not build wheels for greenlet, which is required to install pyproject.toml-based projects (0) | 2024.04.26 |
블로그에서 사용하는 배너 파이썬으로 그리기 (0) | 2024.03.29 |
최대 마진 관련성(Maximal Marginal Relevance, MMR) (0) | 2024.03.26 |
ValueError: shapes (100,) and (1,100) not aligned: 100 (dim 0) != 1 (dim 0) (0) | 2024.03.23 |
댓글