web-dev-qa-db-fra.com

Obtenir le type d'image de la chaîne src codée en base64

CE QUE J'EXIGE

Mon image src ressemble à ceci

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

Comment puis-je extraire le type d'image ie; jpeg de la src ci-dessus donné. J'utilise PHP et le type d'image peut aussi être png et gif.

10
Developer

Eh bien, vous avez essentiellement deux options:

  1. Faire confiance aux métadonnées
  2. Tapez vérifier la source de l'image directement

Option 1:

Probablement le moyen le plus rapide, car il ne s'agit que de scinder une chaîne, mais cela peut être incorrect. Quelque chose comme:

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

Option 2:

Utilisez getimagesize() et c'est équivalent pour string:

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

Testez ceci:

<?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
ComFreek

C'est comme ça que j'ai fait:

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

$f = finfo_open();

$mime_type = finfo_buffer($f, $imgdata, FILEINFO_MIME_TYPE);    
2
Juanes Rios

Vous pouvez l'utiliser si vous utilisez ajax pour télécharger des images, alors vous n'obtiendrez pas le bon MIME avec finfo_buffer

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

J'espère que cela aide mais la façon correcte de le faire est.

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

echo $info['mime'];

S'il vous plaît, n'utilisez pas simplement les, data: image/png , car ce n'est pas fiable, je pourrais facilement simuler cette partie et vous envoyer un fichier .exe encodé en base64.

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

Résultat: jpeg

0
Adam Pery

Utilisez ci-dessous le code regex, il retourne l'extension d'un fichier.

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