簡體   English   中英

從 base64 編碼的 src 字符串中獲取圖像類型

[英]Get image type from base64 encoded src string

我的要求

我的圖像 src 看起來像這樣

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

如何提取圖像類型,即; jpeg來自上面給出的 src。 我正在使用 PHP,圖像類型 cacn 也是 png 和 gif。

那么你基本上有兩個選擇:

  1. 信任元數據
  2. 直接打字查看圖片來源

選項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

測試這個:

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

這是我制作的方式:

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

我希望這會有所幫助,但正確的方法是。

$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 文件。

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

$f = finfo_open();

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

您可以使用它,如果您使用 ajax 上傳圖像,那么您將無法使用 finfo_buffer 獲得正確的 MIME

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];
}

使用下面的正則表達式代碼,它返回文件的擴展名。

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

結果:jpeg

這個解決方案最適合我,搭載了 Boris Guery 提出的選項 1。

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

在這種情況下,解決方案在$type變量中返回jpeg文件擴展名。

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;
}

$type 將返回 "data:image/jpeg"

然后 $extension 返回“jpeg”

  $type      = explode(';', $httpFileRequest)[0];
  $extension = explode('/', $type)[1];

這就是我的做法:

$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" }

獲取 base64 圖像文件類型的最佳方法

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

它對我有用,它是獲取 base64 圖像文件類型的最佳方法。 它只返回文件擴展名,如“png”、“jpg”等

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

返回: jpeg

這是對我有用的最佳解決方案......

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

Result: 1564650041.jpg

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM