Değiştirilebilir dolgu rengine, kontur rengine ve kontur genişliğine sahip svg sembolleri nasıl oluşturulur?


38

Ingcape kullanarak Qgis için bazı svg sembolleri oluşturmak istiyorum, bu sembollerin soruda açıklanan niteliklere sahip olması gerekir. Son iki gündür Sourcepole'un talimatına göre denemeler yaptım ve başarı ile istenilen niteliklere sahip olmayan qgis'lerle gelen bazı sembollerin taklit edildiğini taklit ediyorum.

Sonunda en basit sembol biçimini denedim: Inkscape'de sadece bir daire içeren bir svg yarattım ve değiştirmeye çalıştım.

Orijinal dosya ( circle.svg ) bu çizgiye sahiptir:

<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"

Ben içine değiştirdim:

<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 olarak kaydedildi ve nokta sembolü olarak seçildi, ancak Qgis aynı anda üç parametreyi de değiştiremedi.

Neyi yanlış yaptım ya da farklı mı yapmalıyım?

Sistemim: Qgis 1.8.0 Ubuntu 12.04 64 bit, Inkscape 0.48, Gedit 3.4.1 metin editörü.

Yanıtlar:


44

QGIS'de değiştirilebilir dolgu rengine , kontur rengine ve kontur genişliğine sahip SVG sembolleri oluşturmak için , stil özelliğini path öğesinden bu 3 nitelikle değiştirmelisiniz:

  • fill = "param (fill) #FFF"
  • İnme = "param (anahat) # 000"
  • vuruş genişliği = "param (anahat genişliği) 1"

InkScape kullanıyorsanız, yeni SVG dosyasını yazdıktan sonra dosyayı düzenleyin ve satırın başındaki bütün stilleri değiştirin:

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

şu satırla:

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

QGIS’de bu satırları nereye ekleyebilirim?
newGIS

2
.Svg dosyasını bir metin editörüne açtıktan sonra bu kod satırını ona ekleyebilirsiniz.
Diogo Caribe

2
Cevap için teşekkürler! Ben dışarı değiştirmek zorunda class="st3"değil, style="fill:#00a...birlikte fill="param(fill) #FFF" stroke="param(outline) #000" stroke-width="param(outline-width) 1"benim için çalışmasını sağlamak amacıyla. (Svg'yi illüstratörde yarattım.)
Henrik

4

Dün SVG sembollerini nasıl ekleyeceğinizi öğrendiğimden beri bunu yapmak istedim , ama hepsi siyahtı. Jgrocha'nın verdiği cevap işe yarıyor - Oy kullanmak istedim ancak GIS forumuna yeni katıldım, önce biraz itibar almam gerekiyor!

Cevabı teyit eden bu sayfayı da buldum: SVG DEĞİŞKEN RENKLER İLE QGIS'TE SEMBOLLERİ

İşaretleyicinin renklerini değiştirme olanağına sahip olmak için, yer tutucuların 'dolgu rengi için param (dolgu)', anahat rengi için 'param (anahat)' ve kontur genişliği için 'param (anahat genişliği)' eklememiz gerekir. Bu yer tutucuları isteğe bağlı olarak varsayılan bir değer izleyebilir:

<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>`

Teşekkürler!


QGIS’de bu satırları nereye ekleyebilirim?
newGIS

4

SVG'lerin temelleri hakkında basit bir cevap sağlamaya değer gibi görünüyor, burada yazılımla ilgili ayrıntılar hakkında sağlanan ayrıntıların yanı sıra ...

Bir SVG dosyası sadece bir metin dosyasıdır. Dosya biten .svg olacaktır, ancak bir metin editöründe .txt biten bir dosya ile aynı şekilde açılabilir.

Basit bir svg dosyası şuna benzer:

<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>

Bu, renklerin parametrelerle tanımlandığını görebilirsiniz (noktaların 0-9 veya AF arasındaki karakterlerle değiştirildiği yerler):

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

Ve kontur genişliği,

stroke-width="..."

SVG ... 'de seçtiğiniz tanımlanmış değerleri değiştirmek için metin editörü kullanılarak aşağıdakiler eklenebilir: bu değerlerin QGIS tarafından ayarlanmasını mümkün kılar. QGIS, 'param (dolgu)' ve diğer 'param (...)' değerleri için bir değeri anlar, çünkü bunlar QGIS'in kendisi tarafından belirlenir.

Dolgu rengi: fill="param(fill) #FFF"

Anahat / çizgi rengi: stroke="param(outline) #000"

Anahat / çizgi genişliği: stroke-width="param(outline-width) 1"

Opaklığı doldur: fill-opacity="param(fill-opacity)"

Anahat / çizgi opaklığı: stroke-opacity="param(outline-opacity)"

Biraz garip yerlerde 'param (...)' değerlerini kullanmanızı engelleyecek hiçbir şeyin olmadığını unutmayın; bu nedenle, örneğin bir bitinde bir dolgu rengi tanımlamak için 'param (dolgu opaklığı)' değerini kullanabilirsiniz. SVG dosyası, ancak SVG'nin başka bir bitindeki kontur / çizgi rengi.

QGIS besteci veya stil sembolü diyaloğunda SVG renk ayarları oldukça açıktır. Dolgu ve kontur / çizgi opaklığı renk ayarlarının bir parçası olarak ayarlanır. Kontur / çizgi genişliği ayarı açıktır.

Son iki puan

Öncelikle, bir SVG'de renkleri aşağıdaki gibi bir öznitelik koleksiyonu olarak tanımlamanın geçerli olduğunu unutmayın:

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

Burada açıklanan parametreleri dahil ediyorsanız, bu düzgün çalışmıyor gibi görünüyor.

İkincisi, Illustrator veya Inkscape gibi bir yazılım kullanırken, bu yazılım tarafından SVG metnine birçok ek özellik eklenebilir. Ne yaptığınızı biliyorsanız ve yukarıdaki gibi bir SVG'nin temellerini anlıyorsanız, bu ek metinden kurtulursanız hayatı kolaylaştırabilir. Özellikle, renklerin öğeye göre değil, stillerin tanımına göre ayarlandığını görebilirsiniz.


3

Aynı problemi de yaşadım ama bazı denemelerden sonra nihayet işe yaradı. Buraya bazı yardımcı olacaklarını umarak prosedürü yazıyorum. Inkscape'de basit bir spiral yarattım ve svg olarak sakladım. Sonra onu bir metin editöründe (örneğin Notepad ++) açtım ve "style" girişi svg kodumda iki kez gerçekleşti. Bu parçada ilk:

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

Ve sonra burada:

<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" />

Kodun qgis'de düzenlenebilir bir svg spiraline sahip olması için çalışmasını sağlamak için ilk "chunk" girişini ilk kod öbeğinden tamamen kaldırdım:

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

Ve ikinci kod öbeğindeki ikinci "stil" girişini aşağıdaki gibi değiştirin:

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

"# 000" ve "#FFF", doldurma ve anahat için iki varsayılan renk iken, "1" farklı şekilde belirtilmezse varsayılan anahat genişliğidir. Bu değişiklikleri kaydettikten sonra svg dosyasını QGis tarafından belirtilen doğru yolda saklayabilirsiniz (sürüme bağlı olarak Ayarlar -> Seçenekler -> SVG yolları içinde bulunabilir). Sonunda, yeni svg nesneniz diğer varsayılan nesneler arasında görünecek ve düzenlenebilir olacaktır.

Yardımcı olabilir umarım


2

Bunu genişleteceğim çünkü çalışmam biraz zaman aldı. Sembolünüzü oluşturun ve Inkscape SVG olarak kaydedin ve metin düzenleyicide açın. Alt kod bloğunda göreceksiniz; style = "fill: # 00a000; dolgu opaklığı: 1; vuruş: # 000000; vuruş genişliği: 1; (...)" Bu çizgiyi; fill = "param (fill) #FFF" stroke = "param (anahat) # 000" stroke-width = "param (anahat genişliği) 1" SVG dosyalarımda stil çizgisi svg'deki her varlık veya şekil için görünür ve bu çizgileri değiştirmek benim için işe yaramadı; ancak Inkscape SVG üzerinde altta yapmak işe yaradı. Çözümümü ve buradaki yönergeleri Optimized and Plain SVG formatlarında denedim, ancak işe yaramadı, umarım bu yardımcı olur. Inkscape 0.48, QGIS 2.12.0, NotePad ++


2

Kesin bir değer kullanırsak, sorun gibi görünüyor. Seçenekleri her açtığımızda, SVG'deki değerlere tek tek renk veya kontur değeri sıfırlanır. Bu, gelişmiş seçeneklerde bir değer ayarlayarak düzeltilebilir. Testlerim SVG'de vb. Kullanmak fill="param(fill)"yerine daha iyi olacağını gösterdi fill="param(fill) #FFF".

Başka bir ilginç çözüm: Ön plan ve arka plan rengine sahip bir SVG'niz varsa kontur rengini dolgu arka plan renginiz olarak kullanabilirsiniz. Dikkat edin, o zaman tüm SVG için ayrı bir anahat rengi kullanamazsınız.


1

Herkese teşekkürler. Burada bazı harika ipuçları var ve beni doğru yöne çevirdiler ancak hiçbiri özel sorunuma değinmedi, bu yüzden tencereye ne bulduğumu ekleyeceğim. Her durum için tek bir doğru cevap görünmediğinden, sonuçlarınızı mümkün olduğunca çabuk test etmek için bir öneride bulunmak istiyorum.

Hızlı Düzenleme Testi

  • Tüm svg simgelerinizi geçici olarak QGIS svg klasörünün dışına taşıyın.
  • Üzerinde çalışmak istediğiniz svg dosyasının bir kopyasını salt okunur olarak çıkarın, böylece üzerine yazmaz ve düzenlenebilir bir sürümünü QGIS svg klasörüne yerleştirirsiniz.
  • QGIS'i açın, çalışmak için bir nokta katmanı yükleyin, katman özelliklerini açın ve "SVG marker" i seçin.
  • Ayrıca, bir svg dosyasını sağ tıklayıp geçici olarak varsayılan "Birlikte Aç" programını Notepad olarak ayarlamak isteyebilirsiniz, böylece onları Not Defteri'nde düzenlemek için çift tıklayabilirsiniz.

Bu kurulumla, QGIS'in düzenlemelerinize nasıl yanıt verdiğini hemen görebilirsiniz. Svg dosyasını Not Defteri'nde ve özellikler bölmesini QGIS'de açık bırakın. Bir düzenlemenin sonuçlarını test etmek için, Not Defteri'ne kaydetmek ve QGIS'e geçmek için Ctrl + S tuşlarına basmanız yeterlidir. Svg'yi yeniden yüklemek için, sembol katman türünü başka bir şeyle değiştirin, ardından tekrar SVG işaretçisine değiştirin. İçeride sadece bir tane var, onu bulmakta hiç zorlanmıyorsunuz. Bunun gibi çok hızlı bir şekilde onlarca düzenlemeyi denedim. Bir düzenlemeden sonra svg'yi kaynak formuna geri döndürmekte sorun yaşıyorsanız, yalnızca silebilir ve başka bir kopya oluşturabilirsiniz.

SVG Simgesini Düzenlenebilir Yapma

Üzerinde bulunduğum sorun, üzerinde çalıştığım belirli simgenin "stil" veya "dolgu" kelimelerinin olmamasıydı, bu yüzden parametre satırını nereye koyacağımı bulmakta zorlandım. Martina'nın anlattığı Inkscape numarası bu sorunu çözdü ama yapacak bir sürü işim var ve her birini Inkscape'de açmak ve kaydetmek istemedim, bu yüzden deneme yanılma girişiminde bulundum. Kodlara bakıldığında sürüm bilgilerinin ve meta verilerin en üstte olduğunu ve şekil talimatlarının en altta <g><path d=(bazıları var <g><g><path d=) ve en sonda tırnak işaretleri içine alındığını görebiliyordum /></g></svg>. Biraz deney yaptıktan sonra, parametre satırını pathve iled=işe yaradı, ancak simge seçim bölmesinde görünmüyordu ve üstteki önizleme bölmesindeki simge tamamen siyah renkle dolduruldu. Görünmez simge sorunu bir hata gibi görünüyor. Aşağıda açıklayacağım bir opacity parametresi ekleyerek düzelttim. Siyah dolgunun sadece simgenin sadece 4 mm olması nedeniyle olduğu ve sadece anahat ile doldurulduğu ortaya çıktı. Bunu düzeltmek için simge boyutunu 10 mm'ye kadar (QGIS'de) çarptım ve dış çizgiyi 0.1'e (Not Defteri'nde) çarptım.

özet

Senin simge sözcükleri "tarzı" ya da herhangi bir yerde "dolgu" yok, ama bu çizgi var yaparsa <g><path d=(veya <g><g><path d=sağ şekil talimatları önce yukarıdaki satır değiştirerek düzenleme parametreleri eklemek gerekir)<g><path fill="param(fill) #FFF" stroke="param(outline) #000" stroke-width="param(outline-width) 1" d=

Kenarlık çok kalınsa, son sayıyı kesir olarak değiştirerek küçültebilirsiniz. <g><path fill="param(fill) #FFF" stroke="param(outline) #000" stroke-width="param(outline-width) 0.5" d=

Simgenizi yarı saydam yapmak isterseniz, yukarıdaki satırı bu satırla değiştirerek bunu yapabilirsiniz <g><path style="opacity:0.5;fill:param(fill) #FFF" stroke="param(outline) #000" stroke-width="param(outline-width) 1" d=. Opaklık değeri 1'den (tamamen opak) 0'a kadar (tamamen saydam) olabilir ve ek hassasiyet için yüzlerce, hatta binde biri kullanabilirsiniz (örneğin 0.01). Aynı kural sınır kalınlığı için de geçerlidir.

Düzenleyecek çok şeyiniz varsa, arama ve değiştirme işlemini otomatikleştirmek için toplu iş dosyalarını burada StackExchange'te bulabilirsiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.