如何在html中上传本地图片大小,上传前使用HTML5调整图片大小

如果有兴趣,我制作了打字稿版本:

interface IResizeImageOptions {

maxSize: number;

file: File;

}

const resizeImage = (settings: IResizeImageOptions) => {

const file = settings.file;

const maxSize = settings.maxSize;

const reader = new FileReader();

const image = new Image();

const canvas = document.createElement('canvas');

const dataURItoBlob = (dataURI: string) => {

const bytes = dataURI.split(',')[0].indexOf('base64') >= 0 ?

atob(dataURI.split(',')[1]) :

unescape(dataURI.split(',')[1]);

const mime = dataURI.split(',')[0].split(':')[1].split(';')[0];

const max = bytes.length;

const ia = new Uint8Array(max);

for (var i = 0; i < max; i++) ia[i] = bytes.charCodeAt(i);

return new Blob([ia], {type:mime});

};

const resize = () => {

let width = image.width;

let height = image.height;

if (width > height) {

if (width > maxSize) {

height *= maxSize / width;

width = maxSize;

}

} else {

if (height > maxSize) {

width *= maxSize / height;

height = maxSize;

}

}

canvas.width = width;

canvas.height = height;

canvas.getContext('2d').drawImage(image, 0, 0, width, height);

let dataUrl = canvas.toDataURL('image/jpeg');

return dataURItoBlob(dataUrl);

};

return new Promise((ok, no) => {

if (!file.type.match(/image.*/)) {

no(new Error("Not an image"));

return;

}

reader.onload = (readerEvent: any) => {

image.onload = () => ok(resize());

image.src = readerEvent.target.result;

};

reader.readAsDataURL(file);

})

};

这是javascript结果:

var resizeImage = function (settings) {

var file = settings.file;

var maxSize = settings.maxSize;

var reader = new FileReader();

var image = new Image();

var canvas = document.createElement('canvas');

var dataURItoBlob = function (dataURI) {

var bytes = dataURI.split(',')[0].indexOf('base64') >= 0 ?

atob(dataURI.split(',')[1]) :

unescape(dataURI.split(',')[1]);

var mime = dataURI.split(',')[0].split(':')[1].split(';')[0];

var max = bytes.length;

var ia = new Uint8Array(max);

for (var i = 0; i < max; i++)

ia[i] = bytes.charCodeAt(i);

return new Blob([ia], { type: mime });

};

var resize = function () {

var width = image.width;

var height = image.height;

if (width > height) {

if (width > maxSize) {

height *= maxSize / width;

width = maxSize;

}

} else {

if (height > maxSize) {

width *= maxSize / height;

height = maxSize;

}

}

canvas.width = width;

canvas.height = height;

canvas.getContext('2d').drawImage(image, 0, 0, width, height);

var dataUrl = canvas.toDataURL('image/jpeg');

return dataURItoBlob(dataUrl);

};

return new Promise(function (ok, no) {

if (!file.type.match(/image.*/)) {

no(new Error("Not an image"));

return;

}

reader.onload = function (readerEvent) {

image.onload = function () { return ok(resize()); };

image.src = readerEvent.target.result;

};

reader.readAsDataURL(file);

});

};

用法就像:

resizeImage({

file: $image.files[0],

maxSize: 500

}).then(function (resizedImage) {

console.log("upload resized image")

}).catch(function (err) {

console.error(err);

});

或(async/ await):

const config = {

file: $image.files[0],

maxSize: 500

};

const resizedImage = await resizeImage(config)

console.log("upload resized image")

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值