从base64编码的src字符串中获取图像类型

时间:2013-09-06 12:58:38

标签: php image

我需要什么

我的图片src看起来像这样

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

如何提取图像类型,即;来自上面给出的src jpeg。我正在使用PHP,图像类型cacn也是png和gif。

16 个答案:

答案 0 :(得分:14)

你基本上有两个选择:

  1. 信任元数据
  2. 直接输入检查图像源
  3. 选项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
    

答案 1 :(得分:5)

测试一下:

<?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));

答案 2 :(得分:5)

这就是我的方式:

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

答案 3 :(得分:4)

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

$f = finfo_open();

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

答案 4 :(得分:1)

您可以使用此功能,如果您使用ajax上传图片,那么您将无法使用finfo_buffer获取正确的MIME

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

答案 5 :(得分:1)

我希望这会有所帮助,但是正确的方法是

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

echo $info['mime'];

请不要仅仅使用 data:image / png ,因为那样不可靠,我可以轻松地伪造该部分并向您发送base64编码的.exe文件。

答案 6 :(得分:0)

使用下面的正则表达式代码,它返回文件的扩展名。

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

答案 7 :(得分:0)

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

结果:jpeg

答案 8 :(得分:0)

此解决方案最适合我,是Boris Guery提出的选项1的支持。

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

在这种情况下,解决方案在jpeg变量中返回$type文件扩展名。

答案 9 :(得分:0)

$str64 = base64 string

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

答案 10 :(得分:0)

这是最适合我的解决方案...

$str = "data:image/jpg;base64,R0lGODlhPQBEAPeoAJow==";
$name = time() . '.' . explode('/', explode(':', substr($str, 0, strpos(str, ';')))[1])[1];

Result: 1564650041.jpg

答案 11 :(得分:0)

String[] strings = base64String.split(",");
String extension;
switch (strings[0]) {//check image's extension
    case "data:image/jpeg;base64":
        extension = "jpeg";
        break;
    case "data:image/png;base64":
        extension = "png";
        break;
    default://should write cases for more images types
        extension = "jpg";
        break;
}

答案 12 :(得分:0)

$ type将返回“ data:image / jpeg”

然后$ extension返回“ jpeg”

php artisan optimize

答案 13 :(得分:0)

这是我的工作方式:

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

function getMimeType($string)
{
    $string = explode(
        ';base64,',
        stristr($string, ';base64,', true)
    );

    if(empty($string[0])){
        return false;
    }

    preg_match('/^data:(.*)\/(.*)/', $string[0], $match);

    return [
        'type' => $match[1],
        'extension' => $match[2],
    ];
}

var_dump(
    getMimeType($string)
);
// array(2) { ["type"]=> string(5) "image" ["extension"]=> string(4) "jpeg" }
// array(2) { ["type"]=> string(5) "video" ["extension"]=> string(3) "mp4" }

答案 14 :(得分:0)

获取base64图像文件类型的最佳方法

    $type = explode('/', mime_content_type($base64_string))[1];

答案 15 :(得分:0)

它对我有用,它是获取 base64 图像文件类型的最佳方式。它只返回文件扩展名,如“png”、“jpg”等

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

返回: jpeg