【发布时间】:2015-08-14 05:06:32
【问题描述】:
我有一个简单的 HTML5 Canvas 对象,一旦保存到文件中,它会在 Photoshop 中完美打开并且看起来正确,但根据 Windows 和 OSX 的说法是“损坏”或“损坏”。
我使用的代码很简单:
JavaScript:
var dataURL = canvas.toDataURL({
format: 'jpeg',
quality: 0.8
});
然后通过 AJAX 发送dataURL:
$.ajax({
type: "POST",
url: "scripts/saveImage.php",
data: {
imgBase64: dataURL
}
})
到一个简单的 PHP 脚本:
$imageBase64 = $_POST['imgBase64'];
$imageData = base64_decode($imageBase64);
file_put_contents($fileName,$imageData);
文件是创建文件。我可以在 Photoshop 中打开它,它看起来完全符合预期。十六进制编辑器显示其标题中包含 JFIF,这与您对 JPEG 的期望一样:
但您无法在 Windows 或 OSX 预览中打开文件:
我做错了什么吗?文件头中是否有一些东西让 Windows/OSX 无法正常工作?还是以这种方式创建的 JPEG 的预期行为?
【问题讨论】:
-
这是
toDataURL({ format: 'jpeg', quality: 0.8 })浏览器API?或者您正在使用一些额外的库?附加插件?据我所知,正确的用法是:canvas.toDataURL("image/jpeg", 0.8); -
能否附上损坏的 JPEG 文件?
-
我正在使用 FabricJS,也许这就是原因?我看看能不能附上图片。
-
我也遇到了同样的问题,原来“dataURL”是以
data/base64encoded或类似的东西开头的,然后跟着图片走。我不得不删除开头,然后它起作用了。编辑:这是确切的代码base64_decode(str_replace(' ', '+', str_replace('data:image/png;base64,', '', \Input::data('base64image')))); -
@php_nub_qq 非常感谢!!!把它放在一个答案中,我会接受。
标签: javascript php html canvas fabricjs