У меня есть объекты, содержащие изображения в виде строк 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 в изображения, но ни один из них не сталкивался с этими ошибками.
Попробуйте показать встроенное изображение в браузере, например так:
<img src="data:image/png;base64,the-base64-string" />
(менять png
в правильном формате изображения)
Если изображение все еще повреждено, то данные изображения недействительны.
Вы можете декодировать изображение из 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;
}
Надеюсь это поможет!