中秋赏月:基于vite.js+vue3.js+fabric.js在线制作月饼

简介: 中秋赏月:基于vite.js+vue3.js+fabric.js在线制作月饼

image.png

MoonCake

在线制作中秋月饼


言简意赅,我主要分享一下思路


体验基于vite.js + vue3.js 的快速开发过程,并将代码发布到github


技术方案


vite.js: https://vitejs.dev/

vue3.js: https://cn.vuejs.org/index.html

fabric.js: http://fabricjs.com/

FileSaver.js https://www.npmjs.com/package/file-saver

开始项目


pnpm create vite

选择vue模板


核心代码


<template>
  <div class="app">
    <div class="canvas-warp">
      <canvas
        width="400"
        height="400"
        id="canvas"
      ></canvas>
    </div>
    <button
      style="margin-top: 20px"
      class="button"
      @click="handleExportClick"
    >
      制作月饼
    </button>
  </div>
</template>
<script>
// created at 2022-08-23
import { fabric } from 'fabric'
import FileSaver from 'file-saver'
export default {
  name: 'App',
  props: {},
  components: {},
  data() {
    return {
      canvas: null,
    }
  },
  computed: {},
  methods: {
    async getData() {},
    // 导出为图片
    handleExportClick() {
      let base64 = this.canvas.toDataURL('png')
      FileSaver.saveAs(base64, 'mooncake.png')
      // 输出 png 图片可能会打断 canvas 的渲染
      this.canvas.requestRenderAll()
    },
  },
  mounted() {
    const canvas = new fabric.Canvas('canvas', {
      preserveObjectStacking: true, // 被选中时保持原有层级
      // selection: false,
    })
    // canvas.selection = false
    // 绘制一个圆
    const circle = new fabric.Circle({
      // top: 100,
      // left: 100,
      radius: 100, // 圆的半径 50
      fill: 'rgb(250,201,81)',
    })
    canvas.add(circle)
    circle.viewportCenter()
    // 绘制月饼馅
    const text = new fabric.Textbox('五仁月饼', {
      fill: 'rgb(180,110,48)',
    })
    canvas.add(text)
    text.viewportCenter()
    this.canvas = canvas
    // console.log(canvas.getObjects())
  },
  created() {
    this.getData()
  },
}
</script>
<style lang="less"></style>
<style lang="less" scoped>
.app {
  text-align: center;
}
.canvas-warp {
  border: 1px solid #ccc;
  box-sizing: border-box;
}
#canvas {
  width: 100%;
  height: 100%;
}
@media only screen and (max-width: 768px) {
  .app {
    padding: 0 8px;
  }
  .button {
    width: 80%;
    padding: 20px 0;
    font-size: 1.5rem;
  }
  .canvas-warp{
    padding: 10px;
  }
}
</style>

整体不难,调用Fabric.js 的接口,绘制一个基本的圆,就是月饼,再绘制一个文字,就完成了月饼的制作。


Fabric.js还提供了编辑功能,可以将文字修改为你想要的月饼馅,然后导出图片,直接将绘制完成的月饼下载到本地,发给你想要送月饼的人即可。


最后还通过github提供的github Actions 自动将提交的代码打包发布到github page。


这样就完成了项目创建到打包发布的完整过程。


源码:https://github.com/mouday/moon-cake


在线体验制作月饼:https://mouday.github.io/moon-cake/

相关文章
|
Java
Notepad++ 中如何将代码格式化
Notepad++ 中如何将代码格式化   在阅读别人的代码时偶尔会遇到格式很乱,阅读起来很费劲的情况,若手动改,很容易出错且很费时间,这时可以借助一些专业的编辑器来格式化代码,NotePad++是一个轻量级的代码编辑器,占用内存少,运行速度快,但是Notepad++本身是不带这个格式化功能的,但他支持NppAStyle插件 完成格式化。
5424 0
|
存储 PyTorch 算法框架/工具
PyTorch 中的 Tensor:属性、数据生成和基本操作
PyTorch 中的 Tensor:属性、数据生成和基本操作
599 0
|
Kubernetes 调度 容器
正确配置Kubelet可一定程度防止K8S集群雪崩
## Kubelet Node Allocatable - Kubelet Node Allocatable用来为Kube组件和System进程预留资源,从而保证当节点出现满负荷时也能保证Kube和System进程有足够的资源。 - 目前支持cpu, memory, ephemeral-storage三种资源预留。 - Node Capacity是Node的所有硬件资源,kube-r
11919 3
|
3月前
|
弹性计算 人工智能 机器人
零基础一站式搭建OpenClaw智能体|阿里云ECS部署+本地系统实操+Discord对接+大模型API配置指南
2026年,开源AI智能体框架OpenClaw(曾用名Clawdbot)凭借轻量化架构、跨平台适配与强大的自动化执行能力,成为个人与团队搭建专属AI助手的首选方案。它能实现自然语言指令解析、任务自动规划、跨平台消息交互与复杂任务执行,全面适配全球用户的日常办公、信息处理、社群管理等多元场景。
478 2
|
12月前
|
人工智能 数据可视化 调度
【三桥君】如何画前趋图?如何正确绘制前趋图,以清晰地展示语句或进程之间的依赖关系?
本文AI专家三桥君系统介绍了前趋图(Precedence Graph)这一可视化工具。前趋图作为有向无环图,能清晰展示任务间的执行顺序和依赖关系。三桥君详细阐述了前趋图的基本概念、绘制步骤(包括任务识别、依赖分析、节点绘制等),并通过实例展示了简单和复杂两种场景下的应用。同时指出前趋图在程序优化、进程调度和任务管理等领域的重要价值,强调其能有效避免逻辑错误、优化资源分配。三桥君认为掌握前趋图的绘制方法对提升程序性能和项目管理效率具有重要意义。
393 0
|
人工智能 Python
JoyCaption:开源的图像转提示词生成工具,支持多种风格和场景,性能与 GPT4o 相当
JoyCaption 是一款开源的图像提示词生成工具,支持多种生成模式和灵活的提示选项,适用于社交媒体、图像标注、内容创作等场景,帮助用户快速生成高质量图像描述。
2506 21
JoyCaption:开源的图像转提示词生成工具,支持多种风格和场景,性能与 GPT4o 相当
|
机器学习/深度学习 存储 自然语言处理
魔搭社区每周速递(9.1-9.7)
182个模型、211个数据集、38个创新应用、6篇应用文章
魔搭社区每周速递(9.1-9.7)
|
自然语言处理 Serverless Docker
量化交易大揭秘:如何将TA-Lib神兵利器部署于云端函数计算,让策略飞升!
【8月更文挑战第8天】在量化交易中,TA-Lib作为技术分析库备受青睐,支持多语言包括Python。本教程指导如何将其移植至函数计算平台,实现云端交易策略。首先安装Python与TA-Lib;接着选择云服务商并创建实例。确认TA-Lib与平台Python版本兼容,必要时构建自定义运行时。使用`pip`安装TA-Lib并打包依赖。编写函数计算代码示例,如计算移动平均线。部署代码与依赖至平台,定制Dockerfile以支持自定义运行时。最后,通过平台测试功能验证功能正确性。完成移植后,即可享受Serverless架构的自动扩展与成本效益优势。
784 4
|
传感器 数据可视化 网络协议
DIY可视化整合MQTT生成UniApp源码
DIY可视化整合MQTT生成UniApp源码
409 0