前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >前端实现头像转黑白头像

前端实现头像转黑白头像

作者头像
治电小白菜
发布2020-08-25 15:57:32
1.7K0
发布2020-08-25 15:57:32
举报
文章被收录于专栏:技术综合技术综合

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

代码

代码语言:javascript
复制
  <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>
代码语言:javascript
复制
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')
}

页面截图

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 代码
  • 页面截图
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档