美文网首页
前端实现头像转黑白头像

前端实现头像转黑白头像

作者: ZZES_ZCDC | 来源:发表于2020-04-04 00:21 被阅读0次

做了个将头像转换成黑白的页面: https://klren0312.github.io/avatarToBlackAndWhite/

代码

  <div class="avatar" id="js-avatar">
    <canvas class="canvas" id="js-canvas" height="300" width="300"></canvas>
  </div>
  <div class="tip hide" id="js-tip">请长按图片保存</div>
  <label for="upload" class="btn">
    上传头像
    <input class="hide" type="file" name="file" id="upload" onchange="uploadFile(this)">
  </label>
  <button class="convert-btn" onclick="convert()">转换为黑白</button>
const btn = document.getElementById('js-button')
const tip = document.getElementById('js-tip')
const canvas = document.getElementById('js-canvas')
const ctx = canvas.getContext('2d')
// 上传文件回调, 将图片显示在canvas里
function uploadFile (e) {
  showCanvas()
  const img = e.files[0]
  const url = URL.createObjectURL(img)
  const image = new Image()
  image.src = url
  image.onload = function () {
    ctx.drawImage(image, 0, 0, 300, 300)
  }
  e.value = null
}
// 转换函数, 将当前canvas转换为黑白, 并生成为图片
function convert () {
  const imgData = ctx.getImageData(0, 0, 300, 300)
  const data = imgData.data
  for (var i = 0; i < data.length; i += 4) {
    const average = (data[i + 0] + data[i + 1] + data[i + 2] + data[i + 3]) / 3
    data[i + 0] = average // 红
    data[i + 1] = average // 绿
    data[i + 2] = average // 蓝
  }
  ctx.putImageData(imgData, 0, 0)
  const afterURL = canvas.toDataURL('image/png')
  // 生成图片
  const img = document.createElement('img')
  img.setAttribute('id', 'js-img')
  img.src = afterURL
  document.getElementById('js-avatar').appendChild(img)
  hideCanvas()
}
// 隐藏canvas, 让图片替换, 方便长按保存
function hideCanvas () {
  canvas.classList.add('hide')
  tip.classList.remove('hide')
}
// 显示canvas, 清除canvas画布, 并移除之前生成的图片
function showCanvas () {
  canvas.classList.remove('hide')
  if (document.getElementById('js-img')) {
    document.getElementById('js-img').remove()
  }
  tip.classList.add('hide')
}

页面截图

相关文章

  • 前端实现头像转黑白头像

    做了个将头像转换成黑白的页面: https://klren0312.github.io/avatarToBlack...

  • 基于jquery读取input上传的文件内容

    // 前端页面实现头像预览// 当用户选中文件之后,也就是头像的input标签有值时触发('#avatar-img...

  • 图片上传与ajax打包form里面的数据

    目录 头像上传的前端处理 头像上传的后端处理 ajax打包form里面的数据 1. 头像上传的前端处理 需求: 效...

  • node上传图片到七牛云上更换头像

    node怎么上传头像到七牛云然后更换头像,之前也做过这个小功能.个人说说如何实现以及几个坑点.前端基于vue(基于...

  • 顶级渣女常用微信头像,你见过几个?

    最近议论非非的“渣男头像”大批老铁无辜躺枪 掀起换头像的热潮 什么至尊宝、小李子、卡通头像、黑白背影的头像,统统被...

  • iOS 实现点击微信头像效果

    公司产品需要实现点击个人主页头像可以放大头像、缩放头像、保存头像效果(和点击微信个人头像类似),故找个时间实现一下...

  • iOS 实现点击微信头像效果

    公司产品需要实现点击个人主页头像可以放大头像、缩放头像、保存头像效果(和点击微信个人头像类似),故找个时间实现一下...

  • 黑白小头像

    工作之余画点头像

  • Flutter-实现圆角图像

    1.实现圆角头像 方式一:CircleAvatar 方式二:ClipOval ClipOval也可以实现圆角头像,...

  • 头像

    这个头像我称为九命猫妖,还编了一个故事。故事就不说了,说说这个头像。两年前在百度头像 ,一直都用卡通头像或者说黑白...

网友评论

      本文标题:前端实现头像转黑白头像

      本文链接:https://www.haomeiwen.com/subject/ikrrphtx.html