我正在尝试从画布中获取图像。 PNG 图像正常,但 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+' /> ')
发生这种情况的原因是画布是透明的。然而,透明度颜色是黑色,具有透明的 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
作为一种替代方法,使用包将透明图像的黑色背景转换为白色或任何其他基于提供的十六进制值, 在我们的
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");
})
});
这适用于 Firefox,
oCanvas.toDataURL("image/jpeg")