AutoResizeImage图片压缩方法

AutoResizeImage(),MVC项目中自带的一种图片压缩方法,无需引用或者下载便可以在项目的视图层运用。近期在制作一个信息录入文本域,既然是要替用户上传信息的,自然少不了文件选择器功能的调用,往文本域中插入一个选择文件的按钮倒是简单,但是对用户选择的文件数据处理这一方面确是有些复杂。文件的选择方面自然是不可能全部文件类型都照单全收,运用正则表达式,判断用户选择到的文件的后缀名,以此来限制用户只选择图片文件进行上传。信息录入制作完成后,经过测试,发现了一个不可忽略的问题:选择到的图片文件的原始大小,在上传到信息录入框中没有发生改变,那就导致一些原始大小本就很大的图片在上传到文本域中后就会“突破天际”,比如说像这样:
AutoResizeImage图片压缩方法_第1张图片
测试的图片直接突破了文本域的右边框,因为大小没有改变。如何解决这个问题? 它将会是个好帮手,AutoResizeImage图片压缩方法,调用后可以自动压缩HTML图片大小使上传的图片与页面大小相适应。该方法有三个参数值:(最大宽度,最大高度,待压缩图片)。
在这里插入图片描述
通过定义这三个参数值,便可以使图片根据需要自动调整大小,并且保证宽高比例。方法的具体书写步骤:
1.首先是创建一个Image对象:
var img = new Image();
2.将Image对象的src路径 = 待压缩图片的src路径:
img.src = objImg.src;
3.设置比例值(默认为1)
var Ratio = 1;

4.w & h = 压缩前的图片宽、高
var w = img.width;
var h = img.height;
5.创建对象接收被除后的图片宽高值
var wRatio;
var hRatio;
wRatio = maxWidth / w;(最大宽度[参数]/待压缩图片宽度)
hRatio = maxHeight / h;(最大高度[参数]/待压缩图片高度)

6.判断图片最大宽度&最大高度是否 = 0
if (maxWidth == 0 && maxHeight == 0)
{
Ratio = 1;
}
//第二种情况:最大宽度为0
else if (maxWidth == 0)
{
if (hRatio < 1) Ratio = hRatio;
}
//第三种情况:最大高度为0
else if (maxHeight == 0)
{
if (wRatio < 1) Ratio = wRatio;
}
//第四种情况:最大宽度||最大高度小于1
else if (wRatio < 1 || hRatio < 1) {
Ratio = (wRatio <= hRatio ? wRatio : hRatio);
}
if (Ratio < 1) {
w = w * Ratio;
h = h * Ratio;
}

7.得到最终的图片压缩值
objImg.height = h;
objImg.width = w;

方法设置完成后再次启动项目进行测试,效果如下图:
AutoResizeImage图片压缩方法_第2张图片
压缩上传的图片成功,这次的图片大小在调用了AutoResizeImage方法后不会像上次那样直接突破文本域的边框了,问题解决。

你可能感兴趣的:(AutoResizeImage图片压缩方法)