- 图片拼接用的是canvas 图片压缩用的是image-conversion插件
- 引入image-conversion插件
cnpm i image-conversion -S - 导入固定拼接的图片
import defaultHeadPng from ‘@/assets/img/normalPic.png’ - 拼接图片 js
filesToInstances(files, callback){
const length = files.length;
let instances = [];
let finished = 0;
files.forEach((file, index) => {
const image = new Image();
image.src = file;
image.onload = () => {
instances[index] = image;
finished++;
if (finished === length) {
callback(instances);
}
}
});
},
draws(images = [], callback) {
const width = 300;
const encoderOptions = 1;
const heights = images.map(item => width / item.width * item.height)
const canvas = document.createElement('canvas')
canvas.width = width
canvas.height = heights.reduce((total, current) => total + current)
const context = canvas.getContext('2d')
let y = 0
images.forEach((item, index) => {
const height = heights[index]
context.drawImage(item, 0, y, width, height)
y += height
})
callback(canvas.toDataURL('image/png', encoderOptions))
},
ImgJoin (images = [], callback) {
this.filesToInstances(images, instance => {
this.draws(instance,data => {callback(data)})
})
},
dataURLtoFile(dataurl, filename) {
var arr = dataurl.split(','), mime = arr[0].match(/:(.*?);/)[1],
bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n);
while(n--){
u8arr[n] = bstr.charCodeAt(n);
}
let blob = new Blob([u8arr], {type:mime})
blob.lastModified = Date.now()
blob.name = filename
return blob
},
- 开始拼接压缩
var file = document.getElementById('activityInfoFile').files[0];
var name = file.name
var reader = new FileReader();
var imgFile;
reader.readAsDataURL(file)
reader.onload = (e)=>{
imgFile = e.target.result;
this.ImgJoin([defaultHeadPng, imgFile], (data)=>{
let ifile = this.dataURLtoFile(data, new Date().getTime()+".png");
imageConversion.compressAccurately(ifile, {
type: ifile.type,
width: 350,
height: 300,
}).then(res2=>{
imageConversion.compressAccurately(res2, {
size: 60
}).then(res=>{
})
})
})
}
- 压缩后的图片类型blob如果不符合条件 可以进行转换
var reader = new FileReader();
var imgFile;
reader.onload=function(e) {
let height='';
let width='';
imgFile = e.target.result;
let img = new Image();
img.src = e.target.result;
imageConversion.dataURLtoFile(imgFile,'image/png').then(res=>{
console.log(res)
self.upload(res,name)
})
img.onload = function () {
height=this.height;
width=this.width;
self.imgFile=imgFile
}
};
reader.readAsDataURL(res);
- 上传图片
upload(files, name){
let fileFormData = new FormData();
let file = new window.File([files], name, {type: files.type})
fileFormData.append('file', file);
let requestConfig = {
headers: {
'Content-Type': 'multipart/form-data'
},
}
this.$http.post(`file/upload`, fileFormData, requestConfig).then(()=>{
})
}