Javascript Three.js canvas.toDataURL()是否已损坏?
我在一段时间前进行了系统升级,之后我开始注意到Chromium的一些问题。其中一个问题是在我的Three.js r85项目开始加载之前,铬挂起几秒钟。我已经升级到Three.js r90,这个问题消失了 但是,即使使用最新版本的Three.js,toDataUrl()似乎也不再有效。以下是与我自己的代码类似的代码,在Firefox中运行良好,但在Chromium中不起作用:Javascript Three.js canvas.toDataURL()是否已损坏?,javascript,three.js,html5-canvas,chromium,archlinux,Javascript,Three.js,Html5 Canvas,Chromium,Archlinux,我在一段时间前进行了系统升级,之后我开始注意到Chromium的一些问题。其中一个问题是在我的Three.js r85项目开始加载之前,铬挂起几秒钟。我已经升级到Three.js r90,这个问题消失了 但是,即使使用最新版本的Three.js,toDataUrl()似乎也不再有效。以下是与我自己的代码类似的代码,在Firefox中运行良好,但在Chromium中不起作用: renderer = new THREE.WebGLRenderer({ preserveDrawingBuffer: t
renderer = new THREE.WebGLRenderer({ preserveDrawingBuffer: true });
我也尝试过不将preserveDrawingBuffer
设置为true,并在调用渲染场景后立即调用toDataUrl()。它也不再工作了
renderer.render( scene, camera );
var screenshot = renderer.domElement.toDataURL();
还有其他人经历过这种行为吗?除了使用toDataUrl()将纹理渲染到图像上,还有其他方法吗
Chrome版本65.0.3325.146(开发者版本)(64位)Chrome还可以,但是您应该使用代理画布来保存注释中提到的图像
let canvas = document.createElement('canvas');
canvas.width = 512;
canvas.height = 512;
let canvasCtxt = canvas.getContext('2d');
canvasCtxt.drawImage(editor.renderer.domElement, 0, 0, canvas.width, canvas.height);
canvas.toBlob(function(blob){
blob.name = 'test.png';
var link = document.createElement('a');
link.href = URL.createObjectURL(blob);
link.download = 'test.png';
link.click();
});
FWIW,在osx上使用Chrome(到金丝雀)。作为一种盲射和无铬测试,您确定没有安全/指纹保护插件/设置吗?你有一个2d上下文的结果吗?在osx上的Chrome上试用过,它在那里也有效。@Kaido它在Windows上的Chrome上对我也有效。我尝试禁用所有扩展。2D上下文是有效的。所以最好的方法是报告它。现在,如果您需要快速修复,您可以尝试通过2D上下文作为代理(
twoDCtx.drawImage(webgl_canvas,0,0);twoDCanvas.toDataURL();
),但这是假设drawImage
有效。。。如果没有,您可以尝试在ImageData的缓冲区中读取像素,然后将ImageData放在2DContext.lol上,看起来我的基本three.js旋转框正在扩展。Scrrenshot仍在为我工作,windows 10上的Chrome(版本65.0.3325.146(官方版本)(64位))