您好,登录后才能下订单哦!
这篇文章主要介绍“在html中如何压缩图片和制作卡片”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“在html中如何压缩图片和制作卡片”文章能帮助大家解决问题。
使用canvas压缩图片
在 html 中使用写入input
标签,type
为file
时候,可以调出手机的相册可供选择照片,也可以支持摄像头进行拍照功能。在这个场景下,就可能出现图片的体积会更大,可能会超出后端所支持的最大范围,从而导致上传失败。
<input id="file" type="file">
1.首先要先获取到图片文件
var eleFile = document.querySelector('#file');
var reader = new FileReader()
eleFile.addEventListener('change', function (event) {
file = event.target.files[0];
console.log(file)
// 选择的文件是图片
if (file.type.indexOf("image") == 0) {
reader.readAsDataURL(file);
}
});
2.这个时候就取到了图片文件,就不得不了解一下js中FileReader对象的使用了
FileReader
对象允许 Web 应用程序异步读取存储在用户计算机上的文件(或原始数据缓冲区)的内容
方法:
方法名 | 参数 | 描述 |
---|---|---|
abort | none | 中断读取 |
readAsBinaryString | file | 二进制码 |
readAsDataURL | file | 将文件读取为 DataURL |
readAsText | file, [encoding] | 将文件读取为文本 |
readAsText:该方法有两个参数,其中第二个参数是文本的编码方式,默认值为 UTF-8。这个方法非常容易理解,将文件以文本方式读取,读取的结果即是这个文本文件中的内容。
readAsBinaryString:该方法将文件读取为二进制字符串,通常我们将它传送到后端,后端可以通过这段字符串存储文件。
readAsDataURL:这是例子程序中用到的方法,该方法将文件读取为一段以 data: 开头的字符串,这段字符串的实质就是 Data URL,Data URL是一种将小文件直接嵌入文档的方案。这里的小文件通常是指图像与 html 等格式的文件。(其中base64的方式就是由此来获得的。。)
FileReader处理事件简介
事件 | 描述 |
---|---|
onabort | 中断时触发 |
onerror | onabort |
onload | 文件读取成功完成时触发 |
onloadend | 读取完成触发,无论成功或失败 |
onloadstart | 读取开始时触发 |
onprogress | 读取中 |
继续上面的操作,在拿到图片之后,需要将文件进行处理转化,此时
var reader = new FileReader();
//将文件以Data URL形式读入页面
reader.readAsDataURL(file);
reader.onload=function(e) {
console.log(reader)
}
现在取到了图片也进行了转化,现在可以进行压缩了。
var eleFile = document.querySelector('#file');
var reader = new FileReader()
eleFile.addEventListener('change', function (event) {
file = event.target.files[0];
// console.log(file)
// 选择的文件是图片
if (file.type.indexOf("image") == 0) {
var reader = new FileReader();
//将文件以Data URL形式读入页面
reader.readAsDataURL(file);
reader.onload=function(e) {
// console.log(this.result)
var pre=document.getElementById("pre");
pre.setAttribute("src", this.result)
canvasDataURL(this.result, 100, 0.5)
}
}
})
/* [canvasDataURL 通过canvas进行压缩]
* @params path 图片的base64的格式
* @params targetWidth 压缩后图片的宽度
* @params quality 图片质量 quality值越小,所绘制出的图像越模糊
*/
function canvasDataURL(path, targetWidth, quality) {
var img = new Image();
img.src = path
img.onload = function () {
// var that = this
// console.log(that)
// 默认按比例压缩
var w = this.width
var h = this.height
scale = w / h;
w = targetWidth
h = targetWidth / scale
var quality = quality; // 默认图片质量为0.7
//生成canvas
var canvas = document.createElement('canvas');
var ctx = canvas.getContext('2d');
// 创建属性节点
var anw = document.createAttribute("width");
anw.nodeValue = w;
var anh = document.createAttribute("height");
anh.nodeValue = h;
canvas.setAttributeNode(anw);
canvas.setAttributeNode(anh);
ctx.drawImage(this, 0, 0, w, h);
// quality值越小,所绘制出的图像越模糊
var base64 = canvas.toDataURL('image/jpeg', quality);
var result=document.getElementById("result");
result.setAttribute("src", base64)
}
}
很简单,这样就可以得到压缩后的图片了,从以上的代码可得知,原理在于canvas 中的 toDataURL 方法可指定图片压缩后的格式及压缩质量,把 canvas 信息压缩并转为 base64 编码来实现压缩。
使用canvas制作卡片
场景:把刚刚压缩之后的图片与另一张图片相结合,可长按进行保存。
function drawCanvas (target) {
var canvas = document.querySelector('#myCanvas')
var ctx = canvas.getContext('2d')
// 是设备上物理像素和设备独立像素(device-independent pixels (dips))的比例
var dp = window.devicePixelRatio || 1
var backingStoreRatio = ctx.webkitBackingStorePixelRatio || ctx.mozBackingStorePixelRatio || ctx.msBackingStorePixelRatio || ctx.oBackingStorePixelRatio || ctx.backingStorePixelRatio || 1
var ratio = this.dp / this.backingStoreRatio
var oldWidth = canvas.width
var oldHeight = canvas.height
canvas.width = oldWidth * ratio
canvas.height = oldHeight * ratio
canvas.style.width = oldWidth + 'px'
canvas.style.height = oldHeight + 'px'
ctx.scale(ratio, ratio)
var headerImg = new Image()
var bgImg = new Image()
headerImg.src = target
bgImg.src = '../bg.png'
headerImg.onload = (e) => {
// 图片的宽高比
var rate = headerImg.width / headerImg.height
console.log(rate)
bgImg.onload = (e) => {
ctx.drawImage(headerImg, 10, 30, 50, (50 / rate))
// 背景图片
ctx.drawImage(bgImg, 0, 0, 150, 150)
ctx.fillText('厉害啊', 80, 70)
var resultImg = new Image()
resultImg.src = canvas.toDataURL('image/png', 1)
resultImg.style.width = '100%'
var cardImg=document.getElementById("cardImg");
cardImg.setAttribute("src", resultImg.src)
}
}
取到刚刚得到的图片,在图像装载完毕时后将其画到画布上,也可以配上文字等等,最后也是把canvas的信息转为base64编码来进行实现 。
关于“在html中如何压缩图片和制作卡片”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注亿速云行业资讯频道,小编每天都会为大家更新不同的知识点。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。