(Environment) (cairo) - (1) svg파일 png로 변환을 위한 요구 라이브러리 설치

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(urlrow_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)