python-pptx로 이미지 센터링

개요



python-pptx와 Pillow (PIL)를 사용하여 PowerPoint의 중앙에 이미지를 삽입 (센터링) 할 수 있도록했습니다.

배경



python-pptx은 파이썬에서 PowerPoint를 만들 수있는 라이브러리입니다.
매우 편리합니다만, 슬라이드에 화상 삽입할 때의 삽입 위치는, 화상 좌상의 좌표로 밖에 지정 밖에 할 수 없습니다.
센터링을 하고 싶었지만 그런 옵션이 python-pptx에 있는지 확실하지 않았습니다.
그래서 Pillow라는 라이브러리로 이미지를 별도로 읽어 이미지 사이즈를 취득하는 것으로, 센터링을 실현했습니다.

환경



macOS Catalina 버전 10.15.3
python3.7.0

설치


pip install python-pptx
pip install Pillow

코드


from pptx import Presentation
from pptx.util import Inches
from PIL import Image

IMG_PATH = "/path/to/img_file"
IMG_DISPLAY_HEIGHT = Inches(3) #スライドに表示するときの画像の高さ。とりあえず3インチとしておく。
SLIDE_OUTPUT_PATH = "test.pptx" #スライドの出力先パス

#スライドオブジェクトの定義
prs = Presentation() 

#スライドサイズを取得
SLIDE_WIDTH = prs.slide_width #
SLIDE_HEIGHT = prs.slide_height

#白紙のスライドを追加
blank_slide_layout = prs.slide_layouts[6] 
slide = prs.slides.add_slide(blank_slide_layout)

#画像サイズを取得してアスペクト比を得る
im = Image.open(IMG_PATH)
im_width, im_height = im.size
aspect_ratio = im_width/im_height

#表示された画像のサイズを計算
img_display_height = IMG_DISPLAY_HEIGHT
img_display_width = aspect_ratio*img_display_height

#センタリングする場合の画像の左上座標を計算
left = ( SLIDE_WIDTH - img_display_width ) / 2
top = ( SLIDE_HEIGHT - img_display_height ) / 2

#画像をスライドに追加
slide.shapes.add_picture(IMG_PATH, left, top, height = IMG_DISPLAY_HEIGHT)

#スライドを出力
prs.save(SLIDE_OUTPUT_PATH)

이상의 코드에 의해 아래와 같은, 그림이 센터링 된 파워포 슬라이드를 만들 수 있습니다. (테스트 화상은 필자 촬영)


Pillow 부분은 원래 이미지의 종횡비를 계산할 수 있으면 무엇이든 좋기 때문에, 예를 들면 opencv에서도 대용 가능합니다.
문서에 따르면 python-pptx에는 size의 속성을 가진 Image라는 클래스가 있었고, 거기에서 size를 얻을 수도 있을 것 같지만 구체적인 방법을 알지 못했습니다.
이미지 사이즈 취득을 위해서만 Pillow를 사용하는 것은 스마트하지 않기 때문에, 만약 python-pptx 단체로의 방법을 아는 분이 있으면 교수 받을 수 있으면 기쁩니다.

본 기사는 이상입니다.
여기까지 읽어 주셔서 감사합니다.

좋은 웹페이지 즐겨찾기