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

Dev*_*per 14 php image

我需要什么

我的图像src看起来像这样

data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAA...
Run Code Online (Sandbox Code Playgroud)

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

Bor*_*éry 20

Well you have basically two options:

  1. Trust the metadata
  2. Type check the image source directly

Option 1:

Probably the quicker way because it only involve splitting string, but it may be incorrect. Something like:

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

Option 2:

Use getimagesize() and it's equivalent for string:

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


Com*_*eek 7

测试一下:

<?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));
Run Code Online (Sandbox Code Playgroud)


Tia*_*des 5

这是我做的方法:

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


Mat*_*mas 5

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

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

echo $info['mime'];
Run Code Online (Sandbox Code Playgroud)

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