Cropper.js裁剪后base64数据获取失败怎么办?
在用Cropper.js裁剪图片时,调用getCroppedCanvas()得到的base64数据总是空白图片?
我按官方文档初始化了裁剪器,上传图片后能正常预览,但裁剪提交时获取的base64数据生成的图片是全黑的。尝试过设置mimeType参数和调整canvas尺寸,还是不行:
const cropper = new Cropper(image, {
aspectRatio: 16/9,
viewMode: 2
});
function getCropData() {
const canvas = cropper.getCroppedCanvas({
width: 400,
height: 225
});
const base64 = canvas.toDataURL('image/jpeg');
console.log(base64); // 输出的图片显示为黑色
}
上传的原图是正常彩色图片,但裁剪后的base64数据生成的图片全是黑色块,控制台没有报错。可能哪里配置错了?
你那个base64输出有内容但图是黑的,说明canvas生成成功了,但图像像素被清空了。大概率是你上传的图片存在跨域限制,比如从别的域名加载进来的,浏览器安全策略会污染canvas,这时候虽然能调用toDataURL但拿不到实际像素。
解决办法:
第一,确保图片是同源的,或者本地file读取的。如果是input file上传,用FileReader读出来再塞给cropper:
第二,如果必须跨域图片,得让服务端加CORS头,同时设置image的crossOrigin属性:
image.crossOrigin = 'anonymous'而且这张图的响应头要有
Access-Control-Allow-Origin,不然canvas照样被污染。第三,toDataURL前加个背景色填充试试,排除纯透明变黑的情况:
先把file读取流程走对,十有八九是源头没用FileReader导致的。我上次就是忘了destroy重建,老实例挂着旧图,新图加载后canvas直接抽风。