canvas.toDataURL会产生纯黑色图像吗?

use*_*947 15 javascript jquery canvas html5-canvas

我有一个画布元素,里面有一些涂鸦.

我使用以下内容将画布转换为jpeg:

var data = canvas.toDataURL( "image/jpeg", 0.5 );
var img = new Image();
img.src = data;
$( "body" ).append( img );
Run Code Online (Sandbox Code Playgroud)

然而,而不是我的涂鸦,我得到一个坚实的黑色jpeg.

谁能告诉我我做错了什么?

谢谢!

sha*_*how 23

这是因为JPEG不支持透明背景..如果你想要支持它使用png(默认扩展名),否则你可以使用设置一个非透明填充颜色到画布.fillStyle和.fillRect


aps*_*ers 12

使用"image/jpeg"类型创建的图像具有默认的黑色背景.考虑下面的画布,其中画布位于左侧,捕获的图像位于右侧:

var canvas = $("#c").get(0), ctx = canvas.getContext("2d");
ctx.fillStyle = "rgb(200,0,0)";
ctx.fillRect(40,60,20,20);

var data = canvas.toDataURL("image/jpeg");
var img = new Image();
img.src = data;
$( "body" ).append( img );

var data = canvas.toDataURL("image/png");
var img = new Image();
img.src = data;
$( "body" ).append( img );
Run Code Online (Sandbox Code Playgroud)
canvas { border: thin solid green; }
img { border: thin solid black; margin-right: 5px; }
body { background-color: #DFF; }
Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<canvas id="c" width="100"></canvas>
Run Code Online (Sandbox Code Playgroud)

如果您只在画布上绘制了黑色形状,则不会在默认的黑色JPEG背景下看到它们.

如果您改为使用该类型image/png,默认情况下背景将是透明的.