svg파일 png로 변환을 위한 라이브러리 설치
"SVG 이미지 NBP OCR 적용해서 Json (텍스트, 좌표)으로 기록" 하는 것을 목적으로
가장 먼저 ".svg" 파일을 ".png"으로 변환을 시도 하였습니다.
처음에는 단순히 pip으로 cairo 만 설치 하면 될 듯 했으나, 몇 가지 추가적인 작업이 필요하였습니다.
나중에 다시 시도시 .. 발생되는 문제 해결을 위해 시간이 낭비 될 듯 하여 관련 내용을 기록 하고 공유해 두고자 합니다.
코드 참조가 필요 하거나 및 설정에 문제가 있는 경우 : (https://github.com/shipjobs/HAND2TEXT/issues ) 남겨 주세요~!
- 환경
- 언어: Python 3.8.3 64bit
- 운영체제: Windows 10
- 작업 환경 : Visual Studio Code
".svg" 파일을 ".png"으로 변환을 위해
라이브러리를 아래와 같이 불러 오면, 당연히 참조 오류가 나게 됩니다.import cairo from svglib.svglib
import svg2rlg
import cairosvg
본인과 같이 NBP OCR 등 png 파일이 필요한 분들을 위해
이제 요구 되는 라이브러리 설치하여 필요한 환경을 만들도록 하겠습니다.
#-----------------------------------------------------
# 1. cairo 설치 (파이썬 버전과 cpXX 가 맞아야 함 )
# > https://frhyme.github.io/python-lib/python_a_what_is_svg/
# > https://wikidocs.net/75429 라이브러리 설치 ,
# > https://www.lfd.uci.edu/~gohlke/pythonlibs/#pycairo 설치
# 설치 후 바로 import 되지 않으면 VS code 재시작.. 1~2회 필요
#-----------------------------------------------------
# - 파일명 : pycairo-1.20.0-cp38-cp38-win_amd64.whl --> 파이썬 버전
# > python -m pip install pycairo-1.20.0-cp38-cp38-win_amd64.whl
# > easy_install .\pycairo-1.20.1-cp38-cp38-win_amd64.whl # python -m pip install 설치 실패시
# - Installing collected packages: pycairo
# - Successfully installed pycairo-1.20.0
#-----------------------------------------------------
# 2. cairosvg 설치
#-----------------------------------------------------
# - Successfully installed pycairo-1.20.0
# (base) pip3 install cairosvg
#-----------------------------------------------------
# 3. svglib 설치
# > ckarh https://boltlessengineer.tistory.com/68
#-----------------------------------------------------
# - pip3 install svglib
#-----------------------------------------------------
# 4. UniConverter2.0 설치 # Wondershare Uniconverter
#-----------------------------------------------------
# > UniConverter 설치 경로에서 "dll"하위 디렉토리를 찾음 (ex) C:\Program Files\UniConvertor-2.0rc4\dlls).
# > 이 "dll"경로를 시스템 경로에 추가
# > VSCode를 닫고 프로젝트를 다시 로드
# > 서버를 다시 실행
# > 사용 : https://videoconverter.wondershare.net/?gclid=Cj0KCQjw--GFBhDeARIsACH_kdYVKcguQgYgqQRmiYjtpQ5O0T1XK4QG7hTkPJFcztkO8jkOeCnmF2gaAqWmEALw_wcB&gclsrc=aw.ds
# - 다운로드 : https://downloads.sk1project.net/uniconvertor/2.0rc4/uniconvertor-2.0rc4-win64_headless.msi
# > 사용 Code : https://github.com/pygobject/pycairo
#-----------------------------------------------------
# 5. gtk2-runtime-2.24.33-2021-01-30-ts-win64.exe 설치
# > https://github.com/tschoonj/GTK-for-Windows-Runtime-Environment-Installer
#-----------------------------------------------------
주요 코드 : cairosvg.svg2png(.....)
전체 코드는 : https://github.com/shipjobs/HAND2TEXT 에서 참조 가능 합니다.
#Excel 로 부터 읽어온 read_data 의 URLlist
def read_svg_from_URL_save_png(self, URLlist , save_path ='C:\\Mydata\\svg2png\\'):
URLlist = URLlist
failcnt = 0 #실패 횟수 카운팅
# 한줄씩 URL 에서 svg 파일을 읽어온다.
# 웹특성.. 지연 및 진행 사항 체크를 위한 try 수행
for cnt , row_svg_URL in enumerate(URLlist['제출파일URL']):
file_save_path = save_path + str(cnt) + '.png'
try:
cairosvg.svg2png(url= row_svg_URL , write_to = file_save_path , background_color="white", dpi = 100)
file_save_path = ""
except urllib.error.HTTPError as e:
failcnt += 1
print("HTTP error No: [" , str(failcnt), "] [" , e.code , "] 5초 대기")
time.sleep(5) #import time
except urllib.error.URLError as e:
print("URL error No: [" , str(failcnt), "] [" , e.code , "] 종료" )
exit()
else:
failcnt += 1
print("Other error No: [" , str(failcnt), "] 대기")
time.sleep(5)