当前位置: 首页 > news >正文

低代码可视化-uniapp海报可视化设计-代码生成

在uni-app中,海报生成器通常是通过集成特定的插件或组件来实现的,这些插件或组件提供了生成海报所需的功能和灵活性。我们采用了lime-painter海报组件。lime-painter是一款canvas海报组件,可以更轻松地生成海报。它支持通过JSON及Template的方式绘制海报,提供了丰富的样式和布局选项。

方式一 Template

  • 提供l-painter-viewl-painter-textl-painter-imagel-painter-qrcode四种类型组件
  • 通过 css 属性绘制样式,与 style 使用方式保持一致。
    <l-painter>
    //如果使用Template出现顺序错乱,可使用`template` 等所有变量完成再显示
    <template v-if="show"><l-painter-viewcss="background: #07c160; height: 120rpx; width: 120rpx; display: inline-block"></l-painter-view><l-painter-viewcss="background: #1989fa; height: 120rpx; width: 120rpx; border-top-right-radius: 60rpx; border-bottom-left-radius: 60rpx; display: inline-block; margin: 0 30rpx;"></l-painter-view><l-painter-viewcss="background: #ff9d00; height: 120rpx; width: 120rpx; border-radius: 50%; display: inline-block"></l-painter-view>
    <template>
    </l-painter>

方式二 JSON

  • 在 json 里四种类型组件的typeviewtextimageqrcode
  • 通过 board 设置海报所需的 JSON 数据进行绘制或ref获取组件实例调用组件内的render(json)
  • 所有类型的 schema 都具有css字段,css 的 key 值使用驼峰如:lineHeight
<l-painter :board="poster"/>
data() {return {poster: {css: {// 根节点若无尺寸,自动获取父级节点width: '750rpx'},views: [{css: {background: "#07c160",height: "120rpx",width: "120rpx",display: "inline-block"},type: "view"},{css: {background: "#1989fa",height: "120rpx",width: "120rpx",borderTopRightRadius: "60rpx",borderBottomLeftRadius: "60rpx",display: "inline-block",margin: "0 30rpx"},views: [],type: "view"},{css: {background: "#ff9d00",height: "120rpx",width: "120rpx",borderRadius: "50%",display: "inline-block"},views: [],type: "view"},]}}
}

View 容器

  • 类似于 div 可以嵌套承载更多的 view、text、image,qrcode 共同构建一颗完整的节点树
  • 在 JSON 里具有 views 的数组字段,用于嵌套承载节点。

海报设计器

DIY可视化对lime-painter结合现有的系统提供的可视化布局,我们先对海报进行设计,然后结合低代码代码生成器,快速生成适配lime-painter代码。

代码生成器

<template><view class="container container329152"><text @tap="navigateTo" data-type="openmodal" data-id="painter" class="diygw-col-24"> 内容 </text><view class="flex flex-direction-column align-center diygw-col-24 painter-clz"><image class="diygw-col-24" :src="painter" mode="widthFix"></image><l-painter ref="painterRef" isCanvasToTempFilePath @success="painter = $event" hidden css="background: linear-gradient( 135deg, #FCCF31 10%, #F55555 100%);width:750rpx;"><l-painter-view css="display:flex;flex-wrap:wrap;flex-direction:column;flex-shrink:0;padding-top:20rpx;color:#ffffff;padding-left:20rpx;width:750rpx;padding-bottom:20rpx;padding-right:20rpx;"><l-painter-view css="display:flex;flex-wrap:wrap;align-items:center;padding-top:10rpx;color:#ffffff;padding-left:10rpx;padding-bottom:10rpx;padding-right:10rpx;"><l-painter-image src="/static/10.jpg" css="border-bottom-left-radius:50%;overflow:hidden;border-top-left-radius:50%;border-top-right-radius:50%;border-bottom-right-radius:50%;height:80rpx; width:80rpx ;" mode="widthFix"></l-painter-image><l-painter-view css="display:flex;flex-wrap:wrap;flex-direction:column;padding-top:10rpx;flex:1;padding-left:10rpx;padding-bottom:10rpx;padding-right:10rpx;"><l-painter-text text="DIY可视化" css=""> </l-painter-text><l-painter-text text="为你挑选了一个好物" css=""> </l-painter-text></l-painter-view></l-painter-view><l-painter-view css="display:flex;flex-wrap:wrap;flex-direction:column;padding-top:20rpx;border-bottom-left-radius:12rpx;color:#000000;padding-left:20rpx;padding-bottom:20rpx;border-top-right-radius:12rpx;background-color:#ffffff;flex-shrink:0;overflow:hidden;width:670rpx;border-top-left-radius:12rpx;border-bottom-right-radius:12rpx;padding-right:20rpx;"><l-painter-image src="/static/pic1.jpg" css="border-bottom-left-radius:12rpx;overflow:hidden;border-top-left-radius:12rpx;border-top-right-radius:12rpx;border-bottom-right-radius:12rpx;height:240rpx; width:100% ;" mode="widthFix"></l-painter-image><l-painter-view css="display:flex;flex-wrap:wrap;align-items:end;padding-top:10rpx;padding-left:10rpx;padding-bottom:10rpx;padding-right:10rpx;"><l-painter-text text="¥139" css="color:#fe0505;font-weight:bold;font-size:32rpx;"> </l-painter-text><l-painter-text text="¥139" css="text-decoration:line-through;vertical-align:bottom;"> </l-painter-text></l-painter-view><l-painter-view css="display:flex;flex-wrap:wrap;padding-top:10rpx;color: #8c5400;padding-left:10rpx;padding-bottom:10rpx;padding-right:10rpx;"><l-painter-text text="自营" css="background-color:#fff4d9;margin-left:0rpx;margin-top:0rpx;margin-bottom:0rpx;margin-right:10rpx;"> </l-painter-text><l-painter-text text="30天最低价" css="background-color:#fff4d9;margin-left:0rpx;margin-top:0rpx;margin-bottom:0rpx;margin-right:10rpx;"> </l-painter-text><l-painter-text text="满减优惠" css="background-color:#fff4d9;margin-left:0rpx;margin-top:0rpx;margin-bottom:0rpx;margin-right:10rpx;"> </l-painter-text></l-painter-view><l-painter-view css="display:flex;flex-wrap:wrap;align-items:center;padding-top:10rpx;padding-left:10rpx;padding-bottom:10rpx;padding-right:10rpx;"><l-painter-text text="DIY可视化DIY可视化DIY可视化DIY可视化DIY可视化DIY可视化DIY可视化DIY可视化" css="line-clamp: 2;flex:1;font-weight:bold;vertical-align:center;font-size:28rpx;"> </l-painter-text><l-painter-qrcode :text="qrcode" css="height:120rpx;width:120rpx" mode="aspectFit"></l-painter-qrcode></l-painter-view></l-painter-view></l-painter-view></l-painter><view class="flex diygw-col-24"><button @tap="savePainter()" class="diygw-btn green radius flex-sub margin-xs">生成海报</button></view></view></view><view class="clearfix"></view>
</template><script>export default {data() {return {//用户全局信息userInfo: {},//页面传参globalOption: {},//自定义全局变量globalData: {},painter: '',qrcode: `https://www.diygw.com`};},onShow() {this.setCurrentPage(this);},onLoad(option) {this.setCurrentPage(this);if (option) {this.setData({globalOption: this.getOption(option)});}this.init();},methods: {async init() {},savePainter() {// #ifdef H5uni.showToast({title: '长按上方图片保存',duration: 2000});// #endif// #ifndef H5this.$refs.painterRef.canvasToTempFilePathSync({fileType: 'jpg',quality: 1,success: (res) => {console.log(res.tempFilePath);uni.saveImageToPhotosAlbum({filePath: res.tempFilePath,success: function () {uni.showToast({title: '保存成功',duration: 2000});console.log('save success');},fail(e) {if (e.errMsg === 'saveImageToPhotosAlbum:fail auth deny') {uni.showModal({title: '提示',content: '需要您授权保存相册',showCancel: false,success: (modalSuccess) => {uni.openSetting({success(settingdata) {console.log('settingdata', settingdata);if (settingdata.authSetting['scope.writePhotosAlbum']) {uni.showModal({title: '提示',content: '获取权限成功,再次点击图片即可保存',showCancel: false});} else {uni.showModal({title: '提示',content: '获取权限失败,将无法保存到相册哦~',showCancel: false});}}});}});}}});},fail(e) {console.log('生成海报失败', e);}});// #endif}}};
</script><style lang="scss" scoped>.painter-clz {z-index: 1000000;}.text1-clz {color: #fe0505;font-weight: bold;font-size: 32rpx !important;}.text4-clz {text-decoration: line-through;vertical-align: bottom;}.text5-clz {background-color: #fff4d9;margin-left: 0rpx;margin-top: 0rpx;margin-bottom: 0rpx;margin-right: 10rpx;}.text6-clz {background-color: #fff4d9;margin-left: 0rpx;margin-top: 0rpx;margin-bottom: 0rpx;margin-right: 10rpx;}.text7-clz {background-color: #fff4d9;margin-left: 0rpx;margin-top: 0rpx;margin-bottom: 0rpx;margin-right: 10rpx;}.text8-clz {flex: 1;font-weight: bold;vertical-align: middle;font-size: 28rpx !important;}.container329152 {}
</style>

生成海报的步骤

设计海报布局:首先,需要根据需求设计海报的布局和内容。这通常包括确定海报的尺寸、背景、文字、图片和二维码等元素的位置和样式。
引入插件或组件:工具已经集成了该插件,导出源码包括了插件。
配置海报内容:通过Template的方式配置海报的内容。这包括设置各个元素的类型、样式和属性等。
生成海报:在页面中调用插件或组件提供的生成海报的方法,将配置好的海报内容渲染成图片。生成的图片可以保存到本地或上传到服务器进行分享和传播。

注意事项

跨域问题:在使用网络图片时,需要注意跨域问题。H5和Nvue平台可能需要处理跨域请求的相关配置。
性能优化:生成海报的过程可能会涉及大量的计算和渲染工作,因此需要注意性能优化。可以通过减少不必要的元素、优化图片大小和质量等方式来提高性能。
兼容性测试:在不同的平台和设备上测试海报生成器的兼容性和稳定性。确保在不同环境下都能正常生成和显示海报。
综上所述,uni-app海报生成器可以通过集成特定的插件或组件来实现,这些插件或组件提供了丰富的功能和灵活性。在使用过程中,需要注意跨域问题、性能优化和兼容性测试等方面的问题。

相关文章:

低代码可视化-uniapp海报可视化设计-代码生成

在uni-app中&#xff0c;海报生成器通常是通过集成特定的插件或组件来实现的&#xff0c;这些插件或组件提供了生成海报所需的功能和灵活性。我们采用了lime-painter海报组件。lime-painter是一款canvas海报组件&#xff0c;可以更轻松地生成海报。它支持通过JSON及Template的方…...

一次使用LD_DEBUG定位问题的经历

在实际工作中&#xff0c;当遇到段错误&#xff0c;我们会很容易的想到这是非法访问内存导致的&#xff0c;比如访问了已经释放的内存&#xff0c;访问数据越界&#xff0c;尝试写没有写权限的内存等。使用gdb进行调试&#xff0c;查看出异常的调用栈&#xff0c;往往可以定位到…...

数据库安全:如何进行数据库安全审计?

数据库安全:如何进行数据库安全审计? 数据库安全审计是保障数据库安全的重要手段之一,可以帮助企业及时发现潜在的安全风险并采取相应的措施。以下是进行数据库安全审计的步骤和方法: 一、确定审计目标 在进行数据库安全审计之前,首先需要确定审计的目标。这可能包括以…...

【Python】基础语法错误和异常

在Python中&#xff0c;语法错误和异常是两个常见的问题。下面对它们进行简要介绍。 1.语法错误 (Syntax Error) 语法错误是指代码的语法不符合Python的语言规则。当Python解释器读取程序代码时&#xff0c;如果发现语法不正确&#xff0c;就会抛出语法错误。这种错误通常在代…...

获取每个页面的元素,并写入json

获取每个页面的元素&#xff0c;并写入json 想法&#xff1a;如何去记住每个页面的元素&#xff0c;如何实现不同页面的导航&#xff0c;如何从主页面遍历每一个页面的每一个元素 1.创建数据结构存储 2.树状图正好是我们想要的结构体&#xff1a;创建树状图结构体 3.记录每个页…...

【ShuQiHere】深入解析数字电路中的锁存器与触发器

深入解析数字电路中的锁存器与触发器 &#x1f916;&#x1f50c; 在数字电路设计中&#xff0c;**锁存器&#xff08;Latch&#xff09;和触发器&#xff08;Flip-Flop&#xff09;**是实现时序逻辑的基本元件。它们能够存储状态&#xff0c;是构建复杂数字系统的关键。本文将…...

【学习AI-相关路程-mnist手写数字分类-python-硬件:jetson orin NX-自我学习AI-基础知识铺垫-遇到问题(1) 】

【学习AI-相关路程-mnist手写数字分类-python-硬件&#xff1a;jetson orin NX-自我学习AI-基础知识铺垫-遇到问题&#xff08;1&#xff09; 】 1、前言2、先行了解&#xff08;1&#xff09;学习基础知识-了解jetson orin nx 设备&#xff08;2&#xff09;学习python&AI…...

数据轻松上云——Mbox边缘计算网关

随着工业4.0时代的到来&#xff0c;工厂数字化转型已成为提升生产效率、优化资源配置、增强企业竞争力的关键。我们凭借其先进的边缘计算网关与云平台技术&#xff0c;为工厂提供了高效、稳定的数据采集与上云解决方案。本文将为您介绍Mbox边缘计算网关如何配合明达云平台&…...

ifftshift函数

ifftshift 原理 将频域数据移回时域的函数。它通常与 fftshift 配合使用&#xff0c;后者用于将时域数据移动到频域中心。 而ifftshift所作的事正好相反&#xff0c;将频谱恢复到能量集中在两端&#xff08;或四个角&#xff09;上&#xff0c;接着就可以做逆傅里叶变换了 具…...

vue3 + ts + element-plus 二次封装 el-dialog

实现效果&#xff1a; 组件代码&#xff1a;注意 style 不能为 scoped <template><el-dialog class"my-dialog" v-model"isVisible" :show-close"false" :close-on-click-modal"false" :modal"false"modal-class&…...

MySQL9.0安装教程zip手动安装(Windows)

本章教程&#xff0c;主要介绍如何在Windows上安装MySQL9.0&#xff0c;通过zip方式进行手动安装。 一、下载MySQL压缩包 下载地址&#xff1a;https://downloads.mysql.com/archives/community/ 二、解压MySQL压缩包 将下载好的压缩包&#xff0c;进行解压缩&#xff0c;并且将…...

如何在浏览器中查看格式化的 HTML?

问题描述 我需要这个 HTML 页面在我的浏览器中显示格式化后的信息。我只是将文件存储在本地驱动器上。我需要将文件上传到服务器才能将其作为 HTML 查看&#xff0c;还是可以在本地查看&#xff1f;如在屏幕截图中看到的&#xff0c;它当前显示相同的 HTML 代码。我尝试搜索&am…...

浅谈计算机存储体系和CPU缓存命中

一、计算机存储 一般关于计算机存储体系分为三层 ①三级缓存/寄存器 大多数寄存器只有四字节到八字节&#xff0c;只用于读取很小的数据&#xff1b;三级缓存是为了方便CPU读取内存中数据而存在的 ②内存————数据结构就是在内存中管理数据 ③硬盘————数据库/文件就…...

ES操作:linux命令

查询数据库所有索引 没有密码 curl -X GET "http://localhost:9200/_cat/indices?v" 有密码 curl -u elastic:my_password -X GET "http://localhost:9200/_cat/indices?v" 删除索引 curl-X DELETE "http://localhost:9200/index_XXX" 不…...

Java使用原生HttpURLConnection实现发送HTTP请求

Java 实现发送 HTTP 请求&#xff0c;系列文章&#xff1a; 《Java使用原生HttpURLConnection实现发送HTTP请求》 《Java使用HttpClient5实现发送HTTP请求》 《SpringBoot使用RestTemplate实现发送HTTP请求》 1、HttpURLConnection 类的介绍 HttpURLConnection 是 Java 提供的…...

TinyC编译器5—词法分析

1.词法分析的概念 词法分析也称为 分词 &#xff0c;此阶段编译器从左向右扫描源文件&#xff0c;将其字符流分割成一个个的 词 &#xff08; token 、 记号 &#xff0c;后文中将称为 token &#xff09;。所谓 token &#xff0c;就是源文件中不可再进一步分割的一串字符&am…...

电子电气架构---智能计算架构和SOA应用

我是穿拖鞋的汉子&#xff0c;魔都中坚持长期主义的汽车电子工程师。 老规矩&#xff0c;分享一段喜欢的文字&#xff0c;避免自己成为高知识低文化的工程师&#xff1a; 屏蔽力是信息过载时代一个人的特殊竞争力&#xff0c;任何消耗你的人和事&#xff0c;多看一眼都是你的不…...

Python Numpy 实现神经网络自动训练:反向传播与激活函数的应用详解

Python Numpy 实现神经网络自动训练&#xff1a;反向传播与激活函数的应用详解 这篇文章介绍了如何使用 Python 的 Numpy 库来实现神经网络的自动训练&#xff0c;重点展示了反向传播算法和激活函数的应用。反向传播是神经网络训练的核心&#xff0c;能够通过计算梯度来优化模…...

Apache Calcite - 基于规则的查询优化

基于规则的查询优化 基于规则的查询优化&#xff08;Rule-based Query Optimization&#xff09;是一种通过应用一系列预定义的规则来优化查询计划的技术。这些规则描述了如何转换关系表达式&#xff0c;以提高查询执行的效率。基于规则的优化器并不依赖于统计信息&#xff0c…...

react学习笔记,ReactDOM,react-router-dom

react 学习 1. 下载与安装 下载 npm install -g create-react-app 安装 npx create-react-app xxx 推荐 npm init react-app xxx yarn create react-app xxx 2. 创建 react 元素 indexjs 文件 import React from "react"; import ReactDOM from "react…...

FastAPI安全防线:OAuth2 + JWT 实现无状态认证的完整流程

更多内容请见: 《Python Web项目集锦》 - 专栏介绍和目录 在现代Web应用开发中,安全认证是构建可靠API的基石。FastAPI通过其强大的安全组件,为开发者提供了实现安全、可扩展认证系统的工具。本文将深入剖析OAuth2与JWT在FastAPI中的整合实现,揭示无状态认证的完整流程,提…...

Phan静态分析工具:10个自动化代码质量检查的终极指南

Phan静态分析工具&#xff1a;10个自动化代码质量检查的终极指南 【免费下载链接】phan Phan is a static analyzer for PHP. Phan prefers to avoid false-positives and attempts to prove incorrectness rather than correctness. 项目地址: https://gitcode.com/gh_mirro…...

Pixel Fashion Atelier部署教程:华为云ModelArts平台上的Ascend NPU适配实践

Pixel Fashion Atelier部署教程&#xff1a;华为云ModelArts平台上的Ascend NPU适配实践 1. 项目概述 Pixel Fashion Atelier是一款基于Stable Diffusion与Anything-v5的图像生成工作站&#xff0c;采用独特的像素艺术风格界面设计。与传统AI工具不同&#xff0c;它将图像生成…...

Java医疗系统通过等保三级测评前,这8个高危漏洞必须在72小时内闭环(附OWASP Top 10映射清单)

第一章&#xff1a;医疗Java系统等保三级合规性基线与高危漏洞判定标准在医疗行业&#xff0c;Java系统承载着电子病历、HIS、LIS、PACS等核心业务&#xff0c;其安全合规性直接关系患者隐私与公共健康。等保三级要求系统具备完善的身份鉴别、访问控制、安全审计、入侵防范及可…...

别再只盯着Loss曲线了!TensorBoard的SCALARS面板还有这些隐藏玩法(附GAN训练实战)

解锁TensorBoard SCALARS面板的隐藏战力&#xff1a;从GAN训练曲线中洞察模型灵魂 当你盯着GAN训练中那对纠缠不清的生成器和判别器Loss曲线时&#xff0c;是否感觉像在解读一部悬疑小说&#xff1f;TensorBoard的SCALARS面板远比大多数开发者想象的强大——它不仅是数据的展示…...

ESP32 FreeRTOS任务状态全解析:从就绪态到挂起态的深度理解与应用

ESP32 FreeRTOS任务状态全解析&#xff1a;从就绪态到挂起态的深度理解与应用 在嵌入式系统开发中&#xff0c;任务调度是实时操作系统(RTOS)的核心功能之一。对于ESP32开发者而言&#xff0c;深入理解FreeRTOS的任务状态模型&#xff0c;能够帮助我们编写出更高效、更可靠的多…...

FUTURE POLICE语音对齐系统:MySQL数据库集成与结果分析实战

FUTURE POLICE语音对齐系统&#xff1a;MySQL数据库集成与结果分析实战 1. 语音对齐数据管理的挑战与解决方案 语音识别与对齐技术正在改变我们处理音频内容的方式。FUTURE POLICE系统凭借其毫秒级精度的强制对齐能力&#xff0c;为语音数据处理树立了新标准。然而&#xff0…...

DM数据库迁移实战:dimp与dexp版本兼容性问题解析与解决方案

1. 当DM数据库迁移遇上版本兼容性问题 最近在帮客户做DM数据库迁移时&#xff0c;遇到了一个典型问题&#xff1a;用高版本dexp导出的数据文件&#xff0c;无法用低版本dimp导入。这就像用最新版Word写的文档&#xff0c;用老版本打不开一样让人头疼。具体表现是执行导入命令时…...

Phi-3-mini-4k-instruct快速体验:Ollama部署教程与入门Prompt分享

Phi-3-mini-4k-instruct快速体验&#xff1a;Ollama部署教程与入门Prompt分享 1. 模型简介 Phi-3-Mini-4K-Instruct是微软推出的轻量级开源语言模型&#xff0c;具有以下核心特点&#xff1a; 轻量高效&#xff1a;仅38亿参数&#xff0c;适合在普通硬件上运行强大推理&…...

nli-distilroberta-base多场景:科研论文摘要与结论段落逻辑支撑关系分析

nli-distilroberta-base多场景&#xff1a;科研论文摘要与结论段落逻辑支撑关系分析 1. 项目概述 nli-distilroberta-base是基于DistilRoBERTa模型的自然语言推理(NLI)Web服务&#xff0c;专门用于分析两个句子之间的逻辑关系。这个轻量级模型在学术写作领域具有独特价值&…...