vue 上傳圖片進行壓縮圖片
afterRead(file){
if(this.fileList.length > 1){
this.fileList.splice(1);
this.$msg({
text:'只能選擇這麼多!',
type:'info'
})
return false;
}
let maxSize = 1 * 1024 * 1024; //自己定義的檔案大小,超過多少M就開始壓縮(現在是1M)
let fileObj = file.file; // 當前的圖片
if (fileObj.size > maxSize) {
this.imgcompress(fileObj, file);
}else{
//沒有大於1兆直接執行
let Files = this.Files;
Files.push(file.file);
}
},
imgcompress(file, files) {
const img = document.createElement('img')
const reader = new FileReader(); // 讀取檔案資源例項
reader.readAsDataURL(file); //讀取圖片資源
reader.onload = e => { //讀取成功
img.src = e.target.result;
const { width: originWidth, height: originHeight } = img; //上傳的圖片的寬高
const maxWidth = 1000, //設定一個canvas 的最大寬高
maxHight = 1000;
if (originWidth > maxWidth || originHeight > maxHight) {
//計算出圖片的縮放比例
if (originWidth > originHeight) {
//寬 大於 高
const Proportion = Math.ceil(originWidth / maxWidth);
let targetWidht = parseInt(originWidth / Proportion); //目標的寬度
let targetHeight = parseInt(originHeight / Proportion); //目標的高度
this.createCanvasCompress(targetWidht, targetHeight, img, files);
} else {
const Proportion = Math.ceil(originHeight / maxHight); //高大於寬
let targetWidht = parseInt(originWidth / Proportion); //目標的寬度
let targetHeight = parseInt(originHeight / Proportion); //目標的高度
let bold = this.createCanvasCompress(
targetWidht,
targetHeight,
img,
files
);
}
} else {
let quality = 0.8;
this.createCanvasCompress(
originWidth,
originHeight,
img,
files,
quality
);
}
};
},
createCanvasCompress(targetWidth, targetHeight, img, files, quality) {
let that = this;
return new Promise((resolve, reject) => {
const canvas = document.createElement("canvas");
const context = canvas.getContext("2d");
// 設定寬高度為等同於要壓縮圖片的尺寸
canvas.width = targetWidth;
canvas.height = targetHeight;
context.clearRect(0, 0, targetWidth, targetHeight);
//將img繪製到畫布上
console.log(targetWidth, targetHeight);
context.drawImage(img, 0, 0, targetWidth, targetHeight);
let bold = canvas.toBlob(
function(blob) {
resolve(blob);
that.Files.push(blob); //壓縮之後的圖片
//拿到的是blob格式的圖片,需要把blob格式轉換為file格式
let files1 = new window.File([blob], files.file.name, {type: files.file.type})
console.log(files1 )
},
"image/png",
quality
);
});
// 建立畫布
},
相關文章
- js上傳圖片壓縮JS
- 一個Vue圖片上傳剪裁壓縮元件Vue元件
- 前端圖片壓縮及上傳前端
- 前端的圖片壓縮image-compressor(可在圖片上傳前實現圖片壓縮)前端
- 使用tinypng對需要上傳Gitee圖床的圖片進行壓縮Gitee圖床
- JS—圖片壓縮上傳(單張)JS
- Android壓縮圖片後再上傳圖片Android
- vue+element 將圖片壓縮並轉換成base64上傳圖片Vue
- layui中實現上傳圖片壓縮UI
- java,springboot + thymeleaf 上傳圖片、刪除圖片到伺服器、本地,壓縮圖片上傳(有些圖片會失真),原圖上傳JavaSpring Boot伺服器
- 觸屏 H5 如何實現壓縮並上傳多張圖片,同時還可以進行圖片壓縮H5
- 前端圖片壓縮 - H5&Uni-App圖片壓縮前端H5APP
- Android如何壓縮圖片上傳服務端Android服務端
- PbootCMS上傳圖片被壓縮怎麼解決boot
- ??圖片壓縮CanvasCanvas
- IOS圖片壓縮iOS
- canvas 壓縮圖片Canvas
- 基於vue + axios + lrz.js 微信端圖片壓縮上傳VueiOSJS
- vue3 vant4 h5圖片上傳時壓縮VueH5
- Android 中圖片壓縮分析(上)Android
- asp.net上傳圖片生成縮圖ASP.NET
- Vue圖片裁剪上傳元件Vue元件
- vue圖片預覽上傳Vue
- 圖片壓縮知識梳理(0) 圖片壓縮學習計劃
- 【前端】壓縮圖片以及圖片相關概念前端
- iOS 圖片壓縮方法iOS
- 前端圖片壓縮方案前端
- ionic3 上傳圖片、壓縮圖片到阿里雲 服務端簽名後直傳阿里服務端
- canvas 繪製的圖片,進行上傳Canvas
- 怎麼轉換圖片格式並壓縮圖片
- Android 載入大圖片,不壓縮圖片Android
- 如何使用FormData上傳壓縮裁剪後的圖片Blob物件ORM物件
- 專案分享五:H5圖片壓縮與上傳H5
- vue 實現貼上上傳圖片Vue
- python 開發一款圖片壓縮工具(四):上傳圖床Python圖床
- 上傳圖片
- 圖片上傳及圖片處理
- SmallImage for Mac(圖片壓縮工具)Mac