我创建了一个函数,它将返回所提供的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。
答案 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];
}