2021. 4. 3. 00:29ㆍ카테고리 없음
패스트캠퍼스 6개월 치 업무를 하루 만에 끝내는 업무자동화 올인원 패키지 Online
- 사원증 디자인 1천개 한번에 모두 만들기 2(코드)
- 수료증 디자인 1천개 한번에 만들기1 (날짜계산)
- 수료증 디자인 1천개 한번에 만들기2 (코드)
사원증 디자인 코드
try:
template = Image.open(template_filename)
except:
template = Image.new("RGBA", (800, 1268), 'white')
트라이를 통해 오픈 이미지 ttemplate_filename에 오류가 발생했을때 imgae new를 실행시킨다
Xdim, Ydim = template.size
언패킹을 사용해 템플릿 사이즈에 x딤과 y딤을 넣어준다.
logo = Image.open(logo_filename)
logo_x, logo_y = logo.size
로고 파일을 불러온고 로고 사이즈를 확인한다.
photos = os.listdir(member_photo)
PHOTOS = []
for el in photos:
if el.strip().split(".")[-1] not in "PNG png JPG jpg BMP bmp JPEG jpeg":
continue
PHOTOS.append(el)
증명 사진 리스트를 불러오고 파일명에 걸려준다.
COUNT = 0
사원증이 만들어 줄때마다 하나씩 올라간다.
new_logo_x = int(Xdim * 0.2)
로고에 크기를 가로기준으로 20% 조절한다.
new_logo_y = int(logo_y * (new_logo_x / logo_x))
resized_logo = logo.resize((new_logo_x, new_logo_y))
로고 사이즈를 비례해서 변경해준다.
logo.close()
원본이 훼손되는걸 막기위해 닫아준다.
template.paste(resized_logo, (int(Xdim * 0.1), int(Ydim * 0.95 - new_logo_y)))
페이스트를 활용해 로고와 여백을 추가해준다.
resized_logo.close()
로고 닫아준다
nameFont = ImageFont.truetype("font/gulim.ttc", 70)
이름에 사용할 글자크기 폰트
smallFont = ImageFont.truetype("font/gulim.ttc", 40)
url 글자크기와 폰트
infoFont = ImageFont.truetype("font/gulim.ttc", 50)
나머지 사용할 폰트와 글자
x_offset = int(Xdim * 0.95 - smallFont.getsize(url)[0])
좌우 여백은 5% 씩으로 오른쪽 기준으로 띄워준다.
ImageDraw.Draw(template).text(xy=(x_offset, y_offset), text=url, font=smallFont, fill="black")
드로우를 이용해 글자를 넣어준다.
for line in IDs:
splt = line.strip().split(", ")
name = splt[0]
division = splt[3]
csv 파일에 정보를 불러온다
스플릿을 사용해 , 기준으로 분리해주고 스플렛을 통해 0번째 정보인 이름과 세번째 정보인 디바이스를 변수에 넣어준다
idcard = template.copy()
템플릿을 복제해서 겹치지 않게 사용한다.
photo_for_id = Image.open(member_photo + "/" + PHOTOS[COUNT])
카운트 변수를 사용해서 순차적으로 사진을 불러온다.
photo_for_id = photo_for_id.resize((int(Xdim/2), int(Xdim/2 * (4/3))))
사원증에 사진을 절반으로 조절하고
idcard.paste(photo_for_id, (int(Xdim/4), int(Ydim/2 - Xdim/2*(4/3)/2)))
사원증에 사진을 정중앙에 위치시킨다.
temp_name = ""
for el in name:
temp_name += el + " "
name = temp_name[:-1]
이름 사이사이에 공백을 넣어주고 마지막 줄에 공백을 슬라이싱으로 없애준다.
idcard.save(out_dir + "/" + PHOTOS[COUNT])
세이브 함수를 사용해 저장해준다.
idcard.close()
닫아준다
COUNT += 1
template.close()
템플릿을 닫아준다.
수료증 디자인 만들기
목표
이미지 파일 불러오기 (for)
이미지 인적사항 삽입
이미지 위에 날짜 수여번호 삽입 (imageDraw)
파이썬 오늘 날짜 계산하기
import datetime
In [3]: datetime.datetime.today()
Out[3]: datetime.datetime(2021, 4, 2, 23, 50, 29, 149324)
년, 월, 일 , 시, 분, 초
In [4]: datetime.datetime.today().date()
Out[4]: datetime.date(2021, 4, 2)
In [6]: str(datetime.datetime.today().date())
Out[6]: '2021-04-02'
In [10]: today + datetime.timedelta(days=5)
Out[10]: datetime.datetime(2021, 4, 7, 23, 53, 0, 43641)
타임 델타를 사용하면 미래에 시간을 구할 수 있다.
코드
date = str(datetime.datetime.today().date())
date = date.split("-")
DATE = date[0] + "년 " + date[1] + "월 " + date[2] + "일"
데이타임을 사용해서 몇월일을 인덱싱을 통해 나눈다
suyeo = "수여번호 : %d-%06d" % (int(DATE[:4]), COUNT)
%d는 데이터 날짜값 (년도) 가 들어가고 %06d 6자리 중 카운터 값을 뒤쪽에 위치하고 빈자리는 0 으로 채워준다.
ex)
import datetime
DATE = "2020년 11월 20일"
COUNT = 12
"수여번호 : %d-%06d" % (int(DATE[:4]), COUNT)
Out[12]: '수여번호 : 2020-000012'
DATE[:4]
Out[14]: '2020'