相关疑难解决方法(0)

html5 Canvas getImageData或toDataURL的结果 - 哪个占用更多内存?

我的应用程序的一部分包括使用标准的2d上下文画布和webGL的混合的html5照片编辑.

无论如何,当用户操纵他们的照片时,我正在保存"撤消"状态.这些都作为base64图像数据存储在Javascript对象中.

一切都很好,性能也很好.

但是我想知道从getImageData存储数据是否会占用更少的内存或提供更好的性能?

总结一下我的问题是:

这需要更多的内存空间,toDataURL()生成的base64 jpeg或getImageData()的结果?两者之间是否有任何性能差异(关于加载到画布上,以及从画布中提取数据)

提前致谢.

javascript html5 canvas

20
推荐指数
2
解决办法
6456
查看次数

Canvas toDataURL()仅在Firefox中返回空白图像

我正在使用glfx.js来编辑我的图像但是当我试图使用该toDataURL()函数获取该图像的数据时,我得到一个空白图像(宽度与原始图像的大小相同).

奇怪的是,在Chrome中脚本运行完美.

我想提到的是canvas使用onload事件加载图像:

           img.onload = function(){

                try {
                    canvas = fx.canvas();
                } catch (e) {
                    alert(e);
                    return;
                }

                // convert the image to a texture
                texture = canvas.texture(img);

                // draw and update canvas
                canvas.draw(texture).update();

                // replace the image with the canvas
                img.parentNode.insertBefore(canvas, img);
                img.parentNode.removeChild(img);

            }
Run Code Online (Sandbox Code Playgroud)

我的图像的路径也在同一个域上;

问题(在Firefox中)是我点击保存按钮.Chrome会返回预期的结果,但Firefox会返回此信息:

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA7YAAAIWCAYAAABjkRHCAAAHxklEQVR4nO3BMQEAAADCoPVPbQZ/oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
... [ lots of A s ] ... 
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAzwD6aAABkwvPRgAAAABJRU5ErkJggg==
Run Code Online (Sandbox Code Playgroud)

什么可能导致这个结果,我该如何解决?

javascript firefox canvas webgl todataurl

17
推荐指数
1
解决办法
8783
查看次数

HTML将WebGL Canvas另存为图像

我正在使用https://github.com/auduno/clmtrackr

我试图从以下示例中保存图像:https: //github.com/auduno/clmtrackr/blob/dev/examples/facedeform.html

问题是我显然尝试过"canvas.dataToURL()".我可以将网络摄像头的视频作为图像; 但是,叠加图像始终是透明的.

我尝试使用纹理在画布上绘制,但这也无效....

我在这里有一个例子:https://codepen.io/msj121/pen/RgXjYK

我想用覆盖保存整个图像到png,比如我想的"dataToURL".

// when everything is ready, automatically start everything ?

                var vid = document.getElementById('videoel');
                var vid_width = vid.width;
                var vid_height = vid.height;
                var overlay = document.getElementById('overlay');
                var overlayCC = overlay.getContext('2d');
                var webgl_overlay = document.getElementById('webgl');

                // canvas for copying videoframes to
                var videocanvas = document.createElement('CANVAS');
                videocanvas.width = vid_width;
                videocanvas.height = vid_height;

                /*********** Setup of video/webcam and checking for webGL support *********/

                var videoReady = false;
                var imagesReady = …
Run Code Online (Sandbox Code Playgroud)

javascript webgl html5-canvas

5
推荐指数
1
解决办法
5085
查看次数

iOS HTML5 Canvas toDataURL

我需要一些帮助.对于通过HTML 5/Canvas获取图像的base64,我们似乎遇到了iOS问题.如果我们使用画布的默认高度/宽度或硬编码高度和宽度,一切正常.但是,如果我们将画布高度/宽度设置为图像src的高度/宽度,则图像将不会加载到画布中,因此我们不会将图像作为base64.

有效的代码片段:

function convertImageToBase64(imgUrl, callback) {
    var canvas = document.createElement("canvas");
    var context = canvas.getContext('2d');
    // load image from data url
    var imageObj= new Image();
    imageObj.onload = function () {
        var dataUrl;
        context.drawImage(imageObj, 0, 0, canvas.width, canvas.height);

        dataUrl = canvas.toDataURL("image/png");
        callback.call(this, dataUrl);
        canvas = null;
    };
    imageObj.src = imgUrl;
}
Run Code Online (Sandbox Code Playgroud)

代码段在iOS上不起作用但在Android上有效:

function convertImageToBase64(imgUrl, callback) {
    var canvas = document.createElement("canvas");
    var context = canvas.getContext('2d');
    // load image from data url
    var imageObj= new Image();
    imageObj.onload = function () {
        var dataUrl; …
Run Code Online (Sandbox Code Playgroud)

javascript html5 canvas ios

4
推荐指数
1
解决办法
5392
查看次数

标签 统计

javascript ×4

canvas ×3

html5 ×2

webgl ×2

firefox ×1

html5-canvas ×1

ios ×1

todataurl ×1