【问题标题】:How to test if a base64 string is a valid image in PHP? [duplicate]如何测试base64字符串是否是PHP中的有效图像? [复制]
【发布时间】:2015-04-12 20:19:32
【问题描述】:

如何在 PHP 中测试 base64 字符串是否为有效图像?

我尝试了以下代码:

function convertAndSaveLogo($data, $id){
        if(isset($data->base64_image) && $data->base64_image){
            $imageData = base64_decode($data->base64_image);
            if($imageData){
                $source = imagecreatefromstring($imageData);
                if($source){
                    imagepng($source, getcwd()."../dir/image/".$id.".png", 5);
                    imagedestroy($source);
                }
            }
        }
    }

但它不起作用。

【问题讨论】:

  • 数据是数据 uri 还是只是 base64 编码的图像?
  • @Musa base64 字符串是用户提供的数据,我需要知道它是否是有效的编码图像
  • 那你的函数不起作用怎么办?
  • @Musa 如果 base64 字符串是无效的编码图像,则函数 imagecreatefromstring 将抛出错误
  • 所以它不应该抛出错误?

标签: php image base64


【解决方案1】:

试试这个:

if(base64_encode(base64_decode($img, true)) === $img)
   echo 'is a Base64-encoded string' ;

【讨论】:

【解决方案2】:

看两件事

  1. 如果 $data->base64_image 不包含以下内容: 'data:image/jpeg;base64,',在我的情况下,将其替换为空即可:

    //in my case base64 data resides in: \Input::all()['img_data']
    $base64img = str_replace(
         'data:image/jpeg;base64,', 
         '', 
         \Input::all()['img_data']
    );
    
    $data = base64_decode($base64img);
    
  2. 如果您要保存,也可以查看solution

    // if it returns FALSE then the uploaded file
    // isn't a valid image
    getimagesize($created_file); 
    

【讨论】:

  • 如果 base64 不是有效的编码图像,我不想保存文件。所以我不能使用getimagesize。
猜你喜欢
  • 1970-01-01
  • 2011-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-12
  • 1970-01-01
  • 2019-03-15
  • 2017-05-23
相关资源
最近更新 更多