如何使用 javascript 将图像从 PNG 转换为 JPEG?

问题描述 投票:0回答:3

我正在尝试从画布中获取图像。 enter image description herePNG 图像正常,但 JPEG 出现问题。我在这里附加了图像。第一个图像是我的画布。其次是 PNG,然后是 JPEG。所以我想要带有白色背景的 JPEG 图像,或者我需要在 JS 中将 PNG 转换为 JPEG 的解决方案

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

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

            $(".sigCapHolder").append('<img src='+imgData+' /> ')
            $(".sigCapHolder").append('<img src='+imgDatajpeg+' /> ')
javascript image canvas
3个回答
19
投票

原因

发生这种情况的原因是画布是透明的。然而,透明度颜色是黑色,具有透明的 alpha 通道,因此它不会显示在屏幕上。

另一侧的 JPEG 不支持 Alpha 通道,因此默认的黑色会被剥离其 Alpha 通道,留下黑色背景。

You PNG 支持 alpha 通道,因此它与画布的工作方式兼容。

解决方案

要解决此问题,您必须在在图像中绘制之前在画布上手动绘制白色背景:

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

0
投票

作为一种替代方法,使用包将透明图像的黑色背景转换为白色或任何其他基于提供的十六进制值, 在我们的

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");
    })

});


0
投票

这适用于 Firefox,

oCanvas.toDataURL("image/jpeg")

© www.soinside.com 2019 - 2024. All rights reserved.