का उपयोग करके बहुत बड़े एसवीजी को पीएनजी में कनवर्ट करें। मैं एक बड़े एसवीजी (इसका डेटा यूआरएल लगभग 750000 - 1000000 वर्ण) को पीएनजी में परिवर्तित करने की कोशिश कर रहा हूं, एक छवि के माध्यम से और कैनवास में डेटा यूआरएल पास करके, लेकिन छवि है केवल एसवीजी के 1/4 लोड हो रहा है।<canvas>
के माध्यम से बनाया जा रहा है:
var svg_xml = (new XMLSerializer()).serializeToString(svg),
url = 'data:image/svg+xml;base64,' + btoa(svg_xml);
var img = new Image();
img.width = 730;
img.height = 300;
img.onload = function(){
var canvas = document.create('canvas');
canvas.width = 730;
canvas.height = 300;
var ctx = canvas.getContext('2d');
ctx.drawImage(img, 0, 0, 730, 300);
callbackFn(canvas.toDataURL('image/png');
}
img.src = url
संपादित
मैं canvg को लागू करने एसवीजी आकर्षित करने के लिए कोशिश की है लेकिन DataURL उत्पादित एक खाली छवि में परिणाम:
var svg_xml = (new XMLSerializer()).serializeToString(svg);
var canvas = document.createElement('canvas');
canvas.width = 730;
canvas.height = 300;
var ctx = canvas.getContext('2d');
ctx.drawSvg(svg_xml, 0, 0, 730, 300);
callbackFn(canvas.toDataURL('image/png');
वहाँ है मैंने जिस विधि का उपयोग किया है, उसके साथ कुछ भी गलत है?
आगे संपादित
मैं अब काफी विश्वास है कि यह कैनवास के रूप में मैं एक ही प्रभाव के लिए एक ब्लॉब समाधान को लागू करने की कोशिश की गई सम्पूर्ण छवि आकर्षित करने में नाकाम रहने है कर रहा हूँ: फिर
var svg_xml = (new XMLSerializer()).serializeToString(svg),
blob = new Blob([svg_xml], {type:'image/svg+xml;charset=utf-8'}),
url = window.URL.createObjectURL(blob);
var img = new Image();
img.width = 730;
img.height = 300;
img.onload = function(){
var canvas = document.create('canvas');
canvas.width = 730;
canvas.height = 300;
var ctx = canvas.getContext('2d');
ctx.drawImage(img, 0, 0, 730, 300);
window.URL.revokeObjectURL(url);
callbackFn(canvas.toDataURL('image/png');
}
img.src = url
छवि ठीक लोड करता है और यूआरएल पर जा रहा है (इसे रद्द करने से पहले) छवि को ठीक से प्रदर्शित करता है।
कैनवास डेटाURL की लंबाई सुसंगत नहीं है इसलिए मुझे नहीं लगता कि यह अधिकतम है, क्या कैनवास आकार का पता लगाने का कोई तरीका है? एप्लिकेशन केवल क्रोम और फ़ायरफ़ॉक्स के लिए समर्थित है।
बहुत रोचक, ऐसा लगता है कि यह काम करना चाहिए ... सुनिश्चित नहीं है कि एसवीजी चौड़ाई और ऊंचाई नियमों का पालन कैसे करते हैं (मुझे कुछ सीएसएस मुद्दों का आकार देने के साथ समस्या होती है) लेकिन यह काम करना चाहिए। अप्रासंगिक, लेकिन: क्या आपको छवि निर्माता (ka 'नई छवि 'के बजाय उर्फ' नई छवि() '_call_ नहीं करना चाहिए? – somethinghere
यह लिखने पर एक मिस-प्रकार था ... – matts1189
एसवीजी डेटा की बड़ी मात्रा के साथ डी 3 के माध्यम से खींचे गए ग्राफ हैं – matts1189