我需要什么
我的图像来源看起来像这样
data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAA...
我如何从上面给出的src中提取图像类型,例如jpeg
?我正在使用PHP,图像类型也可以是png/gif/jpg。
你基本上有两个选择:
可能是更快的方法,因为它只涉及字符串分割,但可能不正确。 类似于:
$data = 'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAA.';
$pos = strpos($data, ';');
$type = explode(':', substr($data, 0, $pos))[1];
使用getimagesize()
函数及其字符串等效函数:
$info = getimagesizefromstring(explode(',', base64_decode($data)[1], 2));
// $info['mime']; contains the mimetype
测试这个:
<?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));
substr($str, $start [, $length])
。起始点是第六个字符,即冒号后面(= 5个字符)。所需的子字符串一直到 ;
,长度为:
(不包括)到;
(不包括)之间的索引,就是;
位置减去 :
位置。 - ComFreek$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文件。
我是这样做的:
$uri = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAF......."
$img = explode(',', $uri);
$ini =substr($img[0], 11);
$type = explode(';', $ini);
echo $type[0]; // result png
$encoded_string = "....";
$imgdata = base64_decode($encoded_string);
$f = finfo_open();
$mime_type = finfo_buffer($f, $imgdata, FILEINFO_MIME_TYPE);
function getMIMETYPE($base64string){
preg_match("/^data:(.*);base64/g",$base64string, $match);
echo $match[1];
}
$str64 = base64 string
function base64Extension($str64) {
return explode(";", explode("/", $str64)[1])[0];
}
$str = 'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAA...';
$ext = end(explode('/', (explode(';', $str))[0]));
结果:jpeg
$base64string = 'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAA...';
preg_match("/^data:image\/(.*);base64/i",$base64string, $match);
$extension = $match[1];
这对我很有效,也是获取base64图像文件类型的最佳方法。它只返回文件扩展名,如'png'、'jpg'等。
$photo = data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAA...
$ext = explode('/',explode(':',substr($photo,0,strpos($photo,';')))[1])[1];
返回:jpeg