I'm working on an SVG graphic export (with d3.js library) to PNG. The problem is the label textPath. When exporting to PNG, the text does not appear. Does anyone know if there is solution for this problem?
The code I'm using to do the conversion is:
var svgString = new XMLSerializer().serializeToString(document.querySelector('#svg'));
var canvas = document.getElementById("canvas");
var ctx = canvas.getContext("2d");
var DOMURL = self.URL || self.webkitURL || self;
var img = new Image();
var svg = new Blob([svgString], {type: "image/svg+xml;charset=utf-8"});
var url = DOMURL.createObjectURL(svg);
img.onload = function() {
ctx.drawImage(img, 0, 0);
var png = canvas.toDataURL("image/png");
var a = document.createElement("a");
a.download = "grafico.png";
a.href = png;
a.click();
DOMURL.revokeObjectURL(png);
};
img.src = url;
Thank you very much to all.
A greeting,
Sonia
Fixed. I've solved with attributes in the css style-sheet such as:
font-size: 16px;
color: black;
fill: none;
Same issue here. It seems that this method of conversion is not getting the body's font-size. However, dumping the generated SVG into a .svg file and opening that file in the browser renders correctly.
Related
I am trying to export the d3 chart as png image on button click.Also,i have mentioned below the function which i am using here:
$(function() {
$('#btnSave').click(function(){
html2canvas($('#test'),
{
onrendered: function (canvas) {
var a = document.createElement('a');
// toDataURL defaults to png, so we need to request a jpeg, then convert for file download.
a.href = canvas.toDataURL();
a.download = 'somefilename.jpg';
a.click();
}
});
});
});
When i am clicking on export button i am not getting the chart properly.Also i have mentioned the screen shot which i am getting after export.
I would suggest not to use html2Canvas here because capturing any SVG images would create taint on the canvas and this library does not allow that (unless you force allowTaint: true which isn't a good option either).
Here's the issue you can go through: SVG Taint on canvas
Here's an approach to capture the SVG:
JS FIDDLE
Relevant code to capture image without any special library:
var svgString = new XMLSerializer().serializeToString(d3.select('body svg#custom_id').node()),
blob = new Blob([svgString], {type: "image/svg+xml;charset=utf-8"}),
url = window.URL.createObjectURL(blob);
var img = d3.select('body').append('img').classed('exportImg', true).node();
img.onload = function () {
var canvas = document.createElement('canvas'),
ctx = canvas.getContext('2d');
canvas.width = w + m[1] + m[3];
canvas.height = h + m[0] + m[2];
ctx.clearRect(0, 0, canvas.width, canvas.height);
ctx.drawImage(img, 0, 0, canvas.width, canvas.height);
// $('body').append(canvas);
d3.select('img.exportImg').remove();
// create link
var a = document.createElement('a');
a.href = canvas.toDataURL();
a.download = 'somefilename';
a.click();
};
img.src = url;
And by adding style to the paths, I meant, NOT using CSS (I'm sorry I wasn't clear there). Here is what I was talking about:
.enter().append("svg:path")
.attr("d", path).style('fill', 'none').style('stroke', 'steelblue').style('stroke-opacity', 0.7).style('stroke-width', 1.5);
Added the same to foreground and background. You can do the styling to the axes too in a similar fashion. CSS properties aren't captured while creating the SVG string.
Hope this helps. (And I've used sample base64 code for the image as those images weren't available, you can change that) :)
I am trying to create new empty image with width and height and save it as png to file.
This is what i got:
var myImage = new Image(200, 200);
myImage.src = 'picture.png';
window.URL = window.webkitURL || window.URL;
var contentType = 'image/png';
var pngFile = new Blob([myImage], {type: contentType});
var a = document.createElement('a');
a.download = 'my.png';
a.href = window.URL.createObjectURL(pngFile);
a.textContent = 'Download PNG';
a.dataset.downloadurl = [contentType, a.download, a.href].join(':');
document.body.appendChild(a);
I am trying to get transparent image with given width and height in var myImage new Image(200, 200) as the output on the download.
The Image element can only load an existing image. To create a new image you will have to use canvas:
var canvas = document.createElement("canvas");
// set desired size of transparent image
canvas.width = 200;
canvas.height = 200;
// extract as new image (data-uri)
var url = canvas.toDataURL();
Now you can set url as href source for the a-link. You can specify a mime-type but without any it will always default to PNG.
You can also extract as blob using:
// note: this is a asynchronous call
canvas.toBlob(function(blob) {
var url = (URL || webkitURL).createObjectURL(blob);
// use url here..
});
Just be aware of that IE does not support toBlob() and will need a polyfill, or you can use navigator.msSaveBlob() (IE does neither support the download attribute so this will kill two birds with one stone in the case of IE).
Thank you K3N for replying to my question but i did not have time to wrap my head around your answer.
Your answer was just what i needed!
Here is what i got:
var canvas = document.createElement("canvas");
canvas.width = 200;
canvas.height = 200;
var url = canvas.toDataURL();
var a = document.createElement('a');
a.download = 'my.png';
a.href = url;
a.textContent = 'Download PNG';
document.body.appendChild(a);
var canvas = document.createElement("canvas");
canvas.width = 200;
canvas.height = 200;
var url = canvas.toDataURL();
var a = document.createElement('a');
a.download = 'my.png';
a.href = url;
a.textContent = 'Download PNG';
document.body.appendChild(a);
I am generating an svg with dynamically filled images as patterns. When I export this to png, I get a blank svg without any fill images. I have tried javascript as well as c# code.
Javascript code:
var svg = document.querySelector('#element3 svg');
var data1 = (new XMLSerializer()).serializeToString(svg);
var encodedData = window.btoa(data1);
var data = 'data:image/svg+xml;base64,' + encodedData;
image.src = data;
$('[id$=objimage]').attr('data', data);
var canvas = document.createElement('canvas');
var context = canvas.getContext('2d');
context.drawImage(image, 0, 0);
var a = document.createElement('a');
a.download = "image.png";
a.href = canvas.toDataURL('image/png');
document.body.appendChild(a);
a.click();
C# code:
var byteArray = Encoding.ASCII.GetBytes(input.ImageData);
using (var stream = new MemoryStream(byteArray))
{
var svgDocument = SvgDocument.Open(stream);
var bitmap = svgDocument.Draw();
bitmap.Save(HttpContext.Current.Server.MapPath("~/Images/Pattern/UserPattern/testimg.png"), ImageFormat.Png);
}
Can anyone please help in this?
I am trying to draw an image in the canvas. The image that I'm using is got as base64 string from the server. For testing purpose, I have saved the image to the disk both at the client and the server while debugging. The image is saved fine. While drawing in the canvas, the image is not rendered in Chrome and Firefox. But it works fine in IE 11.Is there any way to make the images draw in all the browsers.
var base64String = "data:image/png;base64,SUkqANZ1AQAAEbQhURQh0dUQ6mh0dHQ62ao6GIEQkpodHSEOqKiHXodDqaoh1NOqKaOjo6HU0dUQ6mqIdeh16dSUJQqJCmh0hUR0OvQ6HU0OqIdenXodTQ69DqidTVEdOpodIXIdDr1RDokXIdeh0OuQ6HXodDr0Oh16HQ6oh16HQ6mh1NDqioi6XS0OqKidcnXp16HTr0OqIdHQ69Dodch1PHX469D1EOvQ6HU0OqIdch0hUQ2h0dF0DVEOqI6HS2tgiHQ65Do6Qh1NDqiQqIdHU0OhiOhCHU0dOqL0OpqiHXodDpe0XR0OvQ6QqIdHVE69DqaHXpOADuamqIujo6IR1t1RHVEhHR0dBqiOi6OkI6BobS8IQgRF1RHSEDR0dA0hNypCEOqIhAilqtlCS1uEDSEDQmhpURCmh0XR1sYqI6Bo6og0NI6QkJCLoGhpSLpCGJCEJCQjoQh0dIVEdBEDRmACU.." //only few of the string is shared
function drwImage(base64String) {
var canvas = document.createElement('canvas');
var context = canvas.getContext('2d');
var img = new Image();
img.onload=function(){
context.drawImage(img, 0, 0, 1, 1);
}
img.src = base64String;
}
Thanks for your help in advance.
Seems something related to the serialized image, as you can see in the snippet below, it works on Chrome, I used an online encoder.
As you can read here the datauri is almost supported at all.
var base64String = "data:image/jpeg;base64,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" //only few of the string is shared
drwImage(base64String);
function drwImage(b) {
var canvas = document.createElement('canvas');
var context = canvas.getContext('2d');
var img = new Image();
img.onload = function() {
console.log('load')
context.drawImage(img, 0, 0, 1, 1);
document.body.appendChild(img);
}
img.onerror = function() {
console.log('error')
}
img.src = b;
}
I have a big canvas (5000x5000) and I want to take a picture of it and create a thumbnail on client side. I can capture the image using canvas.toDataURL but how do i re-size it? Do i have to create an new $("<canvas></canvas>") element and then put that image inside and run the canvas2.toDataURL(); Can anyone help me with this? I can't get my head around it how to do it.
var canvas = document.getElementById("main");
var ctx = canvas.getContext("2d");
var tumbnail64 = null;
var image = new Image();
image.src = canvas.toDataURL();
image.onload = function() {
$c2 = $("<canvas></canvas>");
$c2[0].width=100;
$c2[0].height=100;
$c2[0].getContext("2d");
$c2[0].drawImage(image, 0, 0,100,100);
tumbnail64 = $c2[0].toDataURL();
};
Something like this should work, given you don't have security restrictions on the original canvas element:
var resizedCanvas = document.createElement("canvas");
var resizedContext = resizedCanvas.getContext("2d");
resizedCanvas.height = "100";
resizedCanvas.width = "200";
var canvas = document.getElementById("original-canvas");
resizedContext.drawImage(canvas, 0, 0, 200, 100);
var myResizedData = resizedCanvas.toDataURL();