채우기 색상, 획 색상 및 획 너비를 수정할 수있는 svg 기호를 만드는 방법은 무엇입니까?


38

Inkscape를 사용하여 Qgis에 대한 일부 svg 기호를 만들고 싶습니다. 해당 기호에는 질문에 설명 된 속성이 있어야합니다. 지난 이틀 동안, 나는 Sourcepole의 지시에 따라 실험을 해 왔으며 일부 기호는 성공하지 않고 원하는 속성을 가진 qgi와 함께 제공되었습니다.

마지막으로 가장 간단한 형태의 심볼을 실험했습니다. Inkscape에 원만 포함하는 svg를 만들고 수정하려고했습니다.

원본 파일 ( circle.svg )에는 다음 줄이 있습니다.

<path
   sodipodi:type="arc"
   style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.01988637;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"

나는 그것을 다음과 같이 수정했다.

<path
   sodipodi:type="arc"
   style="fill:param(fill) #ffffff;fill-opacity:1;stroke:param(outline) #000000;stroke-width:param(stroke-width) 1.01988637;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"

circle_modified.svg로 저장하고 포인트 심볼로 선택했지만 Qgis는 동시에 세 매개 변수를 모두 변경할 수 없습니다.

내가 뭘 잘못했거나 다르게해야합니까?

내 시스템 : Ubuntu 12.04 64 비트의 Qgis 1.8.0, Inkscape 0.48, Gedit 3.4.1 텍스트 편집기.

답변:


44

QGIS에서 채우기 색상 , 획 색상획 너비 를 수정할 수있는 SVG 기호를 만들려면 path 요소 의 style 속성을 다음 3 가지 속성으로 바꿔야 합니다.

  • fill = "param (fill) #FFF"
  • stroke = "param (outline) # 000"
  • stroke-width = "param (outline-width) 1"

InkScape를 사용하는 경우 새 SVG 파일을 작성한 후 파일을 편집하고 시작하는 전체 줄을 스타일로 바꿉니다.

style="fill:#00a000;fill-opacity:1;stroke:#000000;stroke-width:1;(...)"

다음 줄로 :

fill="param(fill) #FFF" stroke="param(outline) #000" stroke-width="param(outline-width) 1"

QGIS에서 그 줄을 어디에 추가합니까?
newGIS

2
.svg 파일을 텍스트 편집기로 연 다음이 코드 줄을 추가 할 수 있습니다.
Diogo Caribé

2
답변 해주셔서 감사합니다! 나는 밖으로 변경했다 class="st3"하지, style="fill:#00a...함께 fill="param(fill) #FFF" stroke="param(outline) #000" stroke-width="param(outline-width) 1"나를 위해 작동하게하기 위해. (Illustrator에서 svg를 만들었습니다.)
Henrik

4

어제 SVG 기호를 추가하는 방법을 찾은 이후 로이 작업을 수행하고 싶었지만 모두 검은 색이었습니다. jgrocha works의 답변-투표하고 싶었지만 방금 GIS 포럼에 가입 했으므로 먼저 평판을 얻어야합니다!

나는 또한 대답을 확인하는이 페이지를 발견했다 : 수정 가능한 색을 가진 QGIS의 SVG 기호

마커의 색상을 변경하려면 채우기 색상에 자리 표시 자 'param (fill)', 외곽선 색상에 'param (outline)', 획 너비에 'param (outline-width)'를 추가해야합니다. 이 자리 표시 자 뒤에 선택적으로 기본값을 지정할 수 있습니다.

<svg width="100%" height="100%">
  <rect fill="param(fill) #ff0000" stroke="param(outline) #00ff00" stroke-width="param(stroke-width) 10" width="100" height="100">
  </rect>
</svg>`

감사!


QGIS에서 그 줄을 어디에 추가합니까?
newGIS

4

SVG의 기본 사항에 대한 간단한 답변을 제공하여 소프트웨어 관련 사항에 대한 여기에 제공된 세부 정보를 제공하는 것이 좋습니다.

SVG 파일은 텍스트 파일 일뿐입니다. 파일 끝은 .svg이지만 끝이 .txt 인 파일과 같은 텍스트 편집기에서 열 수 있습니다.

간단한 svg 파일은 다음과 같습니다.

<svg width="580" height="400" xmlns="http://www.w3.org/2000/svg">
<!-- This is a comment -->

<g id="group1">
<title>My group</title>
<rect id="rectangle1" height="29" width="27" y="50" x="57" stroke-width="1.5" stroke="#000" fill="#ff0"/>
<ellipse ry="17" rx="16" id="circle1" cy="64" cx="113.5" stroke-width="1.5" stroke="#999" fill="#aaa"/>
<path id="path1" d="m56.5,97l51.5,1l5,25l-29,-5l-27.5,-21z" stroke-width="1.5" stroke="#f00" fill="#fff"/>
</g>
</svg>

여기서 색상이 매개 변수에 의해 정의됨을 알 수 있습니다 (점은 0-9 또는 AF 사이의 문자로 대체 됨).

stroke=#...
fill=#...

그리고 스트로크 너비는

stroke-width="..."

SVG에서 선택한 모든 정의 된 값을 대체하기 위해 텍스트 편집기를 사용하여 다음을 추가 할 수 있습니다. QGIS에서 값을 설정할 수 있습니다. QGIS는 'param (fill)'값과 다른 'param (...)'값을 QGIS 자체에서 설정 한 값으로 이해합니다.

채우기 색상 : fill="param(fill) #FFF"

개요 / 선 색상 : stroke="param(outline) #000"

윤곽선 / 라인 너비 : stroke-width="param(outline-width) 1"

불투명도 채우기 : fill-opacity="param(fill-opacity)"

개요 / 라인 불투명도 : stroke-opacity="param(outline-opacity)"

약간 이상한 위치에서 'param (...)'값을 사용하는 것을 막을 수있는 것은 없습니다. 예를 들어 'param (fill-opacity)'값을 사용하여 1 비트의 채우기 색을 정의 할 수 있습니다. SVG 파일이지만 SVG의 다른 비트에서는 획 / 선 색상입니다.

QGIS composer 또는 스타일 심볼 대화에서 SVG 색상의 설정은 매우 분명합니다. 채우기 및 획 / 선 불투명도는 색상 설정의 일부로 설정됩니다. 스트로크 / 라인 너비 설정이 분명합니다.

마지막으로 두 점

먼저 SVG에서는 색상을 다음과 같이 속성 모음으로 정의하는 것이 유효합니다.

style="fill:none;fill-opacity:1;stroke:#000000;"

여기에 설명 된대로 매개 변수를 포함하면 제대로 작동하지 않는 것 같습니다.

둘째, Illustrator 또는 Inkscape와 같은 소프트웨어를 사용하는 경우이 소프트웨어를 사용하여 SVG 텍스트에 많은 추가 속성을 추가 할 수 있습니다. 당신이하고있는 일을 알고 위의 SVG의 기본 사항을 이해하면이 추가 텍스트를 제거하면 삶이 더 간단해질 수 있습니다. 특히 색상은 항목 별이 아니라 스타일의 정의를 통해 설정됩니다.


3

나도 같은 문제가 있었지만 몇 번의 시도 끝에 마침내 효과가있었습니다. 도움이되기를 희망하는 절차를 여기에 작성하고 있습니다. inkscape에서 간단한 나선형을 만들어 svg로 저장했습니다. 그런 다음 텍스트 편집기 (예 : Notepad ++)에서 열었고 svg 코드에서 "style"항목이 두 번 발생했습니다. 이 덩어리에서 먼저 :

<linearGradient
   id="linearGradient6172"
   osb:paint="solid">
  <stop
     style="stop-color:#000000;stop-opacity:1;"
     offset="0"
     id="stop6174" />
</linearGradient>

그리고 여기 :

<path
   sodipodi:type="spiral"
   style="fill:none;fill-rule:nonzero;opacity:1;fill-opacity:1;stroke:#000000;stroke-opacity:1;stroke-width:35;stroke-miterlimit:4;stroke-dasharray:none;stroke-linecap:round;stroke-linejoin:round"
   id="path4686" />

qgis에서 편집 가능한 svg 나선형을 갖기 위해 코드가 작동하도록하려면 첫 번째 코드 청크에서 첫 번째 "스타일"항목을 완전히 제거했습니다.

<linearGradient
   id="linearGradient6172"
   osb:paint="solid">
</linearGradient>

그리고 다음과 같이 두 번째 코드 청크에서 두 번째 "스타일"항목을 대체하십시오.

<path
   sodipodi:type="spiral"
   fill="param(fill) #000" stroke="param(outline) #FFF" stroke-  width="param(outline-width) 1"
   id="path4686" />

"# 000"과 "#FFF"는 채우기와 외곽선의 두 가지 기본 색상이며 "1"은 다르게 지정되지 않은 경우 기본 외곽선 너비입니다. 이러한 변경 사항을 저장 한 후 svg를 QGis에 의해 지정된 올바른 경로에 저장할 수 있습니다 (버전에 따라 설정-> 옵션-> SVG 경로에 있음). 마지막으로 새 svg 객체가 다른 기본 객체 사이에 나타나고 편집 가능합니다.

그것이 도움이되기를 바랍니다.


2

나는 그것을 작동시키는 데 시간이 걸리기 때문에 이것을 확장하려고합니다. 심볼을 만들고 Inkscape SVG로 저장하고 텍스트 편집기에서 엽니 다. 하단 코드 블록에는 다음이 표시됩니다. style = "fill : # 00a000; fill-opacity : 1; stroke : # 000000; stroke-width : 1; (...)"이 줄을 다음과 같이 바꾸십시오. fill = "param (fill) #FFF"stroke = "param (outline) # 000"stroke-width = "param (outline-width) 1"SVG 파일에서 스타일 라인은 svg 및 그 줄을 바꾸는 것은 나에게 효과적이지 않았다. 그러나 Inkscape SVG의 맨 아래에서 그것을하는 것이 효과가있었습니다. 내 솔루션과 여기에 최적화 및 일반 SVG 형식의 지침을 시도했지만 작동하지 않았으므로 도움이되기를 바랍니다. 잉크 스케이프 0.48, QGIS 2.12.0, 노트 패드 ++


2

정확한 값을 사용하면 문제가되는 것 같습니다. 옵션을 열 때마다 색상 또는 획의 개별 값이 SVG의 값으로 재설정됩니다. 고급 옵션에서 값을 설정하면이 문제를 해결할 수 있습니다. 내 테스트에 따르면 SVG에서 fill="param(fill)"대신 사용 하는 것이 좋습니다 fill="param(fill) #FFF".

또 다른 흥미로운 해결 방법 : 전경색과 배경색이있는 SVG가있는 경우 획 색상을 채우기 배경색으로 사용할 수 있습니다. 그러면 전체 SVG에 대해 별도의 윤곽선 색을 사용할 수 없습니다.


1

모두 감사합니다. 여기에 몇 가지 유용한 팁이 있으며 올바른 방향으로 나를 지적했지만 아무도 내 특정 문제를 해결하지 못했기 때문에 내가 알아 낸 것을 냄비에 추가 할 것입니다. 모든 경우에 대해 하나의 정답이있는 것 같지 않으므로 먼저 결과를 가능한 빨리 테스트하기위한 제안을하고 싶습니다.

빠른 편집 테스트

  • 모든 svg 아이콘을 QGIS svg 폴더 밖으로 임시로 이동하십시오.
  • 작업하려는 svg 파일의 사본을 읽기 전용으로 작성하여 덮어 쓰지 말고 편집 가능한 버전의 파일을 QGIS svg 폴더에 넣으십시오.
  • QGIS를 열고 작업 할 포인트 레이어를로드 한 후 레이어 속성을 열고 "SVG 마커"를 선택하십시오.
  • 또한 svg 파일을 마우스 오른쪽 버튼으로 클릭하고 기본 "Open with"프로그램을 메모장으로 임시 설정하여 두 번 클릭하여 메모장에서 편집 할 수 있습니다.

이 설정을 통해 QGIS가 편집 내용에 어떻게 반응하는지 즉시 확인할 수 있습니다. svg 파일을 메모장에서 열어두고 속성 창을 QGIS에서 열어 둡니다. 편집 결과를 테스트하려면 Ctrl + S를 눌러 메모장에 저장하고 QGIS로 전환하십시오. svg를 다시로드하려면 심볼 레이어 유형을 다른 것으로 변경 한 다음 다시 SVG 마커로 변경하십시오. 거기에도 하나만 있으므로 찾기에 어려움이 없습니다. 이처럼 수십 가지 편집 내용을 매우 빠르게 테스트했습니다. 편집 후 svg를 소스 양식으로 다시 가져 오는 데 문제가 있으면 삭제하고 다른 사본을 만들 수 있습니다.

SVG 아이콘을 편집 가능하게 만들기

내가 가지고있는 문제는 내가 작업하고있는 특정 아이콘에 "스타일"또는 "채우기"라는 단어가 없으므로 매개 변수 줄을 어디에 둘지 알아내는 데 어려움이 있다는 것입니다. Martina가 설명 한 Inkscape 트릭은이 문제를 해결했지만 할 일이 많으며 Inkscape에서 각각 열고 저장하고 싶지 않아 시행 착오를 시도하기로 결정했습니다. 코드를 보면 나는 버전 정보와 메타 데이터가 정상에이고 형상의 지시에 의해 시작 부분에 묶여 있었다 따옴표 안에 아래에있었습니다 <g><path d=(일부가 <g><g><path d=)와에 의해 마지막에 /></g></svg>. 조금 실험 후 나는 사이의 매개 변수 라인을 넣는 것을 생각 path하고d=작동했지만 선택기 창에서 아이콘이 보이지 않고 맨 위에있는 미리보기 창의 아이콘이 완전히 검은 색으로 채워졌습니다. 보이지 않는 아이콘 문제는 버그 인 것 같습니다. 아래에 설명 할 불투명도 매개 변수를 추가하여 수정했습니다. 검은 색 채우기는 아이콘이 4mm에 불과하고 윤곽선 만 채워 졌기 때문입니다. 이 문제를 해결하기 위해 아이콘 크기를 최대 10mm (QGIS에서)로 높이고 외곽선을 0.1 (메모장에서)로 낮추었습니다.

요약

아이콘에 "스타일"또는 "채우기"라는 단어가 없는데 모양 명령 바로 앞에이 줄 <g><path d=(또는 <g><g><path d=)이있는 경우 위의 줄을로 바꾸어 편집 매개 변수를 추가 할 수 있습니다<g><path fill="param(fill) #FFF" stroke="param(outline) #000" stroke-width="param(outline-width) 1" d=

테두리가 너무 두꺼운 경우 마지막 숫자를 분수로 변경하여 축소 할 수 있습니다. 예 : <g><path fill="param(fill) #FFF" stroke="param(outline) #000" stroke-width="param(outline-width) 0.5" d=

아이콘을 반투명하게하려면 위의 줄을이 줄로 변경하면 <g><path style="opacity:0.5;fill:param(fill) #FFF" stroke="param(outline) #000" stroke-width="param(outline-width) 1" d=됩니다. 불투명도 값은 1 (완전 불투명)에서 0 (완전 투명)까지 가능하며 추가 정밀도 (예 : 0.01)를 위해 100 분의 1 또는 1 분의 1을 사용할 수 있습니다. 동일한 규칙이 경계 두께에 적용됩니다.

편집 할 파일이 많으면 StackExchange에서 배치 파일을 찾아 검색 및 교체 프로세스를 자동화 할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.