通过PHP保存png时出现深色图像

Posted

技术标签:

【中文标题】通过PHP保存png时出现深色图像【英文标题】:Dark image get while saving a png through PHP 【发布时间】:2016-05-17 23:04:51 【问题描述】:

我正在尝试使用移动设备保存从 html5/Canvas 捕获的图像。我正在使用 php (symfony2)。 我按照这篇文章 (How to save a PNG image server-side, from a base64 data source) 中的说明进行操作,但我保存了一张深色的空白图像,而不是我捕获的图像。

这是我的 javascript 帖子代码:

var dataUrl = canvas.toDataURL();
$.ajax(
    type: "POST",
    url: " path("personne_photo_capture","id":entity.personne.id) ",
    data: 
        imgBase64: dataUrl
    
).done(function (msg) 
    $('#msg').html(msg); 

).fail(function (xhr, textStatus, errorThrown) 
    $('#msg').html(xhr.responseText);
); 

还有 PHP 保存代码:

$rawData = $_POST['imgBase64'];
if (isset($rawData)) 
    $filteredData = explode('base64,', $rawData);
    $data = base64_decode($filteredData[1]);  
    $filename = "profil.png";
     file_put_contents('picts/small/' . $filename, $data);

【问题讨论】:

How to save a PNG image server-side, from a base64 data string的可能重复 只是好奇,如果你这样做会发生什么 var dataUrl = canvas.toDataURL(); var img=document.createElement("img");img.src=dataUrl; document.body.appendChild(img); 哇,我也有同样的问题,来自 CHROME 48 的 base64 没用(无效的 png 格式),但来自 FIREFOX 43 的 base64 工作得很好! ...在 Firefox 中尝试您的代码,它可以工作吗? 【参考方案1】:

首先,确保在客户端指定数据类型为

 dataType: 'text',

在服务器端将前两个语句替换为:

$data = base64_decode(preg_replace('#^data:image/\w+;base64,#i', '', $data));

对于进一步的指针,请在先前提出的问题处循环

How to save a PNG image server-side, from a base64 data string

【讨论】:

爆炸代码对我来说看起来不错,我怀疑 preg_replace 会做得更好

以上是关于通过PHP保存png时出现深色图像的主要内容,如果未能解决你的问题,请参考以下文章

在 SQliteDatabase 中保存图像时出现 OutOfMemoryError

尝试保存在本地编辑的图像时出现异常

在 PHP 中使用 Imagick 将 svg 转换为 png 时出现奇怪的裁剪问题

使用 OpenCV VideoWriter 保存灰度图像时出现 Gstreamer 错误

在 WPF C# 中保存图像时出现错误 System.UnauthorizedAccessException 在 mscorlib.dll 中发生

使用 ImageMagick 将 gif 转换为 png 时出现“转换:不正确的图像标题”错误