명령 줄에서 svg 도면을 캔버스에 맞추는 방법은 무엇입니까?


13

.svg명령 행에서 파일 자르기 는 간단합니다. $ inkscape --verb=FitCanvasToDrawing --verb=FileSave --verb=FileClose *.svg

나는 그 반대를해야합니다. 도면을 64 x 64포인트 캔버스 (모든 .svg파일에 이미 설정되어 있음 ) 에 맞추고 싶습니다 . 불행히도 Inkscape는 FitDrawingToCanvas명령을 제공하지 않습니다 . 또한, 피팅은 도면의 종횡비를 유지해야합니다.

중요한 경우 : 우분투 raring을 사용하고 있습니다.


1
캔버스를 그림에 맞춘 후 크기를 조정하면 작업이 수행됩니까? graphicdesign.stackexchange.com/questions/6574/…
Takkat

두 가지 질문 : (1) 캔버스 크기는 각 경우에 이미 설정되어 있지만 그림은 캔버스보다 큽니다. 또는 svg 도면을 다른 svg 문서에 삽입하고 있습니까?; (2) "종횡비 유지": 질문에 언급 된 64pt 정사각형 캔버스에 비추어 혼란 스럽지만 정사각형이 아닌 재료를 처리하는 방법에 대한 자동 결정 프로세스가 제안되어 있습니까? 예를 들어 높이가 ... 모든 경우에 64pt해야한다
호 레이시오

@Takkat : 힌트 주셔서 감사합니다. 워크 플로는 작동하지만 종횡비가 손상됩니다. 그 ...에 대한 해결책을 찾을 것입니다
스테판 Endrullis

@horatio : (1) 그림이 캔버스보다 작고 예, 둘 다 같은 파일에 있습니다. (2) max (drawingWidth, drawingHeight) = 64pt 지점으로 그림의 크기를 조정하고 싶습니다.
Stefan Endrullis

@Takkat : rsvg-convert는 --keep-aspect-ratio :)
Stefan Endrullis

답변:


2

이 질문 에서이 작업을 수행하는 방법을 찾았습니다. 잉크 스케이프-명령 행 / 터미널을 통해 페이지 중심으로 그리기

편집 할 이미지로 "foo.svg"사용 :

inkscape --verb=EditSelectAll --verb=AlignHorizontalCenter --verb=AlignVerticalCenter --verb=FileSave --verb=FileQuit foo.svg

현재 디렉토리에서 모든 svg 이미지를 편집하려면

inkscape --verb=EditSelectAll --verb=AlignHorizontalCenter --verb=AlignVerticalCenter --verb=FileSave --verb=FileClose *.svg

그러나이 두 번째 명령은 많은 창을 열어 너무 많은 이미지를 편집하면 컴퓨터가 충돌합니다. 들어 리눅스 만 이 명령은 잘 작동합니다 :

for img in $(ls *.svg) ; do inkscape --verb=EditSelectAll --verb=AlignHorizontalCenter --verb=AlignVerticalCenter --verb=FileSave --verb=FileQuit $img ; done

위의 명령에서 파일 중 하나가 심볼릭 링크 인 경우 Inkscape는 해당 심볼릭 링크가 가리키는 대상 파일을 편집합니다. Inkscape에서이를 수행하지 않으려면 다음 명령을 사용하여 심볼릭 링크를 필터링 할 수 있습니다.

for img in $(ls *.svg) ; do if [[ $(readlink $img) == "" ]] ; then inkscape --verb=EditSelectAll --verb=AlignHorizontalCenter --verb=AlignVerticalCenter --verb=FileSave --verb=FileQuit $img ; fi ; done


내가 그것을하고있는 동안, 나는 이것을 위해 만든 bash 스크립트를 게시 할 수도 있습니다.

#!/bin/bash
# inkscape-center <file-or-directory>...

_analyse() {
    if [ -d "${1}" ] ; then
        _centerAll "${1}" ;
    else
        _center "${1}" ;
    fi
}

_centerAll() {
    cd "${1}" ;
    for img in $(ls "*.svg") ; do
        _filterSyms "${img}" ;
    done
}

_filterSyms() {
    if [[ $(readlink "${1}") == "" ]] ; then
        _center "${1}"
    fi
}

_center() {
    inkscape --verb=EditSelectAll --verb=AlignHorizontalCenter --verb=AlignVerticalCenter --verb=FileSave --verb=FileQuit "${1}"
}

for arg ; do
    _analyse "${arg}" ;
done

나는 그것을 불렀고 다음 inkscape-center과 같이 실행했다.

inkscape-center <file-or-directory>

원하는만큼의 인수가 필요하므로 다음과 같이 할 수 있습니다.

inkscape-center 1st.svg 2nd.svg 3rd.svg 4th.svg

주의 – 파일 대신 디렉토리를 지정하면 해당 디렉토리의 모든 svg 파일이 편집됩니다.


1

viewBox 를 사용 하여 원하는 것을 달성 할 수 있습니다 . Inkscape 에서이 작업을 수행 할 수있는 방법이 있는지는 모르겠지만 SVG는 표준 형식이므로 원하는 작업을 수행하는 다른 도구가있을 수 있습니다. "SVG 명령 줄 도구"에 대한 빠른 검색을 포함, 몇 가지 흥미로운 결과를 보여 이 하나의 CSS 아이콘을 생성합니다.

두 번째 옵션은 원하는 언어로 자신 만의 도구를 작성하는 것입니다. 기본 요점은 viewBox를 문서의 높이로 설정 한 다음 원하는 문서의 너비와 높이를 설정하는 것입니다. 마지막으로 preserveAspectRatio 속성을 설정하십시오.

위에서 설명한 수정 내용은 원래 744x1052 인 문서에서 다음과 같습니다.

<svg
   width="64"
   height="64"
   viewBox="0 0 744 1052"
    preserveAspectRatio="xMinYMin slice"
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.