Получить тип изображения из base64 encoded src string

ЧТО Я НЕОБХОДИМА

Мое изображение src выглядит следующим образом

data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAA...

Как я могу извлечь тип изображения ie; jpeg из приведенного выше src. Я использую PHP, а тип изображения cacn также png и gif.

Ответ 1

У вас есть в основном два варианта:

  • Доверяйте метаданные
  • Введите непосредственно источник изображения.

Вариант 1:

Вероятно, более быстрый путь, потому что он включает только разделяющую строку, но может быть неправильной. Что-то вроде:

$data = 'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAA.';
$pos  = strpos($data, ';');
$type = explode(':', substr($data, 0, $pos))[1];

Вариант 2:

Используйте getimagesize() и эквивалент для строки:

$info = getimagesizefromstring(explode(',', base64_decode($data)[1], 2));
// $info['mime']; contains the mimetype

Ответ 2

Вот так я сделал:

$uri = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAF......."
$img = explode(',', $uri);
$ini =substr($img[0], 11);
$type = explode(';', $ini);
echo $type[0]; // result png

Ответ 3

Проверьте это:

<?php

$str = 'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAA...';

function getB64Type($str) {
    // $str should start with 'data:' (= 5 characters long!)
    return substr($str, 5, strpos($str, ';')-5);
}
var_dump(getB64Type($str));

Ответ 4

$encoded_string = "....";
$imgdata = base64_decode($encoded_string);

$f = finfo_open();

$mime_type = finfo_buffer($f, $imgdata, FILEINFO_MIME_TYPE);    

Ответ 5

Вы можете использовать это, если вы используете ajax для загрузки изображений, тогда вы не получите правильный MIME с помощью finfo_buffer

function getMIMETYPE($base64string){
    preg_match("/^data:(.*);base64/g",$base64string, $match);
    echo $match[1];
}

Ответ 6

Я надеюсь, что это помогает, но правильный способ сделать это.

$uri = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAF......."
$encodedImgString = explode(',', $uri, 2)[1];
$decodedImgString = base64_decode($encodedImgString);
$info = getimagesizefromstring($decodedImgString);

echo $info['mime'];

Пожалуйста, не просто используйте, data: image/png, так как это ненадежно, я мог бы легко подделать эту часть и отправить вам файл .exe в кодировке base64.

Ответ 7

Используйте ниже код регулярного выражения, он возвращает расширение файла.

$base64string = 'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAA...';
preg_match("/^data:image\/(.*);base64/i",$base64string, $match);
$extension = $match[1];

Ответ 8

$str = 'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAA...';
$ext = end(explode('/', (explode(';', $str))[0]));

Результат: JPEG

Ответ 9

Это решение работало лучше всего для меня, совмещая вариант 1, представленный Борисом Гери.

$data = 'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAA...';
$pos  = strpos($data, ';');
$type = explode('/', substr($data, 0, $pos))[1];

В этом случае решение возвращает расширение файла jpeg в переменной $type.

Ответ 10

$str64 = base64 string

function base64Extension($str64) {
  return explode(";", explode("/", $str64)[1])[0];
}