gpt4 book ai didi

javascript - html5-canvas:将图像文件转换为 DataURL 会引发未捕获的类型错误

转载 作者:太空狗 更新时间:2023-10-29 14:48:48 24 4
gpt4 key购买 nike

我试图在 Javascript 中获取所选图像文件的 Base64/Data URL。用户基本上通过文件输入控件选择图像并生成数据 URL。但是,我收到此错误:

Uncaught TypeError: Failed to execute 'drawImage' on 'CanvasRenderingContext2D': The provided value is not of type '(HTMLImageElement or HTMLVideoElement or HTMLCanvasElement or ImageBitmap)'

HTML:

<body>
<form id="form1">
<div>
<input type="file" id="imageinput" onchange="testit(event)" />
<canvas width="300" height="300" id="mycanvas" style="display: none;"></canvas>
</div>
</form>
</body>

Javascript:

function testit(event) {

var myImage = URL.createObjectURL(event.target.files[0]);

var myCanvas = document.getElementById('mycanvas');

var ctx = myCanvas.getContext('2d');

ctx.drawImage(myImage, 0, 0);

var mydataURL = myCanvas.toDataURL('image/jpg');

alert(mydataURL);

}

为什么这段代码不起作用,伙计们?

最佳答案

您不能直接从 url 将图像绘制到 canvas。您必须创建图像元素/对象才能执行此操作。

var myCanvas = document.getElementById('mycanvas');
var ctx = myCanvas.getContext('2d');
var img = new Image();
img.onload = function(){
ctx.drawImage(img, 0, 0);

alert(myCanvas.toDataURL('image/jpeg'));
};

img.src = URL.createObjectURL(event.target.files[0]);

这里我们创建了一个image 对象并将src 设置为用户选择的图像url。加载图像后,我们将其添加到 Canvas 。

编辑:

这里我们还有一个问题。无论图像大小如何,由于静态 Canvas 宽度和高度,您将始终获得图像的 300x300 裁剪 dataurl。所以我们可以在加载图像后动态设置 Canvas 的宽度和高度。我们可以使用 console.log() 而不是 alert(),这样您就可以在浏览器本身的控制台中打开并查看图像。

myCanvas.width = img.width;
myCanvas.height = img.height;

这是最终代码:

var myCanvas = document.getElementById('mycanvas');
var ctx = myCanvas.getContext('2d');
var img = new Image();
img.onload = function(){
myCanvas.width = img.width;
myCanvas.height = img.height;

ctx.drawImage(img, 0, 0);

console.log(myCanvas.toDataURL('image/jpeg'));
};

img.src = URL.createObjectURL(event.target.files[0]);

这是 fiddle (我已经使 Canvas 可见,以便您可以看到 Canvas 中的整个图像以及宽度和高度的变化):

更新:

如@Kaiido 所述,它将生成 PNG 图像,因为“图像/jpg”不是 mime 类型。 'image/jpeg' 是 JPG 和 JPEG 图像的 mimetype。

更新的 fiddle :

http://jsfiddle.net/k7moorthi/r8soo95p/4/

关于javascript - html5-canvas:将图像文件转换为 DataURL 会引发未捕获的类型错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33024630/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com