Как записать картинку/видео из blob в файл?
Существует ссылка на blob(в данном случае, это png-картинка) - blob:https://localhost/d59ff69d-f098-4006-b67f-633e25d13a24. Каким способом можно сохранить картинку на серваке используя данный BLOB? При попытке сохранить, файл либо сохранялся полностью пустым, либо весил несколько десятков байт. Вот пример кода:
$file = $data['media']['preview'];//получаю blob
$newFile = fopen($_SERVER['DOCUMENT_ROOT'].'/uploads/tmp/'.$name,'w+');//открываю файл, если его нет - создаю
$image = imagecreatefromstring($file); // пытаюсь преобразовать blob в изображение
fwrite($newFile,$image);
fclose($newFile);
Как можно решить данную проблему?
ОБНОВЛЕНО Используя XHR попробовал достать изображение из буфера по BLOB URL и получил XHR ответ. Теперь вопрос, как достать изображение из этого ответа..?
let blobURL = 'blob:http://localhost:3000/d4635d71-de54-4154-bd90-73f39ead87ad'
let xhr = new XMLHttpRequest();
xhr.responseType = "blob";
xhr.onload = function() {
let recoveredBlob = xhr.response
let reader = new FileReader()
reader.onload = function() {
let blobAsDataUrl = reader.result
window.location = blobAsDataUrl //(*)
}
reader.readAsDataURL(recoveredBlob)
}
xhr.open("GET", blobURL)
xhr.send()
Not allowed to navigate top frame to data URL: data:image/png;base64,R0lGODlhAAQABPcAAAAAAOYD5QOa5ZvoA+jo5wNi5u....
ОБНОВЛЕНО В ошибке, которая была в консоли (*) было сказано, что он не может открыть данную ссылку в новом окне. Ещё немного почитав про сам формат BLOB, понял, что его можно декодировать используя метод base64_decode, получив тем самым нужное изображение прямиком из буфера обмена.
Ответы (1 шт):
Если я правильно понял вопрос, то вам необходимо использовать base64_decode($file), чтобы декодировать картинку для использования функции imagecreatefromstring. Пример:
$file = file_get_contents('file.blob');
$image = imagecreatefromstring(base64_decode($file));
header('Content-Type: application/png');
echo imagepng($image);
imagedestroy($image);