js 壓縮圖片 H5
原理 用 canvas的 toDataURI (type , int ) 如果type
引數的值為image/jpeg或
image/webp
,則第二個引數的值如果在0.0和1.0之間的話,會被看作是圖片質量引數
dataURI轉 blob的程式碼是 copy 來的
壓縮程式碼
/*common*/
var canvasSupported = isCanvasSupported()
function dataURItoBlob(dataURI) {
// convert base64 to raw binary data held in a string
var byteString
,mimestring
if(dataURI.split(',')[0].indexOf('base64') !== -1 ) {
byteString = atob(dataURI.split(',')[1])
} else {
byteString = decodeURI(dataURI.split(',')[1])
}
mimestring = dataURI.split(',')[0].split(':')[1].split(';')[0]
var content = new Array();
for (var i = 0; i < byteString.length; i++) {
content[i] = byteString.charCodeAt(i)
}
return new Blob([new Uint8Array(content)], {type: mimestring});
}
function imgScale (src , scale,cbk) {
if (!src) return cbk(false)
var _canvas = document.createElement('canvas')
var tImg = new Image
tImg.onload = function(){
var _context = _canvas.getContext('2d');
_context.drawImage(tImg,0,0);
var type = 'image/jpeg'
src = _canvas.toDataURL(type , scale)
var blob = dataURItoBlob(src)
cbk(blob)
/*
var r = _canvas.mozGetAsFile('f' , type)
cbk(r)
*/
};
tImg.src = src
}
function isCanvasSupported(){
var elem = document.createElement('canvas');
return !!(elem.getContext && elem.getContext('2d'));
}
exports.support = canvasSupported
/* opt {scale :0-1}*/
exports.zip = function(files ,opt,cbk){
opt = opt || {}
var scale = opt.scale
if (!canvasSupported) return cbk(files)
if (!scale || 1 == scale ) return cbk(files)
var files_count = files.length
,ret = []
for (var i = 0 ,j = files.length ; i<j ; i++){
var fReader = new FileReader();
fReader.onload = function (e){
var result = e.target.result
imgScale(result , scale ,function(file){
file && ret.push(file)
files_count--
if (files_count <= 0 ) cbk && cbk(ret)
})
};
fReader.readAsDataURL(files[i]);
}
}
使用
var compress = require('app/compress')
if (compress.support){
compress.zip(files , {'scale':opt.compress} , function(files){
console.log(files)
//返回的 blob 物件可以 append 到 FormData物件上 用 ajax 上傳
})
}
相關文章
- Nginx網路壓縮 CSS壓縮 圖片壓縮 JSON壓縮NginxCSSJSON
- js上傳圖片壓縮JS
- js圖片壓縮推薦JS
- JS—圖片壓縮上傳(單張)JS
- 前端圖片壓縮 - H5&Uni-App圖片壓縮前端H5APP
- ??圖片壓縮CanvasCanvas
- IOS圖片壓縮iOS
- canvas 壓縮圖片Canvas
- 圖片純前端JS壓縮的實現前端JS
- 專案分享五:H5圖片壓縮與上傳H5
- 圖片壓縮知識梳理(0) 圖片壓縮學習計劃
- iOS 圖片壓縮方法iOS
- 前端圖片壓縮方案前端
- JS中通過指定大小來壓縮圖片JS
- JS中圖片壓縮的一般方法JS
- 觸屏 H5 如何實現壓縮並上傳多張圖片,同時還可以進行圖片壓縮H5
- 前端的圖片壓縮image-compressor(可在圖片上傳前實現圖片壓縮)前端
- H5 和小程式拍照圖片旋轉、壓縮和上傳H5
- vue3 vant4 h5圖片上傳時壓縮VueH5
- 純前端實現 PNG 圖片壓縮 | UPNG.js前端JS
- SmallImage for Mac(圖片壓縮工具)Mac
- JNI實現圖片壓縮
- android下圖片壓縮Android
- java後臺壓縮圖片Java
- 【前端】壓縮圖片以及圖片相關概念前端
- vue 上傳圖片進行壓縮圖片Vue
- Android壓縮圖片後再上傳圖片Android
- 圖片壓縮怎樣操作?分享幾種實用的批次圖片壓縮技巧
- png格式如何壓縮,圖片壓縮工具哪個好
- 在瀏覽器端用H5實現圖片壓縮上傳瀏覽器H5
- 圖片壓縮不求人,3個親測實用高效的圖片壓縮神器
- JS壓縮圖片?掌握這一篇就夠了JS
- TinyPNGNodeJSBatcher-基於TinyPNG的批量壓縮圖片工具NodeJSBAT
- 怎麼轉換圖片格式並壓縮圖片
- Android 載入大圖片,不壓縮圖片Android
- 前端圖片壓縮及上傳前端
- 利用 canvas 實現圖片壓縮Canvas
- Image Optimizer for Mac(圖片壓縮工具)Mac