PNG — Как мне преобразовать изображения из базы 64 в их типы файлов в PHP?

У меня есть объекты, содержащие изображения в виде строк 64, объект также содержит имена файлов для изображений и типов файлов (jpeg, png, gif & BMP) для изображений.
В строках base 64 уже есть теги (например, «data: image / png; base64»), удаленные с самого начала.

Формат для объектов ($ myImg) следующий:

  • $ myImg-> fileName содержит имя, под которым должно быть сохранено преобразованное изображение.

  • $ myImg-> fileType описывает формат, в котором предполагается сохранить файл — это используется для указания расширения пути в функции fopen ().

  • $ myImg-> b64 содержит 64-битную двоичную строку, которая представляет изображение.

Код для моей функции выглядит следующим образом:

function toImg(ImageString $myImg){
//Output file is in the same directory as the PHP script.
//Uses the object's filetype attribute as the file extension.
$outputFile = fopen($myImg->fileName . "." . $myImg->fileType, "w");
$image = base64_decode($myImg->b64);
fwrite($outputFile, $image);
fclose($outputFile);
}

Функция создает файлы изображений, но я получаю ошибки при попытке просмотреть их в Xubuntu Image Viewer. Ошибки заключаются в следующем:

  • Ошибка при интерпретации файла изображения JPEG (не файл JPEG: начинается с 0x14 0x00)

  • Неустранимая ошибка чтения файла изображения PNG: не файл PNG.

  • Файл не является файлом GIF.

  • Изображение BMP содержит фиктивные данные заголовка.

Я просмотрел и выполнил инструкции по преобразованию base64 в изображения, но ни один из них не сталкивался с этими ошибками.

-1

Решение

Попробуйте показать встроенное изображение в браузере, например так:

<img src="data:image/png;base64,the-base64-string" />

(менять png в правильном формате изображения)

Если изображение все еще повреждено, то данные изображения недействительны.

1

Другие решения

Вы можете декодировать изображение из base64 следующим образом:

function base64_to_jpeg_img($base64_img_string, $output_img) {
$input_file_open = fopen($output_img, "wb");

$data = explode(',', $base64_img_string);
fwrite($input_file_open, base64_decode($data[1]));
fclose($input_file_open);

return $output_img;
}

Надеюсь это поможет!

0

По вопросам рекламы [email protected]