커맨드 라인을 통해 SVG를 어떻게 스케일링 할 수 있습니까?


17

SVG에는 크기를 결정하는 다음과 같은 속성이 있습니다.

width="146.91299pt"
height="78.079002pt"
viewBox="0 0 146.913 78.079"

400pt가로 세로 비율을 위반하지 않고 지정된 SVG를 with by by by 명령 줄로 스케일하고 싶습니다 . 이 수단은 세 가지 값은 위 올바르게 변경해야 하고 다음과 같은 SVG 코드의 모든 포인트. 캔버스 크기 만 변경하고 싶지는 않지만 전체 svg 이미지 크기를 변경하고 싶습니다. 그리고 GUI / 수동으로하고 싶지 않지만 CLI로하고 싶습니다.

명령 줄로 SVG를 자동으로 지정된 너비로 조정하려면 어떻게해야합니까?

이유 : 이미지가 너무 작 으면 Wikipedia의 미리보기가 나빠 보입니다. 참조 이미지를 예로.

Inkscape-GUI로이 작업을 수행하는 방법

  1. Shift + Ctrl + M (변환)
  2. 스케일 ( "비례 적으로 스케일"체크)
  3. 폭을 입력하십시오
  4. Shift + Ctrl + D (문서 속성)
  5. 페이지를 선택에 맞추기

이제 자동 CLI 방식 으로이 작업을 수행하려고합니다.

그건 그렇고, inkscape는 단순히 적용

<g transform="matrix(1.6838397,0,0,1.6838397,-3.3543029,-3.3542794)"
 id="surface0">

전체 이미지에.


어떤 OS를 사용하십니까?
terdon

우분투 10.04.4 LTS (업데이트 예정입니다 ...)
Martin Thoma

SVG 파일은 텍스트 파일 일뿐입니다. 당신은 파일을 편집하고 변경할 수 있습니다 width, height그리고 viewBox같은 값을 width="100%" height="100%" viewBox="0 0 400 212.58569".
martineau

나는 그것들이 단지 텍스트 파일이라는 것을 알고 있습니다. 그러나이 값만 편집하면 이미지 크기가 변경되지 않습니다. 캔버스 크기 만 변경됩니다. 직접 편집하는 것은 옵션이 아니며, 자동으로 변경하고 싶다고 명시 적으로 언급했습니다.
Martin Thoma

예, 자동화 된 방법을 요청했지만 텍스트로 변경해야 할 사항을 파악할 수 있다면 사용 가능한 여러 텍스트 편집 도구 중 하나를 사용하여 자동화 할 수 있다고 생각했습니다 (예 : 등 sed) terdon의 대답 @입니다. 발생할 수있는 한 가지 문제는 필요한 값이 동일한 작업을 수행하려는 다른 .svg 파일과 다를 수 있다는 것입니다.
martineau

답변:


15

rsvg-convertlibrsvg2-bin패키지 에서 svg의 크기를 조정할 수 있습니다.

자세한 지침 은 이 답변 을 참조하십시오 .


4
rsvg-convert -a -w 500 -f svg Vector-triangle-inequality.svg -o Result.svg일했다. 그러나 rsvg-convert는 크기 조정 이상을 수행하는 것으로 보입니다.
Martin Thoma

2
그러나 @moose는 그 답변에서 언급했듯이 rsvg-convert는 픽셀이 아닌 점을 사용합니다. 운이 좋으면 의도 한 크기를 1.25로 나눌 수 있습니다. 그러나 24px (19.2 포인트)와 같은 것을 원한다면 정수가 아닌 너비 또는 높이를 넣지 않기 때문에 운이 나쁘다 (SVG가 이것을 허용하는지 확실하지 않음).
Matthew Flaschen

@MartinThoma 그렇습니다. SVG 출력 파일은 원래 크기의 약 두 배입니다. 왜 궁금해? 독서 rsvg-convert --help는 단서를 제공하지 않습니다.
Sroo Stroobandt

1
rsvg convert는 또한 획 경로를 윤곽선 경로로 변환하는 것으로 보입니다. 당신은 (내가하지 알고)이 싶지 않을 수도 있습니다
scruss

1
이 도구는 잼이 각 요소로 변환되는 것처럼 보이며 실제로 원래 크기를 변경하지는 않습니다.
rtaft

3

하나의 이미지 만 변경하려면 텍스트 편집기 (예 : emacs)에서 이미지를 열고 너비 항목을 변경하십시오.

더 괴상한 CLI 전용 방법은 sed를 사용하십시오.

$ sed 's/width=\"146.91299pt\"/width=\"400pt\"/' orig.svg > new.svg

이미지의 크기를 조절하지 않고 너비 만 설정합니다.


아마도 더 좋은 방법 일 것입니다. 그러나 많은 이미지에서 배치 모드로 실행할 수있는 방법은 명령 줄에서 inkscape를 사용하는 것입니다.

$ inkscape -z -e out.png -w 400 -h 400 in.svg

모든 파일의 너비가 동일하다고 가정하면 다음을 수행하십시오. png로 변환해야하며 파일 이름에 공백이 없다고 가정합니다.

$ for n in $(ls *svg | sed 's/.svg//'); do inkscape -z -e $n.png -w 400 -h 400 $n.svg; done

ImageMagick 의 변환이 나의 첫 번째 선택이지만 svgs를 확장 할 때 깨지는 것 같습니다.


7
잉크 스케이프 명령으로 PNG가 생성되지만 SVG가 필요합니다. svg 명령은 캔버스 크기 만 변경하지만 이미지 크기는 변경하지 않습니다. 단순히 텍스트 편집기를 사용할 수 없으며 위에서 언급 한 값만 변경할 수 있습니다. 질문을 명확히해야한다고 생각합니다.
마틴 토마

또한 동일한 요소로 이미지의 크기를 조정하려면 태그 : ... "> <g transform ="scale (2) "> <path .... /> </ g> </ svg>를 추가해야합니다.
Stofke
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.