15

I am trying to get image from canvas. enter image description herePNG image is coming properly but the JPEG is producing a problem. I attached image here.First image is my canvas.Followed by PNG then JPEG.So i want my JPEG image with white background or i need a solution for PNG to JPEG conversion in JS

canvas =  $('.jSignature')[0];

            imgData = canvas.toDataURL();
            imgDatajpeg = canvas.toDataURL("image/jpeg");                   

            $(".sigCapHolder").append('<img src='+imgData+' /> ')
            $(".sigCapHolder").append('<img src='+imgDatajpeg+' /> ')
gauti
  • 1,264
  • 3
  • 17
  • 43

3 Answers3

19

Cause

The reason for this to happen is due to canvas being transparent. However the transparancy color is black with a transparent alpha-channel so it won't show on screen.

JPEG on the other side doesn't support alpha-channel so that black color which is the default is stripped of its alpha channel leaving a black background.

You PNG supports alpha-channel so it is compatible with the way canvas work.

Solution

To get around this you will have to manually draw in a white background on the canvas before you draw in the image:

var canvas =  $('.jSignature')[0];
var ctx = canvas.getContext('2d');

ctx.fillStyle = '#fff';  /// set white fill style
ctx.fillRect(0, 0, canvas.width, canvas.height);

/// draw image and then use toDataURL() here
Community
  • 1
  • 1
  • Thank you so much.I rectified my issue.I tried after drawn and changed dynamically.I hope this answer will help to many people in future. – gauti Dec 24 '13 at 07:31
  • 1
    This does not seem to work, even though I draw before the image I get just a white image (as if the white rect is above the image that I draw afterwards). Should I do something additional to work? – user2078023 Jan 16 '19 at 11:27
0

this works in firefox, oCanvas.toDataURL("image/jpeg")

0

Just as an alternative way, using a package to convert black background of transparent image to white or any other other based on the provided HEX value, in our

const Jimp = require("jimp");

// Read the PNG file and convert it to editable format
Jimp.read("./images/your-image.png", function (err, image) {
    if (err) {
        // Return if any error
        console.log(err);
        return;
    }

    image.background(0xFFFFFFFF, (err, val) => {
        // Convert image to JPG and store it to 
        // './output/' folder with 'out.jpg' name
        image.write("./output/out.jpg");
    })

});

GouravGupta
  • 143
  • 2
  • 5