有红又专的国庆节头像如何制作?

马上又要到中国人民的喜庆日子了,朋友圈估计又要开始泛滥国旗头像了。

我的已经准备好了,你们的准备好了吗?让我来教你怎么制作,只面向前端开发者哦!

实现原理

本质是两张图片,怎么合并到一起,作为前端开发者,可能会想到几种做法:

  • 使用两个 Image dom 堆叠到一起,形成合并的效果,然后使用 dom-to-canvas 生成图片
  • 使用 Canvas 读取两个图片,然后 writeImage 到一个 Canvas 中,在截图

这两种办法都可以,但是因为我们 AntV 具备有可视化的强大能力,和基础工具,所以从可视化角度来看,可以讲这两个图片都作为可视化画布的两个图片标注,然后通过调用 API 顺序,就可以迭代层级关系。

具体就是使用 AntV G2 的 Image mark。Image 标记和 Point 标记很类似,都是以 x,y 数据通道作为位置居中定位,区别在于 Image 提供一个特殊的 src 数据通道,来指定图片的远程地址或者 base64。

这里有一个简单的浏览器占比数据,我们对它进行可视化,便于看到不同浏览器的占比对比。

具体代码

全量代码如下,Copy 到 G2 的 DEMO 中就可以运行出来效果了。代码非常简单,不过多介绍了。

ts 复制代码
import { Chart } from '@antv/g2';

const SIZE = 256;

const chart = new Chart({
  container: 'container',
  width: SIZE,
  height: SIZE,
});

// 五个模板
const FLAG_TEMPLATE = [
  'https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*FpxcQI7WEusAAAAAAAAAAAAADmJ7AQ/original',
  'https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*rx6ST7V6cA0AAAAAAAAAAAAADmJ7AQ/original',
  'https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*7rKcTJiP1rMAAAAAAAAAAAAADmJ7AQ/original',
  'https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*_GUISa64kgYAAAAAAAAAAAAADmJ7AQ/original',
  'https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*Wwy8TJAoCeUAAAAAAAAAAAAADmJ7AQ/original',
  'https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*DphFRIpOYWQAAAAAAAAAAAAADmJ7AQ/original'
];

// 换成你自己的,可以使用远程 CDN 地址,也可以使用 Base64 编码
const MY_PHOTO = 'https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*vYY6RrxEWKwAAAAAAAAAAAAADmJ7AQ/original'

chart
  .image()
  .data([{ x: 0.5, y: 0.5 }])
  .encode('x', 'x')
  .encode('y', 'y')
  .encode('src', MY_PHOTO)
  .encode('size', SIZE)
  .axis(false)
  .tooltip(false);

  chart
  .image()
  .data([{ x: 0.5, y: 0.5 }])
  .encode('x', 'x')
  .encode('y', 'y')
  .encode('src', FLAG_TEMPLATE[2]) // 换成你自己想要的模板,都试试吧
  .encode('size', SIZE)
  .axis(false)
  .tooltip(false);

chart.render();

最后

其实社区上很多了,但是开放代码的并不多,这里代码开发出来,快点基于这个去封装成小工具,蹭节日流量吧。

相关推荐
C++ 老炮儿的技术栈8 分钟前
有符号变量与无符号变量的区别
服务器·开发语言·前端·数据结构·c++·算法·c
aixingpan18 分钟前
aixingpan.cn API开发文档:api_docs_bichart_natalvssecondary2接口指南
前端·php
喵了几个咪25 分钟前
RushWind Admin — 契约驱动:203 条路由零手写的工程化拆解
微服务·rust·开源·admin
MZ_ZXD00128 分钟前
【关注可白嫖源码】--课程设计--毕业设计-- 29210 Vue.js 3+Springboot中药材基本信息与图片查询系统
javascript·spring boot·课程设计·毕设·大作业·程序开发·毕设代做
liangshanbo121531 分钟前
Webpack Tree Shaking 面试题整理
前端·webpack·node.js
斯内普吖35 分钟前
(开源)水果蔬菜商城实战指南 基于 Java + SSM + Vue + MySQL
java·vue.js·mysql·开源
Ai-_Man1 小时前
您您这可以把Google AI Studio的多个会话比如说。左侧的多个会话一次性导出吗?不是单条会话里面的多次会对话。AI导出鸭
javascript·人工智能·ai·小程序·电脑
去伪存真1 小时前
从乱码到高精度检索:探矿业务中 TXT、Word、PDF 与网页的 RAG 清洗之道
前端·agent
两个西柚呀1 小时前
JS事件总结
前端·javascript·css
小狼154541 小时前
拼多多订单数据导出 CSV 实战:接口分页、字段平铺与 5 个数据坑,多多开票助手
java·前端·javascript