파이썬/파이썬일반

python(vscode)/폴더내 이미지 전체 ppt에 이미지 삽입하기/폴더 이름 정렬해서 가져오기/natsort

gongdol 2023. 11. 12. 10:43
300x250

https://gongdolgongdol.tistory.com/200

 

python(vscode)/ppt 다루기/ppt에 이미지 삽입하기/ppt text 삽입하기

1. 코드작성 1) 스크린샷 폴더의 이미지를 가지고 ppt를 만들어보자. 2) 시작전에 python-pptx 모듈을 깔아줘야한다. "pip install python-pptx" 를 입력해 설치한다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 2

gongdolgongdol.tistory.com

기본작성은 앞서 정리한 글을 참고하다.

 

1. 코드작성하기

   1) 이미지를 4개씩 배치하면서 줄을 바꿔가며 나열한다. 4줄씩 계속 정리해 나간다. 

   2) glob.glob(r"C:\Users\Pictures\Screenshots\*png") 코드는 경로내 png 파일 디렉토리를 가져오는데, 순서가 뒤죽박죽이다.

    -> 파일명 1,2,3,11,12 이 있으면, 맨앞의 1먼저 가져오면서, 1,11,12,2,3 이런식으로 가져온다. 

    -> 그래서 pip install natsort를 설치하여 모듈을 사용한다. 

    -> natsort.natsorted(glob.glob(r"C:\Users\Pictures\Screenshots\*png"))

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
from pptx import Presentation
from pptx.util import Cm, Pt
from pptx.util import Inches
import glob
import natsort
 
# 프레젠테이션
prs = Presentation()
 
# 슬라이드 빈화면
layout = prs.slide_layouts[6]
 
# 슬라이드
prs.slide_width = Inches(16)
prs.slide_height = Inches(9)
slide = prs.slides.add_slide(layout)
 
# 제목의 왼쪽, 높이 설정
left = Cm(1)
top = Cm(1)
height = Cm(1)
width = Inches(15)
 
#  텍스트 만들기
txBox = slide.shapes.add_textbox(left, top, width, height)
tf = txBox.text_frame
= tf.add_paragraph()
p.text = "image pptx save"
p.font.bold = True
p.font.size = Pt(30)
 
# 시작 이미지 (첫번째이미지) 왼쪽, 높이 설정
left = Cm(0.1)
top = Cm(1)
height = Cm(8)
 
# 폴더내 이미지 도형 추가
for inde, file1 in enumerate(natsort.natsorted(glob.glob(r"C:\Users\Pictures\Screenshots\*png"))):
    print(inde, file1) # 이미지파일 경로를 출력한다.
    pic = slide.shapes.add_picture(file1, left + (Cm(10)*(inde%4)), top + (Cm(8)*(inde//4)), height=height) # 경로입력, 위치 입력, 높이 입력
    # 이미지간 좌우간격은 10cm, 높이 간격은 8cm 로 설정한다. 이미지 높이는 8cm고정. 
 
# 프레젠테이션 파일 저장
prs.save(r"C:\Users\Pictures\Screenshots\d1.pptx")
cs

 

 

 

2. 코드 다르게 작성하기

  1) 이미지 파일명을 숫자로 해놓고, 숫자 순서대로 이미지를 정리하자. 

  2) 예를 들면 1,2,3,5 이미지가 있으면 첫줄에는 1,2,3 이미지가 정리되고, 두번째줄에는 5번 이미지가 정리된다. 

  3) 바뀐 부분은 39번째출의  for문만 수정했다. 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
from pptx import Presentation
from pptx.util import Cm, Pt
from pptx.util import Inches
import glob
import natsort
import os
 
# 프레젠테이션
prs = Presentation()
 
# 슬라이드 빈화면
layout = prs.slide_layouts[6]
 
# 슬라이드
prs.slide_width = Inches(16)
prs.slide_height = Inches(9)
slide = prs.slides.add_slide(layout)
 
# 제목의 왼쪽, 높이 설정
left = Cm(1)
top = Cm(1)
height = Cm(1)
width = Inches(15)
 
#  텍스트 만들기
txBox = slide.shapes.add_textbox(left, top, width, height)
tf = txBox.text_frame
= tf.add_paragraph()
p.text = "image pptx save"
p.font.bold = True
p.font.size = Pt(30)
 
# 시작 이미지 (첫번째이미지) 왼쪽, 높이 설정
left = Cm(0.1)
top = Cm(1)
height = Cm(8)
 
# 폴더내 이미지 도형 추가
for inde11, file1 in enumerate(natsort.natsorted(glob.glob(r"C:\Users\Pictures\Screenshots\*png"))):
    # print(inde, file1) # 이미지파일 경로를 출력한다.
    inde = int(os.path.splitext(os.path.basename(file1))[0]) - 1
    pic = slide.shapes.add_picture(file1, left + (Cm(10)*(inde%4)), top + (Cm(8)*(inde//4)), height=height) # 경로입력, 위치 입력, 높이 입력
    # 이미지간 좌우간격은 10cm, 높이 간격은 8cm 로 설정한다. 이미지 높이는 8cm고정. 
 
# 프레젠테이션 파일 저장
prs.save(r"C:\Users\Pictures\Screenshots\d1.pptx")
cs
300x250