webp文件上传到服务端后,本来所有的图片文件都使用的GD库进行尺寸压缩,但getimagesize函数获取webp文件信息失败,导致脚本运行异常中断
尝试了两种解决方案
1.前端监听文件选择后,将文件直接通过canvas转换成base64编码后提交,后端另存成png文件
function convertImgToBase64(input, callback) {
var file=input.files[0],url = null;
if (window.createObjectURL != undefined) {
url = window.createObjectURL(file);
} else if (window.URL != undefined) {
url = window.URL.createObjectURL(file);
} else if (window.webkitURL != undefined) {
url = window.webkitURL.createObjectURL(file);
}
var canvas = document.createElement('CANVAS'),
ctx = canvas.getContext('2d'),
img = new Image;
img.onload = function() {
canvas.height = img.height;
canvas.width = img.width;
ctx.drawImage(img, 0, 0);
var ext = img.src.substring(img.src.lastIndexOf(".") + 1).toLowerCase();
var dataURL = canvas.toDataURL('image/' + ext);
callback(dataURL);
};
img.src = url;
}
$('#input').on('change',function(){
convertImgToBase64(this, function(imgdata){
//dosomething
})
});
2.文件上传后,读取文件前16字节判断是否包含webp字符串,有则判定为webp文件,用GD库进行转换,转换为jpeg或png格式保存,但这个方法转换的图片前后有变化,有知道怎么搞的请留言给我,多谢
$file='a.webp';
$newfile='a.jpeg';
if(strpos(strtolower(file_get_contents('.' . $file,false,null,0,16)), 'webp')){
if($webp = imagecreatefromwebp('.' . $file)){
imagejpeg($webp,'.' . $newfile,100);
imagedestroy($webp);
}
}