HTML'de SVG yeniden boyutlandırılıyor mu?


157

Yani, HTML'de bir SVG dosyam var ve format hakkında duyduğum şeylerden biri, yakınlaştırdığınızda tüm pikselli hale gelmemesidir.

Bir jpeg ile ya da 50 ila 50 simge olarak saklayabildiğim her şeyi biliyorum, sonra aslında image_src'de yüksekliği ve genişliği manuel olarak ayarlayarak (oldukça pikselli) 100 x 100 küçük resim (veya 10 x 10) olarak görüntüleyin etiket.

Ancak, SVG dosyaları nesne / katıştırılmış etiketlerle kullanılıyor gibi görünüyor ve THOSE yüksekliğini veya genişliğini değiştirmek sadece resim için daha fazla alan ayrılmasına neden oluyor.

Bir SVG görüntüsünün dosya sisteminde depolandığından daha küçük veya daha büyük görüntülenmesini istediğinizi belirtmenin bir yolu var mı?

Yanıtlar:


178

Senin aç .svgüstündeki böyle bir şey için, ve göz (sadece XML var) bir metin editörü ile dosyayı:

<svg ... width="50px" height="50px"...

Genişlik ve yükseklik özelliklerini silme; varsayılanlar% 100'dür, bu nedenle kabın izin verdiği her şeye uzanmalıdır.


75
Evet bu doğru, ancak bir 'viewBox' özelliği de eklemeniz gerekiyor (örn. 50x50px örneğinizde viewBox = "0 0 50 50"), aksi takdirde içerik düzgün ölçeklenmeyebilir (kap boyutlarına bağlı olacaktır). Scour bunu sizin için otomatik olarak yapacak, codedread.com/scour .
Erik Dahlström

Yaşasın! Bu yardımcı oldu! Zaten dosyada% 100 bir şeyler vardı, ortaya çıkıyor, ancak görünüm kutusu anahtardı! İkinize de teşekkürler!
Jenny

26
Başka kimsenin aşina olmadığı durumlarda 'viewBox' büyük / küçük harfe duyarlıdır. Ayrıca, görüntü kırpma eğer ilk iki koordinatları sol üst köşesi, ve ikinci iki koordinatları genişlik ve yükseklik vardır önce ölçeklendirme.
Büyük McLargeHuge

1
Hem <div style = "width: 50px; height: 50px"> <svg viewBox = "0 0 1000 1000"> ... </svg> </div> ve <svg viewBox = "0 0 1000 1000" style = "width: 50px; height: 50px"> ... </svg> çalışır.
39'da genişledi

48

Bunları dene:

  1. Eksik görünüm kutusunu ayarlayın ve svg etiketinde ayarlanan yükseklik ve yükseklik niteliklerinin yükseklik ve genişlik değerlerini girin

  2. Sonra tarafından basitçe resmi ölçek yükseklik ve genişliğini ayarlayarak için istenen yüzde değerlerinin. İyi şanslar.

  3. preserveAspectRatio="X200Y200 meet(Ör. 200 piksel) ile sabit bir en boy oranı ayarlayın , ancak gerekli değildir

Örneğin

 <svg
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:cc="http://creativecommons.org/ns#"
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:svg="http://www.w3.org/2000/svg"
   xmlns="http://www.w3.org/2000/svg"
   xmlns:xlink="http://www.w3.org/1999/xlink"
   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
   width="10%" 
   height="10%"
   preserveAspectRatio="x200Y200 meet"
   viewBox="0 0 350 350"
   id="svg2"
   version="1.1"
   inkscape:version="0.48.0 r9654"
   sodipodi:docname="namesvg.svg">

24

resim etiketi ve boyut resim etiketinde svg görüntüleyerek yeniden boyutlandırabilirsiniz.

<img width="200px" src="lion.svg"></img>

1
<img> kullanarak düşünüyorum sorun <object> etiketinin yük devretme yeteneklerini (ki sürüm 8 ve altındaki IE kullanıcıları için ilgili olabilir) kaybetmektir.
Nathan Crause

10

Kabın genişliğinin değiştirilmesi, kaynak dosyanın genişliğini ve yüksekliğini değiştirmek yerine onu da düzeltir.

.SvgImage img{ width:80%; }

Bu svg yeniden boyutlandırma sorunumu giderir. Gereksiniminize göre herhangi bir% verebilirsiniz.


8

SVG'lerime ekleme viewBoxve preserveAspectRatioözniteliklerimi eklemenin en iyisini buldum . Görünüm kutusu, SVG'nin tam genişliğini ve yüksekliğini şu biçimde açıklamalıdır 0 0 w h:

<svg preserveAspectRatio="xMidYMid meet" viewBox="0 0 700 550"></svg>

2
Bu dürüstçe en iyi seçenektir. Tıkır tıkır çalışıyor.
Justin

6

Aşağıdaki kodu kullanın:

<g transform="scale(0.1)">
...
</g>

4

Sınırları kullanarak bir örnek svg.getBox(): https://gist.github.com/john-doherty/2ad94360771902b16f459f590b833d44

Sonunda, görünüm kutusunu düzgün ayarlamak için svg'ye ekleyebileceğiniz numaralar alırsınız. Sonra üst div üzerinde herhangi bir css kullanın ve işiniz bitti.

 // get all SVG objects in the DOM
 var svgs = document.getElementsByTagName("svg");
 var svg = svgs[0],
    box = svg.getBBox(), // <- get the visual boundary required to view all children
    viewBox = [box.x, box.y, box.width, box.height].join(" ");

    // set viewable area based on value above
    svg.setAttribute("viewBox", viewBox);

1

Ben bir SVG dosyası HTML [....] Orada bir SVG görüntü aslında dosya sisteminde depolanan daha küçük veya daha büyük görüntülenmesini istediğinizi belirtmek için herhangi bir yolu var mı?

SVG grafikleri, diğer yaratıcı çalışmalar gibi, çoğu ülkede telif hakkı yasası kapsamında korunmaktadır. Yetki alanına, çalışmanın lisansına veya telif hakkı sahibi olup olmadığınıza bağlı olarak, SVG'yi telif hakkı yasasını ihlal etmeden değiştiremeyebilirsiniz , ister inanın ister inanmayın.

Ancak yasalar zor konulardır ve bazen sadece bok yapmak istersiniz. Bu nedenle , HTML'nizdeki özniteliğe sahip etiketi kullanarak çalışmanın kendisini değiştirmeden grafiğin ölçeğini ayarlayabilirsiniz .imgwidth

Boyutu belirtmek için harici bir HTTP isteği kullanma:

<img width="96" src="/path/to/image.svg">

Veri URI'sini kullanarak biçimlendirmedeki boyutu belirtme :

<img width="96" src="data:image/svg+xml,...">

SVG'ler, her boyuta uygun SVG Favicon görüntüleri oluşturmak için Veri URI'leri için optimize edilebilir :

<link rel="icon" sizes="any" href="data:image/svg+xml,%3Csvg%20viewBox='0%200%2046%2045'%20xmlns='http://www.w3.org/2000/svg'%3E%3Ctitle%3EAfter%20Dark%3C/title%3E%3Cpath%20d='M.708%2045L23%20.416%2045.292%2045H.708zM35%2038L23%2019%2011%2038h24z'%20fill='%23000'/%3E%3C/svg%3E">
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.