본문 바로가기
코딩,프로그램

Python으로 SVG 제작하기: 미니멀리스트 자연 풍경 그리기

by successmylife 2024. 12. 11.

Python으로 SVG 제작하기: 미니멀리스트 자연 풍경 그리기

SVG(Scalable Vector Graphics)는 해상도와 관계없이 선명하게 확대/축소할 수 있는 벡터 이미지를 제작할 수 있는 포맷입니다. 오늘은 Python의 xml.etree.ElementTree 모듈을 사용하여 미니멀리스트 자연 풍경 SVG 이미지를 만들어보는 방법을 소개하겠습니다. 간단한 코드를 통해 강, 나무, 해 또는 달을 표현하는 아름다운 그림을 그릴 것입니다.

 


1. 준비하기

SVG를 생성하기 위해 우리는 Python의 표준 라이브러리인 xml.etree.ElementTree를 사용할 것입니다. 이 라이브러리는 XML 파일을 쉽게 작성하고 조작할 수 있도록 도와줍니다. 아래 코드를 따라 하면 간단한 SVG 파일을 생성할 수 있습니다.


2. 코드 설명

아래는 미니멀리스트 자연 풍경 SVG를 생성하는 코드입니다.

from xml.etree.ElementTree import Element, SubElement, tostring

# SVG 구조 생성
svg = Element('svg', xmlns="http://www.w3.org/2000/svg", width="800", height="600", viewBox="0 0 800 600")

# 배경을 위한 사각형
bg = SubElement(svg, 'rect', width="800", height="600", fill="white")

# 강을 나타내는 곡선 경로
river_path = SubElement(svg, 'path', d="M200 100 C 250 200, 550 200, 600 100 L 620 110 C 570 210, 250 210, 200 100 Z",
                        fill="none", stroke="black", stroke_width="2")

# 해 또는 달을 나타내는 원
sun = SubElement(svg, 'circle', cx="700", cy="100", r="50", fill="none", stroke="black", stroke_width="2")

# 나무를 나타내는 삼각형들
tree1 = SubElement(svg, 'polygon', points="100,500 120,450 140,500", fill="none", stroke="black", stroke_width="2")
tree2 = SubElement(svg, 'polygon', points="300,450 320,400 340,450", fill="none", stroke="black", stroke_width="2")
tree3 = SubElement(svg, 'polygon', points="500,480 520,430 540,480", fill="none", stroke="black", stroke_width="2")

# SVG를 문자열로 변환
svg_string = tostring(svg).decode()

# SVG 파일로 저장
svg_file_path = '/mnt/data/nature_minimalist_river.svg'
with open(svg_file_path, 'w') as f:
    f.write(svg_string)

svg_file_path

3. 주요 코드 요소

1. SVG 태그 생성

svg = Element('svg', xmlns="http://www.w3.org/2000/svg", width="800", height="600", viewBox="0 0 800 600")

이 부분은 SVG의 전체 캔버스를 설정합니다. 너비와 높이를 각각 800x600으로 지정하였고, 뷰박스를 설정해 SVG 좌표를 정의했습니다.

2. 배경 그리기

bg = SubElement(svg, 'rect', width="800", height="600", fill="white")

흰색 배경의 사각형을 추가했습니다. 이는 캔버스 전체를 덮는 역할을 합니다.

3. 강의 경로 만들기

river_path = SubElement(svg, 'path', d="M200 100 C 250 200, 550 200, 600 100 L 620 110 C 570 210, 250 210, 200 100 Z",
                        fill="none", stroke="black", stroke_width="2")

<path> 요소를 사용하여 강을 곡선으로 그렸습니다.

  • d 속성은 강의 경로를 정의합니다.
  • 곡선의 제어점을 이용해 자연스러운 곡선을 만들었습니다.

4. 해 또는 달 추가

sun = SubElement(svg, 'circle', cx="700", cy="100", r="50", fill="none", stroke="black", stroke_width="2")

<circle> 요소를 사용해 해나 달을 표현했습니다. 중심 좌표(cx, cy)와 반지름(r)을 지정하여 간단한 원을 그렸습니다.

5. 나무 그리기

tree1 = SubElement(svg, 'polygon', points="100,500 120,450 140,500", fill="none", stroke="black", stroke_width="2")

삼각형을 <polygon> 요소로 추가하여 나무를 간단히 표현했습니다. points 속성으로 삼각형의 꼭짓점을 지정합니다.


4. 결과 확인

위 코드를 실행하면 /mnt/data/nature_minimalist_river.svg에 결과 파일이 생성됩니다. SVG 파일을 웹 브라우저에서 열어 미니멀리스트 풍경을 감상할 수 있습니다.


5. 결론

Python과 SVG를 활용하면 간단한 코드로도 아름다운 벡터 이미지를 생성할 수 있습니다. 이 프로젝트는 자연을 주제로 했지만, 다양한 요소를 추가하여 자신만의 창작물을 만들어보세요!

반응형