从PHP写入映像文件时出错

GAg*_*new 2 php image file-writing

我试图从blob写入图像文件.

 if($_POST['logoFilename'] != 'undefined'){
  $logoFile = fopen($_POST['logoFilename'], 'w') or die ("Cannot create ".$_POST['logoFilename']);

  fwrite($logoFile, $_POST['logoImage']);

  fclose($logoFile);
}
Run Code Online (Sandbox Code Playgroud)

在前面的代码片段中,$_POST['logoImage']是一个BLOB.该文件已正确写入根目录,但无法打开该文件.在ubuntu 11.04中,我收到以下错误:

Error interpreting JPEG image file (Not a JPEG file: starts with 0x64 0x61).
Run Code Online (Sandbox Code Playgroud)

如果我创建一个img并设置其src = blob,则BLOB会正确显示

下面是BLOB的第一个片段:

data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEBLAEsAAD/2wBDAAgGBgcGBQgHBwcJCQ
Run Code Online (Sandbox Code Playgroud)

Gor*_*don 8

您的"Blob"实际上是一个数据URI:

data:[<MIME-type>][;charset=<encoding>][;base64],<data>
Run Code Online (Sandbox Code Playgroud)

由于您只需要解码数据部分,您必须这样做

file_put_contents(
    'image.jpg',
    base64_decode( 
        str_replace('data:image/jpeg;base64,', '', $blob)
    )
);
Run Code Online (Sandbox Code Playgroud)

但是由于PHP本身支持data:// streams,你也可以这样做(感谢@NikiC)

file_put_contents('image.jpg', file_get_contents($blob));
Run Code Online (Sandbox Code Playgroud)

如果上述方法无效,您可以尝试使用GDlib:

imagejpg(
    imagecreatefromstring(
        base64_decode( 
            str_replace('data:image/jpeg;base64,', '', $blob)
        )
    ), 
    'image.jpg'
);
Run Code Online (Sandbox Code Playgroud)