Используя PHP, я пытаюсь сгенерировать изображение из datauri. Это прекрасно работает, если я жестко закодирую строку для декодирования следующим образом:
$sourceString = "iVBORw0KGgoAAAANSUhEUgAAAJ8AAAArCAYAAABmQFqDA..."; // I truncated the actual string for this example...
$destination = $_SERVER['DOCUMENT_ROOT'].'/test.jpeg';
$image = imagecreatefromstring(base64_decode($sourceString));
imagejpeg($image, $destination, 100);
Это работает нормально и создает изображение с именем «test.jpeg» в моей корневой папке.
Моя проблема в том, что если я возьму данные из переменной POST, это не сработает. Вот мой код:
$sourceString = $_POST['data'];
$destination = $_SERVER['DOCUMENT_ROOT'].'/test.jpeg';
$image = imagecreatefromstring(base64_decode($sourceString));
imagejpeg($image, $destination, 100);
В приведенном выше примере я подтвердил, что $ sourceString содержит то же самое точное содержимое, что и при жестком кодировании его в моем первом примере. Во втором примере я получаю следующие ошибки:
[09-Sep-2015 16:54:00 UTC] PHP Warning: imagecreatefromstring(): gd-png: fatal libpng error: Read Error: truncated data in request.image_paste.php on line 10
[09-Sep-2015 16:54:00 UTC] PHP Warning: imagecreatefromstring(): gd-png error: setjmp returns error condition in request.image_paste.php on line 10
[09-Sep-2015 16:54:00 UTC] PHP Warning: imagecreatefromstring(): Passed data is not in 'PNG' format in request.image_paste.php on line 10
[09-Sep-2015 16:54:00 UTC] PHP Warning: imagecreatefromstring(): Couldn't create GD Image Stream out of Data in request.image_paste.php on line 10
[09-Sep-2015 16:54:00 UTC] PHP Warning: imagejpeg() expects parameter 1 to be resource, boolean given in request.image_paste.php on line 11
Я не понимаю, что может быть не так. Я попытался привести переменную как строку:
$sourceString = (string)$_POST['data'];
Но это не помогло.
Кто-нибудь знает, что может быть не так?
Задача ещё не решена.
Других решений пока нет …