SVG dosyalarındaki dönüşümleri kaldırma


155

Bir süredir bununla mücadele ediyorum ve hiçbir yerde (işe yarayan) bir cevap bulamıyorum. Şöyle bir SVG dosyası var:

<svg

   xmlns:dc="http://purl.org/dc/elements/1.1/"
   ...
   width="72.9375"
   height="58.21875"
   ...>
   ...
   <g
     ...
     transform="translate(10.75,-308.96875)"
     style="...">
     <path
       inkscape:connector-curvature="0"
       d="m -10.254587,345.43597 c 0,-1.41732 0.17692,-2.85384 0.5312502,-3.5625 0.70866,-1.41733 2.14518,-2.82259 3.5625,-3.53125 1.41733,-0.70866 2.11392,-0.70867 3.53125,0 1.41732,0.70866 ... z"
       ... />
  </g>
</svg>

transform="..."Hattı kaldırmak istiyorum ama yine de benim görüntü yerleştirdiğim yerde kalmak (InkScape). Dönüştürmeyi el ile kaldırırsam, görüntü ekranın başka bir bölümüne fermuarlar (beklendiği gibi), ancak dönüşümden tamamen kurtulmam gerekiyor ve aynı zamanda görüntü tam olarak istediğim yerde kalıyor. Dönüşümleri yol koordinatlarına dönüştürmenin / düzleştirmenin bir yolu var mı? (Sadece uğraşmak zorunda olduğum dönüşümler tercüme ve ölçek, matris yok.)



Yanıtlar:


149

Inkscape'te dönüşümler nasıl kaldırılır

  1. Svg dosyasını Inkscape'de aç
  2. Düzenle -> XML Düzenleyici'ye gidin
  3. Katmanlardaki "dönüşüm" özelliklerini bulun ve silin

Başka bir dönüştürme özelliği oluşturmadan tüm nesneleri nasıl hareket ettirebilirim?

  1. Düzenle -> Tüm Katmanlarda Tümünü Seç'e gidin
  2. Nesne -> Dönüştür'e gidin

    Dönüştür panelinde

  3. Göreli taşıma seçeneğinin işaretini kaldırın ve Her bir nesneye ayrı ayrı uygula seçeneğini işaretleyin

  4. Yatay ve Dikey değerleri ihtiyaçlarınıza göre ayarlayın ve Uygula'yı tıklayın

16
Benim için çalıştı. Nesnelerin dönüştürülmeden önce gruplarının ayrılması gerekir, böylece yolların gerçek koordinatları güncellenir.
Rupert Angermeier

8
Hm, 0 olarak ayarladıktan ve uygula'yı tıkladıktan sonra, dönüşüm tekrar XML düzenleyicide gösterilir.
escapedcat

7
Bunun benim için çalışabilmesi için nesneleri desteklememek gerekiyor, teşekkürler!
Hai Zhang

1
Benim için çalışmadı. Dönüştürme özelliğini düzleştirecek ve yapraklara taşıyacaktır (aslında her şey grubu çözüldükten sonra bir yaprak haline gelir), ancak dönüştürme niteliğini KALDIRMAZ ve kare olmadan geri döndüğümde NOKTA GEOMETRİSİNE UYGULANMAZ.
Szczepan Hołyszewski

2
ÖNEMLİ: Yukarıda açıklanan bir yorum gibi, bunun düzgün çalışması için nesnelerin grubunu çözmeniz gerekir, aksi takdirde dönüştürme özelliği tekrar otomatik olarak ayarlanır
Gölge

52

Sorunun ne olduğunu anladım. Her ne kadar işe yarayacağını onaylamak için sevindim, Robert'ın cevabına başvurmak zorunda değil umuyordum! Sonunda Duopixel'in cevabı aslında en yakın olanıydı, ancak başka bir şeyin de devam ettiği ortaya çıktı.

Inkscape belgelerinde farklı yollarla çalışırken, varsayılan davranışının bunları bir <svg:g.../>etiket altında gruplandırmak olduğuna inanıyorum . Bir gruptaki yolları değiştirirken, Inkscape bu değişiklikleri temsil etmek için otomatik olarak gruba bir dönüşüm ekler. Bununla birlikte, XML düzenleyicisini açar ve yolunuzu <svg:g.../>etiketin dışına sürükleyip kendi <svg:path.../>etiketi yaparsanız , Inkscape istediğiniz noktaları tek tek düzenlemekte serbesttir. Sonunda ben sadece bir yol ile çalışmasına rağmen bir gruplama sorunu olduğu ortaya çıktı! Umarım bu benzer durumlarda başkalarına yardımcı olur.


7
Müthiş! Teşekkür ederim! Tam olarak yaptığı buydu. Sadece iç içerikleri bırakarak grup etiketini sildim, kaydettim ve inkscape içinde yeniden açtım. Tabii ki görüntü, görünüm kutusunun dışında (ya da her ne denirse), ama sonra sadece x, y'yi ayarladım ve düzeltildi. Ne acı. Bunu paylaştığın için teşekkürler!
johntrepreneur

1
Benim durumumda bu cevaptaki yaklaşımları o cevaptaki başka bir cevapla birleştirdim .
quasiyoke

Bu iptal edilmeli ve zirveye getirilmelidir. Bu, sorunu zarif bir şekilde çözdü ve benim için çalıştı. Ve grafikler tuvalin dışına yanlış yerleştirilmiş olsa bile, her zaman yeniden boyutlandırabilirsiniz (Düzenle> Sayfayı Seçime Yeniden Boyutlandır)
mandarin

48

resim açıklamasını buraya girin

  1. SVG'nizi Yöntem Çizimi'ne yükleyin http://editor.method.ac (Dosya> Görüntüyü Aç)
  2. Öğelerinizin grubunu çözme (Nesne> Grubu çözme) bunu bir kereden fazla yapmanız gerekebilir.
  3. Yolunuzu seçin
  4. Yolu yeniden yönlendirin (Nesne> Yolları Yeniden Yönlendir).
  5. Görüntünüzü kaydedin (Dosya> Görüntüyü Kaydet) Yeni bir pencerede görünüyorsa sağ tıklayıp "Görüntüyü farklı kaydet ..."

1
Nesne> Yeniden Yönlendirme Yolu yoktur. Hangi sürüme başvuruyorsunuz?
0__

1
@ 0__ Bu menü öğesi devre dışı bırakılırsa, yolunuz hala bir grup içinde demektir. Tekrar grubunu çözün.
metodofaksiyon

37

Yolları dönüşümleriyle yeniden hesaplayan Dönüşümleri Uygula adlı bir inkscape uzantısı var . Tam da aradığım şey bu.

Yükledikten sonra menü > Uzantılar> Yolu Değiştir> Dönüştürmeyi Uygula altında bulabilirsiniz .


credits: Inkscape forum> Yerinde tutarken tüm dönüşümleri kaldırın


Bu uzantı güncellendi ve şimdi de en azından testlerimde rects için de çalışıyor.
sil

Kesinlikle. Bu küçük eklentinin size verdiği güç ölçülemez!
brett

23

Gruplar için yeniden gruplandırma işi hızlı bir şekilde yapabilir. Grubu seçin ve Ctrl + Üst Karakter + G (degrup) ve ardından Ctrl + G (grup) tuşlarına basın.

Benzer bir soruna, spirallere ve yıldızlara sahip bazı nesneler için, hızlı yol Ctrl + Alt + C'ye (yola kontur) basmaktır - ancak bu nesneyi saf bir yola dönüştürür ve tüm ekstra nitelikleri kaldırır, sodipodi gibi: cx, sodipodi: devrimler vb.


23

SVG'nizi Inkscape'te açın :

  • Kurtulmak istediğiniz tüm bu dönüşümleri içeren grubu seçin
  • CTRL+ U(Grubu çöz) düğmesine basın
  • CTRL+ G(Tekrar gruplandır) tuşuna basın

Bu şekilde gruba uygulanan dönüşümlerden kurtulacaksınız ve bu grupta yer alan yollara aktarılacaklar.


1
Mükemmel! Bu Inkscape 1.0'da çalıştı
Ogz Büyücüsü

14

Deneyimlerime göre, Inkscape kullanıyorsanız, yol öğesini biraz hareket ettirmek yeterlidir (örneğin imleç tuşlarıyla) ve Inkscape, transform niteliğini siler ve yol verilerini buna göre ayarlar. (Gerçekten dönüşüm niteliğini korumak istiyorsanız sinir bozucu.)

Böylece, yolu seçebilir (çevredeki grup değil yol olduğundan emin olabilirsiniz), sağ ve sol imleç tuşuna basabilirsiniz ve işiniz bitti.


1
Bu bir <g> öğesi için işe yaramıyor gibi görünüyor. Dönüştürme özelliğinden kurtulmaya çalışıyorum.
Max Spring

5
Belki önce grubu çözmeyi ve daha sonra yeniden gruplandırmayı deneyin.
Thomas W

1
Vay be, bir cazibe gibi çalıştı! Bu kabul edilen cevap olmalı. Ekstra alet gerekmez, karmaşık adımlar yoktur. Yol dönüştürülmüş bir iç içe yerleştirilirse <g>ve dönüşümü açık tutmak istiyorum <g>.
tomekwi

Daire aracı tarafından oluşturulan bir yol için de çalışmaz
sdaau

1
En iyi cevap. Belki de bir karışıklık kaynağı, burada başka bir yerde bahsetmediğim Tercihler> Dönüşümler> Mağaza Dönüşümleri seçeneğidir. "Optimize edilmiş" olarak ayarlanmalıdır. Sonra sadece grubu çöz, taşı, yeniden gruplandır ve dud dönüşümleri kaldırılır.
Mr5o1

13

Inkscape'i tercih ederken Affinity Designer (~ 40 $ / Mac), Android Vector Drawables ile çalışırken saatlerimden tasarruf etti.

Bir SVG açın, Dosya -> Dışa Aktar -> SVG -> Diğer -> Düzleştir dönüşümleri harika çalıştı.

Afinite Tasarımcısı


12

SVGO bunun için mükemmel bir açık kaynaklı komut satırı aracı ve bir dizi diğer optimizasyon. SVGOMG olarak adlandırılan eşit derecede mükemmel bir çevrimiçi web kullanıcı arayüzü var

Bu durumda ilgili seçenekler şunlardır moveGroupAttrsToElems: (SVGOMG Move group attrs to elementstaşımak için) transformyol elemanlarına gruplardan özelliklerini, artı convertPathData(SVGOMG: Round/rewrite paths) düzleştirmek için transformiçine d.


1
SVGO inanılmaz. Bu özellikle kabul edilen cevap olmalıdır, özellikle yığın akışı programcının bakış açısı içindir ve bu SVG içeren bir site geliştiren bir programcı için açık ara en iyi çözümdür. Bunu dağıtım kanalınıza koymak, sanatçılarınıza dönüşümleri elle kaldırmayı (veya kendiniz yapmak zorunda
kalmayı) öğretmeyi

3
Ancak bu artık işe yaramıyor. Bir kez daha iyi çalıştığını hatırlıyorum, ancak SVGO için github.com/svg/svgo/issues/624 ile ilgili bu konuya bakın
morewry

9

Tercihlerde "Optimize edilmiş" modun olduğu belirtilmelidir:

Inkscape Tercihleri> Dönüşümler> Mağaza dönüşümü> Optimize edilmiş

Bu, transformözelliklerin oluşumunu mümkün olduğunca en aza indirgemesi gerekiyordu , ancak değil.

Bu zaten varsayılan olarak açık görünüyor.

Bir tartışmaya göre , bu Optimize Edilmiş modun gayretli olmadığı bir örnek , sayfanın yeniden boyutlandırılmasıdır . Bu translate, katman <g>elemanına bir dönüşümün uygulanmasına neden olur . Çocukların başka bir katmana boşaltılması şu anda en iyi çözümdür.


2
translateHer katmanda sinir bozucu dönüşümler oluşturmadan sayfayı yeniden boyutlandırmak için .svgdosyayı bir metin düzenleyicisinde açmayı deneyin ve üstte görünen yükseklik ve genişlik niteliklerini değiştirin.
februaryInk

7

Inkscape, dönüştürme verilerini temizleme seçeneğine sahiptir, ancak yine de nesnenin değerini değiştirmeden bırakır.

Inkscape'de nesneyi ve 'Yol' menüsünü, 'Basitleştir'i seçin. Şimdi, dönüşümleri kaldırmış olacaksınız.


16
Bununla birlikte, yollarınızın anahattını değiştirecek ve karmaşık şekillerdeki köşe sayısını azaltacaktır.
Charlie

1
Bu genellikle biçimlendirmeyi dönüşümlerden daha büyük hale getirir.
Charlie

6

Bu durumda, her çocuk için m değerlerine çeviriyi ekleyin, böylece -10.254587 + 10.75 = -0.504587 ve -308.96875 + 345.43597 = 36.46722.

Örnekteki tüm terimler göreli (küçük harf) olduğu için hepsi bu. M veya C gibi mutlak (büyük harf) olsaydı, bunların da ayarlanması gerekirdi.

Ölçek için temelde tüm alt değerleri ölçeğe göre çarparsınız.


Bunu yaptım, ancak Inkspace XML editöründe (veya başka bir editörde) dönüşüm hala ekleniyor. Tuhaf.
escapedcat

1
2 alt yolunuz varsa C'yi nasıl ayarlarsınız, örneğin M 8.0 12.0 C 11.3 13.1 14.9 13.55 16.0 13.0 C 2.4 9.8 2.8 10.2 8.0 12.0 C 7.6 7.8 7.6 8.1 5.0 9.0 ve M 3.0 5.0 C 2.4 5.5 3.3 6.4 5.0 7.0 Hangi tek bir yola mı dönüşmek istiyorsunuz?
Kur

@ Mevcut cevapların kapsamadığı bir sorunuz varsa , soru sor düğmesini kullanın. Çok sınırlı biçimlendirme olduğu için yorumlarda sormak ve cevaplamak zordur.
Robert Longson

2
@RobertLongson iyi örtbas ettin. Tek istediğim, "Eğer mutlak olsaydı (büyük harf), örneğin M veya C olsaydı, onlar da ayarlanmalıydı."
Kurulum

6
  1. Söz konusu öğeleri seçin
  2. Nesne> Grubu Çöz (her şeyin grubu çözülene kadar tekrarlayın; iç içe düğümler için XML düzenleyiciye bakın)
  3. Yol> Nesneden Yola (çokgenleri yollara dönüştürür)
  4. Nesne> Dönüştür> Göreceli taşıma işaretini kaldır> Uygula

Inkscape 0.91'de çalışmıyor gibi görünüyor. <g>İle transformoldu gibi nitelik kalır. Ayrıca, nesnem (burada soruda gösterildiği gibi) zaten bir yol.
VEYA Haritacı

SVG'nize bir bağlantı yapıştırabilir misiniz?
Charlie

5

Dönüştürme niteliğini gInkscape'teki bir öğeden (grup) kaldırmak için , grubu son yerine taşıyabilir, grubunu çözebilir ve ardından tüm öğeleri yeniden gruplayabilirsiniz. Şimdi yeni bir grup oluşturuldu ve onu bir daha taşımazsanız, ona bir dönüştürme özelliği eklenmeyecek.


4

Buraya Sketch 3'te bunu yapmak için bir çözüm arayan biri varsa, katmanı seçin ve ardından Katman-> Yollar-> Düzleştir'e tıklayın.


3

Bulundu:

  • İstediğiniz sayfa boyutunu ayarlayın *
  • Geçerli katmanınızda bir dönüşüm varsa (XML düzenleyicisiyle kontrol edin, bu SVG öğesinin altındaki en üst gruptur) yeni bir katman oluşturun ve tüm nesneleri buna taşıyın
  • Herhangi bir grubu çöz (bu gerekli olmayabilir, YMMV)
  • Mağaza dönüşümü yaparken tüm nesneleri seçin ve boş bir dönüşüm (% 100% 100 ölçek veya% sağ + sol ok gibi) uygulayın: Tercihler / Dönüşümler'de Optimize Edildi
  • Herhangi bir grubu geri almanız gerekiyorsa, artık grupları yeniden gruplandırabilirsiniz
  • Bir kopyayı Optimize Edilmiş SVG olarak kaydedin ve istediğiniz sayısal hassasiyeti ayarlayın

*: Veya en azından nesneleri, sayfanın sol üst köşesine göre, ihtiyacınız olan yere yerleştirin. SVG koordinatlarının sol üst köşeye başvurması talihsiz bir durumken, Inkscape sayfayı sol alta göre yeniden boyutlandırıyor!


Aşağı itmek istediğim dönüşüm bir katmanın <g> olduğu için "başka bir katmana geç" numarasına ihtiyacım vardı. Inkscape'in koordinat sistemi oldukça can sıkıcı.
Mutant Bob

3

matrix(...)Yolu bir dikdörtgenle birleştirip dikdörtgenin düğümlerini kaldırarak (yansıtma nedeniyle) bir dönüşümden kurtulabildim . translate(...)Bölüm olsa kaldı.


Ben de bulduğum tek çözüm bu. Yeni temiz bir yolla birleştirin, ardından gereksiz parçayı çıkarın.
Márton Tamás

2

Benim durumumda optimize edilmiş SVG olarak kaydetmek sorunu çözdü. Inkscape kullanımında:

Dosya -> Farklı kaydet ... -> Optimize edilmiş SVG.


Sorununuz BTW neydi? Her şeyi denedikten sonra buraya geldim. Ama sorun hala devam ediyor.
Sahu V Kumar

@VishalKumarSahu Android Uygulama simgemi (SVG), transformAndroid Studio tarafından desteklenmeyen bir özellik nedeniyle bir varlık olarak içe aktaramıyordum .
Michał Stochmal

Evet ve web'de de aynı durum geçerli. Dönüşüm çıktıda sorun yaratır, ancak grup olarak nesne düzenlemesi sırasında oldukça yardımcı olur. Amacı çözmek için hesaplamalar yapmak zorundayım.
Sahu V Kumar

2

Inkscape kullanıyorsanız bu işe yarar:

  1. Her şeyi seç ve grubu çöz
  2. "Optimize Edilmiş Svg (* .svg)" olarak kaydet

Denediğim her durumda, bu dönüştürme özniteliklerini kaldırmıştır. Daha karmaşık SVG için çalışıp çalışmadığından emin değilim.


1

Burada yayınlanan çözümü, yani SVG dosyasındaki grup etiketlerini kaldırmak ve Inkscape (benim durumumda 0.48.3.1) yeniden açmak için denedim. Ne yazık ki, yolları seç ve dönüştür modunu (F1) kullanarak tekrar çevirdikten ve kaydettikten sonra, grup etiketleri yeniden ortaya çıktı! Inkscape, çevreye uygulanan bir grup öğesindeki yola uygulanan tüm dönüştürmeleri kaydeder. Yol düğümü seçim aracını (F2) kullanmadığınız sürece, ctrl + a tuşlarına basın ve yolun düğümlerini doğru yerlerine taşıyın. Bunun yerine bunu yaptıktan ve daha sonra kaydettikten sonra, bu çeviri doğrudan yol modeline uygulandığından Inkscape grup etiketlerini eklemedi. Bu yardımcı olur umarım.



0

Benim özel sorunum, sayfanın dışında tanımlanan sembollerle, dolayısıyla sayfada bir dönüşümün gösterilmesini gerektiriyordu.

Dönüşüm gerektirmeden sembolleri sayfaya taşımak için Inkscape'te şu adımları atmak zorunda kaldım:

  1. Semboller penceresini açın (Shift + Ctrl + Y)
  2. Sembolü belge kitaplığından kaldırın. (Pencerede bunun için bir düğme var.)
  3. Şimdi grafik belgede, sayfa sınırının dışında görünür.
  4. Grafiğin grubunu çözün. (Bu çok önemli bir adım!)
  5. Grafiği sayfa sınırının içine taşıyın.
  6. Grafiği sembol kitaplığına geri ekleyin.

0

Bu rastgele görünüyor, ama denediğim hiçbir şey işe yaramadı, bu yüzden burada rastgele başka bir kişiye gidiyorsunuz. Bazı yollarımın çevresinde sadece onları seçerken görülebilecek bir tür kenar boşluğu vardı ( misal). Başka bir inkscape dosyasından bir katman yapıştırıp 90 derece döndürdüğümde bu oluşturulduğunu düşünüyorum. Bu, şekiller üzerinde bir desen dolgusunun farklı bir dönüşüme sahip olmasını sağladı (çizgiler daha fazla aralıklı). Ayrıca hizalama nesnelerini beklendiği gibi çalışmaz hale getirdi. @Piotr_cz tarafından bahsedilen Dönüştürme Uygula'yı kullanmak, dönüştürme sorununu çözdü, ancak garip marj kaldı. İnme sırasındaki Bulanıklığı herhangi bir değere ve sıfıra çevirerek yanlışlıkla kurtuldum.


0

Bir şekilde yaklaşımların hiçbirinde şansım yoktu. <defs>SVG'nizde bölüm varsa ve bunun gibi kullanırsa:

<g transform="matrix( *** ) "><use xlink:href="#***"/></g>

tüm kullanımları silmeniz ve her şeyi defs bölümünden çıkarmanız gerekebilir. Daha sonra, hepsini doğru şekilde yerleştirmek için inkscape'i kullanabilir ve sonra söz konusu eklentiyi kullanarak dönüşümleri uygulayabilirsiniz. Umarım birine yardımcı olur.


0

Yıllardır bu sorunu yaşıyorum. Çözüm, inkscape içinde "sabit" olmayacaksa, tarayıcıdaki dönüşümlerle dinamik olarak oynayabilmektir.

Inkscape forumlarında Mc kullanıcısı bana bu çözümü verdi .

Çözüm, bir SVG öğesi ile SVG kök öğesi arasında geçerli dönüşümü oluşturur ve daha sonra dönüşümlerin toplamına dayalı olarak tam bir BBox bilgisi kümesi döndürür.

Aynı SVG dosyasının iki bölümü arasındaki tarayıcı çalışmasında yapmak isterseniz, hesaplamaların hangi öğeyle ilişkili olduğunu kolayca değiştirmek de mümkün olacaktır.

Sonunda aslında bir kaydırma SVG görünümüne sahip olabilirim.


0

Kubuntu 20.04'te Inkscape 1.0

Bu konu oldukça eski olmasına rağmen, deneyimimi / çözümümü göndermek istiyorum. FreeCAD'in TechDrawing çalışma tezgahı için bir şablon oluşturmaya çalışırken bu sorunla karşılaştım. Bu şablonlar herhangi bir dönüşüm içermemelidir.

Benim durumumda harici bir .svg dosyasından (tamamen Inkscape ile yapılmış) bir şirket logosu eklemek zorunda kaldım. Bu logo, metin öğelerinin yanı sıra grafik de içerir. Bu logoyu şablona kopyalarken, şablonun FreeCAD'de düzgün çalışmamasına neden olan dönüşümler oluşturuldu.

  • İlk olarak, www.freecadweb.org / ... üzerinde önerilen bu çözüm benim için çalışmıyor. Bu yüzden web'de arama yaptım ve bu tartışmayı buldum.

  • İkincisi, yukarıda önerilen çözümlerin hiçbiri benim için işe yaramadı, ancak beni doğru yola koydular. Charlie'nin yanıtı yaklaştı, ancak Nesne> Dönüştür> Göreli hareketin işaretini kaldır> Uygula bir fark göstermedi.

Benim için işe yarayan şuydu:

  1. Başkaları tarafından belirtildiği gibi, her şeyin grubunu çözün.
  2. Metin nesnelerini yola dönüştür - bu benim durumumda gerekli görünüyordu!
  3. Xml-Editor'da mevcut tüm dönüşümleri silin ve ilgili nesnelerle ne olduğunu gözlemleyin. Benim durumumda, ilgili elemanlar konumlarını değiştirdi.
  4. Bu değişiklikleri manuel olarak düzeltin, ancak hiçbir şey gruplamayın.
  5. Normal svg olarak kaydet (normal = optimizasyon veya diğer özel ayarlar kullanılmadı)

FreeCAD'de bu şablonu kullandığımda iyi çalışıyor.


Garip bir ayrıntı: Her ne kadar benim çözümüm metin öğelerinin benim durumumda sorun olduğunu belirtse de, bu o kadar kolay olamaz. Aslında, temel belge (logoyu kopyaladığım belge) birçok metin öğesi içeriyor ve bunların hiçbirini dönüştürmedim. Yani "dış kaynak" ve metin öğelerinin birleşimi olabilir . Bu detayı sadece ilgili problemleri olabilecek başkalarına bir ipucu olarak gönderiyorum.

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.