码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 使用 JS 实现在浏览器控制台打印图片 console.image()


    在前端开发过程中,调试的时候,我们会使用 console.log 等方式查看数据。但对于图片来说,仅靠展示的数据与结构,是无法想象出图片最终呈现的样子的。

    虽然我们可以把图片数据通过 img 标签展示到页面上,或将图片下载下来进行预览。但这样的调试过程实在是复杂,何不实现一个 console.image() 呢?

    先上演示案例:

    在线演示 https://bi.cool/bi/W1P1cyq

    (chrome 浏览器上演示效果)
    (chrome 浏览器上演示效果)

    实现 console.image():

    参考 Github 上已实现的库 https://github.com/adriancooney/console.image Star 1.8k(本文发布前)。 实现代码如下:

    // 实现 console.image 函数【注意,url如果是网络图片必须开启了跨域访问才能打印】
    console.image = function (url, scale) {
      const img = new Image()
      img.crossOrigin = "anonymous"
      img.onload = () => {
        const c = document.createElement('canvas')
        const ctx = c.getContext('2d')
        if (ctx) {
          c.width = img.width
          c.height = img.height
          ctx.fillStyle = "red";
          ctx.fillRect(0, 0, c.width, c.height);
          ctx.drawImage(img, 0, 0)
          const dataUri = c.toDataURL('image/png')
    
          console.log(`%c sup?` ,
            `
              font-size: 1px;
              padding: ${Math.floor((img.height * scale) / 2)}px ${Math.floor((img.width * scale) / 2)}px;
              background-image: url(${dataUri});
              background-repeat: no-repeat;
              background-size: ${img.width * scale}px ${img.height * scale}px;
              color: transparent;
            `
          )
        }
      }
      img.src = url
    }
    
    

    使用方式:

    // 支持 图片地址【注意,url如果是网络图片则必须开启了跨域访问才能打印图片】
    console.image("替换为 图片 url", 0.5);
    // 支持 base64
    console.image("替换为 base64 字符串", 1);
    

    上面仅展示 console.image() 的代码,因为原库还包含 console.meme() 的实现,用于在控制台生成表情包,感兴趣的同学可以去该库查看详情。

    该库上一次更新已经将近10年了,由于近些年 Chrome 控制台中工作方式有变更,导致作者原版实现会使图片重复显示一次。 遇到相同问题的人提了 issues,本文章代码已根据 issues 里提供的解决方案进行了修复。

    实现说明:

    console.image() 借助于 console.log 能够使用 %c 为打印内容定义样式 的方式进行实现,例如:

    // 下面的代码将会在控制台打印出带样式的文本
    console.log("这是 %c一条带样式的消息", `
        font-style: italic;
        color: cyan;
        background-color: red;
    `);
    

    下载本案例源码:https://bi.cool/bi/W1P1cyq

    参考资料 Reference :
    https://developer.mozilla.org/zh-CN/docs/Web/API/console

  • 相关阅读:
    STM32G0 定时器PWM DMA输出驱动WS2812配置 LL库
    codeforces刷题二
    Java 大厂八股文面试专题-JVM相关面试题 类加载器
    数据结构实战开发教程(四)线性表的链式存储结构、单链表的具体实现、单链表的遍历与优化、典型问题分析(Bugfix)
    Radis缓存异常以及处理方案(雪崩击穿穿透预热降级)
    java计算机毕业设计水果商城设计MyBatis+系统+LW文档+源码+调试部署
    跟我学C++中级篇——Pimpl中的unique_ptr
    征途装备如何修改
    使用git时,错误集锦
    java体育馆使用预约平台的设计与实现(springboot+mysql源码+文档)
  • 原文地址:https://www.cnblogs.com/liuhangui/p/18197660/console-image
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号