Php |验证base64_decode为图像|不工作

时间:2017-01-09 22:48:29

标签: php jquery

我创建了一个函数,它将返回所提供的base64_decode参数的文件类型。如果它不是图像,则该函数将返回false。但是,当传入编码图像时(通过jquery ajax(FormData对象)),该函数每次都返回false。我尝试过很多东西,但是无法让它发挥作用。

编辑:我现在收到一个Javascript错误,这里是:
“未捕获的SyntaxError:位于0的JSON中的意外标记”“

function base64_extension($base64){
    $base64 = str_replace("data:image/png;base64,", "", $base64);
    $base64 = base64_decode($base64);

    $base64 = imagecreatefromstring($base64);

    if(!$base64){
        return 0; /* Not image */
    }


    if(imagepng($base64)){
        imagedestroy($base64);
        return 1;
    }else if(imagejpeg($base64)){
        imagedestroy($base64);
        return 2;
    }
    else if(imagegif($base64)){
        imagedestroy($base64);
        return 3;
    }
    else{
        return 4; /* Not image */
    }
}

客户端

var cropCanvas = $('#user-img').cropper('getCroppedCanvas');
var cropImg = cropCanvas.toDataURL("image/jpeg");
var formData = new FormData();
formData.append('pic', cropImg);

然后我将formData传递给ajax。

1 个答案:

答案 0 :(得分:-1)

正如Jonathan Kuhn所说

  

使用任何imagecreate *函数创建图像后,无论输入格式是什么,都可以输出任何类型的图像,如png,jpg,gif。创建图像意味着它采用GD的格式,扩展可以操作,然​​后以它理解的任何图像格式输出。

所以你的方法是错误的,你可以使用finfo_ *函数获得已解码的base64的MIME类型。

例如:

$base64 = base64_decode($base64);
$finfo_handler = finfo_open();
$allowed_types = ["image/jpeg","image/png","image/gif"];
$mime_type = finfo_buffer($finfo_handler, $base64, FILEINFO_MIME_TYPE);
finfo_close($finfo_handler);
if(!in_array($mime_type, $allowed_types)){
    // Mime Type is not JPEG or PNG or GIF
    return false;
}else{
    // Mime Type is in Array and returns first index of exploded string by "/" char.
    // That means for image/jpeg exploded_array = [ 0 => "image", 1 => "jpeg"]
    // and it returns first index "jpeg" for "image/png" it returns "png"
    return explode("/", $mime_type)[1];
}