原生js实现预览图片效果

预览单张图片:

前置知识

FileReader.prototype.readAsDataURL(blob)方法会使用base-64进行编码,编码的blob参数(即将被读取的Blob或File对象)由data字串开始,后面跟随的是MIME type,然后再加上base64字串,逗号之后就是编码过的图像文件的内容。如:data:image/png;base64,xxxxxxx

要通过reader.onload中获取this.result,就是转为的base64格式的字符串。

html

    <img src="" alt="Preview Image" class="img" />

    <input type="file" οnchange="preview()" />

 js

function preview() {
  let img = document.querySelector(".img");
  let file = document.querySelector("input[type=file]");
  let reader = new FileReader();
  if (file.files[0]) {
    reader.readAsDataURL(file.files[0]);
    reader.onload = function () {
      img.width = 300;
      img.src = this.result;
    };
  }
}

预览多张图片

前置知识:

FileList类型,也就是 document.querySelector("input[type=file]").files 是一个伪数组,不能使用 forEach 进行遍历,而要通过 [].forEach.call(thisArg,callback) 来遍历。

html 

<div class="imgContainer"></div>

<input type="file" οnchange="preview()" multiple />

js

function preview() {
  let container = document.querySelector(".imgContainer");
  let files = document.querySelector("input[type=file]").files;
  if (files) {
    [].forEach.call(files, function (file) {
      if (/\.(png|jpe?g|gif)$/.test(file.name)) {
        let reader = new FileReader();
        reader.readAsDataURL(file);
        reader.onload = function () {
          let image = new Image();
          image.height = 300;
          image.src = this.result;
          image.title = file.name;
          container.appendChild(image);
        };
      }
    });
  }
}

 效果图

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是基于Vue3和原生Canvas实现抖音头像抠图和预览的代码示例: 1. 在Vue3中引入Canvas 在Vue3中,我们可以通过在template中添加canvas元素来引入Canvas,然后通过ref属性获取Canvas的实例。代码如下: ```html <template> <canvas ref="canvas"></canvas> </template> ``` 2. 实现头像抠图功能 首先,我们需要获取用户上传的头像图片,并创建一个新的Canvas元素来处理图片。代码如下: ```javascript import { ref } from 'vue' export default { setup() { // 获取Canvas实例 const canvasRef = ref(null) // 处理上传的图片 const handleImageUpload = (event) => { const file = event.target.files[0] if (file) { const reader = new FileReader() reader.readAsDataURL(file) reader.onload = () => { const img = new Image() img.src = reader.result // 创建新的Canvas元素 const canvas = canvasRef.value const ctx = canvas.getContext('2d') img.onload = () => { const width = img.width const height = img.height canvas.width = width canvas.height = height // 将图片绘制到Canvas中 ctx.drawImage(img, 0, 0, width, height) // 实现头像抠图功能 // ... } } } } return { canvasRef, handleImageUpload } } } ``` 接下来,我们需要实现头像抠图的功能。首先,我们需要使用Canvas的getImageData方法获取Canvas中的像素数据。代码如下: ```javascript // 获取Canvas中的像素数据 const imageData = ctx.getImageData(0, 0, width, height) const pixels = imageData.data ``` 然后,我们可以遍历像素数据,判断每个像素的透明度是否大于某个阈值,如果大于阈值则将该像素的透明度设为255,否则将透明度设为0。这样,就可以把头像部分的像素点都变成不透明的,从而实现头像抠图的效果。代码如下: ```javascript // 实现头像抠图功能 const threshold = 200 // 阈值 for (let i = 0; i < pixels.length; i += 4) { const alpha = pixels[i + 3] if (alpha > threshold) { pixels[i + 3] = 255 } else { pixels[i + 3] = 0 } } ctx.putImageData(imageData, 0, 0) ``` 3. 实现头像预览功能 最后,我们需要实现头像预览的功能。首先,我们需要在template中添加一个img元素,用于展示处理后的头像。代码如下: ```html <template> <div> <input type="file" accept="image/*" @change="handleImageUpload"> <canvas ref="canvas"></canvas> <img ref="preview"> </div> </template> ``` 然后,我们需要在handleImageUpload方法中,将处理后的Canvas转换成DataURL,然后将其赋值给img元素的src属性,从而实现头像预览效果。代码如下: ```javascript // 将Canvas转换成DataURL const dataURL = canvas.toDataURL() // 将处理后的头像展示在img元素中 const imgPreview = previewRef.value imgPreview.src = dataURL ``` 至此,基于Vue3和原生Canvas实现抖音头像抠图和预览的代码示例就完成了。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值