Python 이미지 처리: Pillow 라이브러리는 자동 줄 바꿈 텍스트 주석을 구현합니다
Python은 풍부한 오픈 소스 라이브러리를 통해 이미지 처리 분야의 선도적인 프로그래밍 언어가 되었습니다. Pillow는 일반적으로 사용되는 이미지 처리 라이브러리 중 하나이며 간단하고 사용하기 쉬우며 이미지 크기 조정, 자르기, 밝기 조정 및 주석과 같은 작업에 자주 사용됩니다.
그러나 Pillow에는 텍스트 주석에 문제가 있습니다. 텍스트가 텍스트 상자 너비를 초과하면 자동으로 줄 바꿈되지 않습니다. Pillow 라이브러리 자체는 이 기능을 제공하지 않으므로 로직 구현을 직접 작성해야 합니다.
이 튜토리얼에서는 올바른 이미지 텍스트 주석을 얻기 위해 Pillow 라이브러리를 사용하여 Python에서 줄 바꿈 텍스트 상자를 추가하는 방법을 보여줍니다. 최종 효과는 다음과 같습니다.
위 사진은 내 Dev.to 프로필의 스크린샷이며 이를 예로 들어 설명하겠습니다. 녹색 텍스트 상자는 우리가 추가한 텍스트 주석입니다.
이 튜토리얼에서는 조건문(if, else), for 루프 등과 같은 기본적인 Python 프로그래밍 지식이 필요합니다. 다음 도구와 소프트웨어도 필요합니다.
새 프로젝트를 만들려면 다음 단계를 따르세요.
A. 터미널/명령줄을 사용하여 새 폴더를 만듭니다.
<code class="language-bash">mkdir image_annotation</code>
B. pip를 사용하여 virtualenv 설치(이미 설치한 경우 이 단계 건너뛰기):
<code class="language-bash">pip install virtualenv</code>
C. 작업 디렉터리를 image_annotation 폴더로 전환합니다:
<code class="language-bash">cd image_annotation</code>
D. 새로운 가상 환경 만들기:
<code class="language-bash">virtualenv env</code>
E. 가상 환경 활성화(Windows의 경우 명령 프롬프트 사용):
Windows:
<code class="language-bash">.\env\Scripts\activate</code>
Linux/macOS:
<code class="language-bash">source env/bin/activate</code>
F. pip를 사용하여 Pillow 라이브러리 설치:
<code class="language-bash">pip install pillow</code>
코드 편집기에서 프로젝트를 열고 프로젝트 폴더에 script.py
이라는 새 Python 파일을 만듭니다.
주석을 추가하려는 이미지가 기본 이미지입니다. Pillow의 ImageDraw
모듈을 사용하여 이미지를 열고 준비합니다. script.py
파일에 다음 코드를 작성하세요.
<code class="language-python">from PIL import Image, ImageDraw, ImageFont image_file = "path_to_image" # 请替换为您的图片路径 # 打开图像 image = Image.open(image_file) # 初始化ImageDraw draw = ImageDraw.Draw(image)</code>
Pillow는 일반 텍스트와 배경 채우기가 있는 텍스트 상자를 추가할 수 있습니다. 텍스트는 한 줄 또는 여러 줄일 수 있습니다. 이 튜토리얼에서는 여러 줄의 텍스트 상자를 추가하는 방법에 중점을 둡니다.
ImageDraw.multiline_text()
메서드는 여러 줄의 일반 텍스트를 추가할 수 있지만 배경 패딩은 추가할 수 없습니다. ImageDraw.rectangle()
메소드는 배경 채우기가 있는 텍스트 상자를 추가할 수 있습니다.
script.py
파일에 다음 코드를 추가하세요.
<code class="language-bash">mkdir image_annotation</code>
이 코드는 텍스트, 글꼴, 텍스트 상자 너비를 설정합니다. x
, y
변수는 그림의 시작점을 나타내고, end_x
, end_y
변수는 텍스트 상자의 오른쪽 하단 좌표를 나타냅니다. 텍스트 상자의 너비와 높이는 각각 200과 50입니다.
ImageDraw.rectangle()
및 ImageDraw.multiline_text()
메서드는 각각 텍스트 상자와 여러 줄 텍스트를 그리는 데 사용됩니다. image.show()
메소드는 처리된 이미지를 표시하는 데 사용됩니다. image.save("new_image.png")
을 사용하여 이미지를 저장할 수 있습니다. 결과는 다음과 같습니다.
위 그림의 주석에는 여전히 문제가 있으며 여러 줄의 텍스트가 자동으로 줄 바꿈되지 않습니다. 다음 섹션에서는 이 문제를 해결하는 방법을 설명합니다.
줄바꿈 문자n
는 줄바꿈 위치를 지정하는 데 사용됩니다. 이전 예에서는 개행 문자 n
뒤의 내용이 줄바꿈됩니다. 그러나 실제 응용 프로그램에서 텍스트 길이는 일반적으로 동적이며 개행 문자의 위치를 결정하기가 어렵습니다.
Pillow ImageDraw
모듈의 .textlength()
속성은 텍스트 길이를 계산하고 이를 텍스트 상자 너비와 비교하여 줄 바꿈 위치를 결정할 수 있습니다.
script.py
파일 상단(import 문 뒤)에 단어 줄 바꿈 논리를 포함하는 wrap_text()
이라는 새 함수를 만듭니다.
<code class="language-bash">pip install virtualenv</code>
text
, font
, max_width
변수 뒤에 다음 코드를 추가합니다.
<code class="language-bash">cd image_annotation</code>
draw.multiline_text()
메서드를 다음 코드로 바꿉니다.
<code class="language-bash">virtualenv env</code>
n
텍스트에서 줄바꿈을 제거하고 다음 코드를 실행하세요.
<code class="language-bash">.\env\Scripts\activate</code>
실행 결과 텍스트가 여전히 텍스트 상자 높이를 초과하는 것으로 표시됩니다. 텍스트가 자동으로 텍스트 상자 너비에 맞춰 조정되지만 텍스트 상자 높이는 고정되어 텍스트가 넘치게 됩니다.
동적 텍스트 상자의 높이는 텍스트 줄 수에 따라 결정됩니다. 첫 번째 단계는 텍스트 상자의 end_y
변수를 동적 값(
<code class="language-bash">source env/bin/activate</code>
이 공식은 많은 실험을 거쳐 얻은 것이며 이 사용 사례에서 동적 텍스트 상자 높이를 얻는 가장 좋은 솔루션인 것 같습니다. wrapped_lines
목록에는 텍스트 상자에 추가할 모든 줄이 포함되어 있으므로 목록의 길이는 텍스트 상자의 총 줄 수와 같습니다.
결과는 다음과 같습니다.
사용 사례에 맞는 완벽한 솔루션을 얻으려면 총 행 수에 다양한 값을 곱해야 할 수도 있습니다.
텍스트가 텍스트 상자 가장자리에 너무 가까워 가독성과 스타일에 영향을 미칩니다. 텍스트 상자 안에 패딩을 추가하면 이 문제를 해결할 수 있습니다. script.py
파일에 새 padding
변수를 추가하고 텍스트 상자 크기를 변경합니다.
<code class="language-bash">pip install pillow</code>
이 코드는 텍스트와 텍스트 상자 가장자리 사이의 간격을 허용합니다.
포인터는 주석/라벨이 참조하는 이미지 부분을 편리하게 나타낼 수 있습니다. 포인터는 레이블 앞에 있어야 합니다. 이는 포인터가 텍스트 상자의 현재 위치에 그려지고 텍스트 상자가 오른쪽으로 이동함을 의미합니다.
따라서 텍스트 상자의 x축은 새로운 box_x
변수와 연결됩니다. 이 변경 사항은 텍스트 상자 x축을 사용하여 다른 변수에도 반영되어야 합니다. 업데이트된 코드는 다음과 같습니다.
<code class="language-bash">mkdir image_annotation</code>
위 코드에서는 ImageDraw.circle()
메소드(10은 반경)를 사용하여 지정된 지점에 포인터를 그립니다. box_x
변수는 텍스트 상자의 x축에 대한 새로운 값입니다.
다음은 script.py
파일의 전체 코드입니다.
<code class="language-bash">pip install virtualenv</code>
이미지 처리가 생각보다 항상 어려운 것은 아닙니다. 일부 이미지 처리 라이브러리는 해당 모듈로 문제를 직접 해결할 수 없지만 기존 모듈을 사용하여 사용 사례에 맞는 특정 솔루션을 구현할 수 있습니다. 맞춤형 솔루션과 특정 솔루션으로 문제를 해결할 수 있다는 것이 바로 코딩의 아름다움입니다.
이 튜토리얼에서는 Python의 Pillow 라이브러리를 사용하여 이미지에 주석을 달고 단어로 묶인 여러 줄 텍스트 상자를 추가하는 방법 등을 배웠습니다. 또한 이미지 처리에 도움이 될 수 있는 수학 공식을 작성하는 방법도 배웠습니다.
사용된 모듈에 대한 자세한 내용은 Pillow 설명서를 참조하세요.
위 내용은 Pythons 필로우 라이브러리를 사용하여 이미지의 여러 줄 텍스트 래핑 및 렌더링의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!