php 获取base64编码字符串的文件扩展名

zbsbpyhn  于 2022-11-21  发布在  PHP
关注(0)|答案(4)|浏览(273)

如何在PHP中获得 base64 编码字符串的文件扩展名?
在我的例子中,这个文件恰好是一个 image

$base64_encoded_string = $_POST['image_base64_string'];

$extension = ??

我如何才能从$base64_encoded_string获得文件扩展名?

**编辑:**这不是上载表单得一部分,因此此处不能使用$_FILES数据.

64jmpszr

64jmpszr1#

这对我很有效

function getBytesFromHexString($hexdata)
{
  for($count = 0; $count < strlen($hexdata); $count+=2)
    $bytes[] = chr(hexdec(substr($hexdata, $count, 2)));

  return implode($bytes);
}

function getImageMimeType($imagedata)
{
  $imagemimetypes = array( 
    "jpeg" => "FFD8", 
    "png" => "89504E470D0A1A0A", 
    "gif" => "474946",
    "bmp" => "424D", 
    "tiff" => "4949",
    "tiff" => "4D4D"
  );

  foreach ($imagemimetypes as $mime => $hexbytes)
  {
    $bytes = getBytesFromHexString($hexbytes);
    if (substr($imagedata, 0, strlen($bytes)) == $bytes)
      return $mime;
  }

  return NULL;
}

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

来源:https://newbedev.com/detecting-image-type-from-base64-string-in-php

ztigrdn8

ztigrdn82#

//This function return the extension from mimetype
function getImageMimeType(string $encodedImage)
{
    $decodedImage = base64_decode($encodedImage);
    return (explode('/', finfo_buffer(finfo_open(), $decodedImage, FILEINFO_MIME_TYPE))[1]);
}
    
$encodedImage = '        ';
$extension = getImageMimeType($encodedImage);
echo $extension;
x4shl7ld

x4shl7ld3#

下面是一句由**@msg的**答案启发而来的俏皮话:

$extension = explode('/', mime_content_type($base64_encoded_string))[1];
yeotifhr

yeotifhr4#

如果这是上载表单的一部分,您可以从$_FILES variable获取有关文件的信息。
如果它是一个原始字段,你可以解码它,并通过mime_content_type或等效的运行它,并采取猜测。
如果您愿意使用库,则可以查看mimeyphp-mimetyper

相关问题