【发布时间】:2015-03-23 19:27:37
【问题描述】:
当保存到磁盘或上传到服务器时,Canvas 图像在 Chrome 和 Firefox (Mac) 中会产生可怕的颜色变化。 Safari 拥有忠实的色彩。下面的示例 + JSFiddle 用原始图像重现。请注意拍摄对象的脸是如何变得非常橙色的。
http://jsfiddle.net/E4yRv/141/ :: 包括有关如何重现的示例图片的分步说明
代码摘录:
canvas.ondrop = function(e) {
e.preventDefault();
var file = e.dataTransfer.files[0],
reader = new FileReader();
reader.onload = function(event) {
var img = new Image(),
imgStr = event.target.result,
imgData = context.getImageData(0,0, context.width,context.height);
state.innerHTML += ' Img source dropped in: <a href="' +
imgStr + '" target="_blank">save image</a><br />';
img.src = event.target.result;
img.onload = function(event) {
context.height = canvas.height = this.height;
context.width = canvas.width = this.width;
context.drawImage(this, 0, 0);
state.innerHTML += ' Canvas img drawn: <a href="' + canvas.toDataURL("image/jpeg", 1.0) + '" target="_blank">save canvas</a> <br />*add .jpg extension when saving';
};
};
reader.readAsDataURL(file);
return false;
};
当画布在各自的浏览器中绘制图像时,颜色渲染以匹配原始颜色。但是,如果将图像保存到本地磁盘并在 Photoshop(唯一知道如何真正处理颜色的程序)中查看,颜色就会发生变化!如果在不同的浏览器中查看保存的文件,也会发生同样的情况。
在 Photoshop 中检查图像,没有嵌入颜色配置文件。但是,发生了一些颜色的翻译!这似乎不是配置文件未对齐或缺少配置文件的情况。
我在下面制作了一个详细的 JS-Fiddle,说明如何重现该问题。 http://jsfiddle.net/E4yRv/141/
【问题讨论】:
-
您能否提供一张您遇到此问题的图片供我们测试?
-
@AlexanderO'Mara 测试图片在这里:i.imgur.com/1UAqEU4.jpg
-
测试图片也可以在我这里测试:jsfiddle.net/E4yRv/141
-
啊,一定是错过了。我正在尝试它,它在 Firefox 中看起来不像在 Safari 中那样橙色,就像在你的屏幕截图中那样。你如何比较它们?如果您直接在 Firefox 中打开图像,或者仅在绘制到画布上时,它是否看起来是橙色的?保存后,它在画布上是橙色的,还是两者兼而有之?
-
将画布元素保存到磁盘并在 Photoshop 中打开。如果您在 Firefox 中创建画布图像,它在屏幕上看起来是一样的。如果您保存图像(到服务器或本地磁盘)并在 Safari 中查看它,颜色将会发生变化。 Safari 使用实际图像数据进行颜色渲染不是问题,在 Photoshop 中打开图像会显示颜色发生了变化。
标签: image firefox canvas html5-canvas filereader