2013-10-15 15 views
6

için D3js ile oluşturulan dönüştürülür.SVG Ben kullanıcılar grafiği indirebilmeniz JavaScript aracılığıyla bir PNG-görüntüye dönüştürmek istediğiniz D3js ile oluşturulan bazı grafikler var PNG

Bir tuvaline SVG dönüştürmek ve bir resim tuvali dönüştürmek çözümler gördük. Bu benim için işe yaramayacaktır çünkü SVG, tüm tuvalin çok kalın çizgilerle siyahlaşmasına neden olan unsurları şekillendirmek için sınıfları kullanır (ki bu da insanlıktan dolayı değişmemeyi tercih ederim).

doğrudan PNG SVG-grafikler dönüştürmek mümkün mü? o saf JavaScript çözümü olmak zorunda değildir, ancak ben bu yüzden de diğer projelerde bunu uygulayabilirsiniz JavaScript ile bunu tercih ediyorum, böylece

sayfa bir Ruby on Rails proje içindedir.

+0

Üzgünüz, henüz SVG ile hiçbir şey yapmadım, bu yüzden bu cevap saçmalık olabilir :). Çizgiye dönüştürürken, satır içi şeylerin değil, satır içi stilleri kullanarak sınıfları kullanarak mı söylüyorsunuz? Bu durumda, tuvale dönüştürmeden önce stilleri css sınıfından programlı olarak uygulamak sorun değil midir? – Owen

+0

Bu soruyu 2 güve önce eklediğimde, aslında sorun buydu. Önerdiğin şeye bir çözüm similair uyguladım. Bundan sonra karşılaştığım sorun, çoğu tarayıcının üretilen tuvali/PNG'yi doğru şekilde oluşturmamasıdır. Bu, eksik ve/veya siyah olan görüntüye neden olur. IE için karşılaştığım bir problem, data-uri'sinin 2.048'den büyük karakterlerini geçemediğimden dolayı, tüm uri'yi karşıdan yükleyebilmek için (gerçekten soruyla ilgili değil) sunamam. –

cevap

2

bir tuval içinde svg görüntülemek için öncelikle gibi http://code.google.com/p/canvg/

(kod uyarlanan bir ayrıştırıcı/işleyici yardımcı programını kullanarak dönüştürmek zorunda: resmin vb (JPEG, PNG) SVG dönüştürme tarayıcısı)

// the canvg call that takes the svg xml and converts it to a canvas 
canvg('canvas', $("svg").html()); 

// the canvas calls to output a png 
var canvas = document.getElementById("canvas"); 
var img = canvas.toDataURL("image/png"); 
+0

Hmm, bununla ilgili iki sorum var: Birincisi: 3 kütüphanenin tamamını (rgbcolor, stackblur, canvg) mı kullanmalıyım?, Ikincisi: Canvg.js dosyasının oldukça büyük olduğunu fark ettim. Daha küçük kütüphaneler biliyor musun? ya da sadece çok nadir metotları tanımlamak mümkün mü? Bunu soruyorum çünkü bir RoR uygulaması ilk yükte tüm JS dosyalarını yükler, bu yüzden başka bir büyük kütüphane (zaten bir çok JS'ye sahibiz) ilk yüklemede yavaşlatır. –

+0

Bu "mükemmel" çözümüm olmasa da işe yarıyor. Bu yüzden cevap olarak kabul edeceğim. –

+0

Canvg çözümü, sunucu tarafında SVG'yi PNG'ye dönüştürmek için NodeJS ile çalışır mı? Svg2png ile çalıştı ama windows7'de iyi çalışmadı – amar

İlgili konular