Node Js запись в файл из base64 ошибки результата «Неверная структура JPEG: два маркера SOF» при декодировании из php строки base64 - PullRequest
0 голосов
/ 28 марта 2020

У меня есть Node Js, который может извлечь строку base64 и сохранить ее в изображение, это мой Node Js Код:

=== NODE JS CODE ===

var q = req.body;
var extention = ".jpg";
var dir = "img/customer/idcard/";

var base64Data = q.image.replace(/^data:image\/\w+;base64,/, "");

fs.unlink("../" + dir + OldGambar + extention, (err) => {
  if (err) console.log(err);
 // console.log(OldGambar + ' was deleted');
});

require("fs").writeFile("../" + dir + NewGambar + extention, base64Data, 'base64', function(err) {
  if (err) console.log(err);
});

Ниже приведен мой код для преобразования изображения в строку Base64 с использованием Android (JAVA):

Bitmap image = ((BitmapDrawable) varimgIDCard.getDrawable()).getBitmap();
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
Encode = Base64.encodeToString(byteArrayOutputStream.toByteArray(),Base64.DEFAULT);

, а в JAVA все работает правильно, и само изображение можно открыть без каких-либо ошибка

Ниже приведен мой код для преобразования изображения в Base64 с использованием PHP:

$path = $dest.$a;
$type = pathinfo($path, PATHINFO_EXTENSION);
$data = file_get_contents($path);
$strimg = 'data:image/' . $type . ';base64,' . base64_encode($data);

Приведенный выше код также не имеет проблем или ошибок при создании файла, но при открытии файл. Это приводит к ошибке «Неверная структура JPEG: два маркера SOF»

Почему это происходит? я что-то не так делаю в кодировке PHP?

кстати, вот результат SUCCESS Base64 из Android (JAVA): https://drive.google.com/open?id=1G2XHJxE6QJ0GjQcU5pclP3x7mIxMECzo

кстати, вот результат UNSUCCESSFUL Base64 из PHP: https://drive.google.com/open?id=1PXueFtaws5iT-BlFbpvoGhNzCmT6_8Lp

И да, по какой-то причине base64 из PHP является однострочным, а * Это не 1048 *, что, вероятно, является основной причиной сбоя PHP.

о, и вот скриншот изображения, которое нельзя открыть из base64 PHP:

enter image description here

1 Ответ

0 голосов
/ 30 марта 2020

Ответ был на самом деле очень прост, я смотрю и проверяю разницу между Base64 до отправки и Base64 после отправки, и в последнем Base64 отсутствовал символ '+'.

POST PHP удалял строку '+' из моего Base64, поэтому я использовал str_replace и изменил код следующим образом:

$path = $dest.$a;
$type = pathinfo($path, PATHINFO_EXTENSION);
$data = file_get_contents($path);
$strimg = 'data:image/' . $type . ';base64,' . base64_encode($data);

Into This:

$path = $dest.$a;
$type = pathinfo($path, PATHINFO_EXTENSION);
$data = file_get_contents($path);
$strimg = 'data:image/' . $type . ';base64,' . base64_encode($data);
$strimg = str_replace("+","%2B",$strimg);

И теперь все работает правильно

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...