Echarts添加水印

news2024/11/15 9:53:42

如果直接说水印,很难在官方找到一些痕迹,但是换个词【纹理】就能找到了。水印就是一种特殊的纹理背景。

Echarts-backgroundColor

backgroundColor

支持使用rgb(255,255,255)rgba(255,255,255,1)#fff等方式设置为纯色,也支持设置为渐变色和纹理填充,具体见option.color

color

支持的颜色格式:

  • 使用 RGB 表示颜色,比如 'rgb(128, 128, 128)',如果想要加上 alpha 通道表示不透明度,可以使用 RGBA,比如 'rgba(128, 128, 128, 0.5)',也可以使用十六进制格式,比如 '#ccc'

  • 渐变色或者纹理填充

    // 线性渐变,前四个参数分别是 x0, y0, x2, y2, 范围从 0 - 1,相当于在图形包围盒中的百分比,如果 globalCoord 为 `true`,则该四个值是绝对的像素位置
    {
      type: 'linear',
      x: 0,
      y: 0,
      x2: 0,
      y2: 1,
      colorStops: [{
          offset: 0, color: 'red' // 0% 处的颜色
      }, {
          offset: 1, color: 'blue' // 100% 处的颜色
      }],
      global: false // 缺省为 false
    }
    // 径向渐变,前三个参数分别是圆心 x, y 和半径,取值同线性渐变
    {
      type: 'radial',
      x: 0.5,
      y: 0.5,
      r: 0.5,
      colorStops: [{
          offset: 0, color: 'red' // 0% 处的颜色
      }, {
          offset: 1, color: 'blue' // 100% 处的颜色
      }],
      global: false // 缺省为 false
    }
    // 纹理填充
    {
      image: imageDom, // 支持为 HTMLImageElement, HTMLCanvasElement,不支持路径字符串
      repeat: 'repeat' // 是否平铺,可以是 'repeat-x', 'repeat-y', 'no-repeat'
    }
    

水印

通过一个新的canvas绘制水印,然后在backgroundColor中添加

const waterMarkText = 'YJFicon'; // 水印
const canvas = document.createElement('canvas'); // 绘制水印的canvas
const ctx = canvas.getContext('2d');
canvas.width = canvas.height = 100; // canvas大小 - 控制水印间距
ctx.textAlign = 'center'; // 文字水平对齐
ctx.textBaseline = 'middle'; // 文字对齐方式
ctx.globalAlpha = 0.08; // 透明度
ctx.font = '20px Microsoft Yahei'; // 文字格式 style size family
ctx.translate(50, 50); // 偏移
ctx.rotate(-Math.PI / 4); // 旋转
ctx.fillText(waterMarkText, 0, 0); // 绘制水印

option = {
   
    //...
    backgroundColor: {
   //在背景属性中添加
        // type: 'pattern',
        image: canvas,
        repeat: 'repeat'
    }
    ...
}

image.png

如果只想在 toolbox.saveAsImage 下载的图片才展示水印,toolbox.feature.saveAsImage 支持配置backgroundColor,将其设置为水印【纹理】即可

option = {
   
    //...
    toolbox: {
   
        show: true,
        feature: {
   
            ...
            saveAsImage: 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2058824.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

哪个牌子的开放式耳机性价比高?五款地表最强机型推荐!

在我们的日常生活中,街道、地铁车厢或公交车等地方常常充满了噪音,这些杂音不仅可能扰乱心情,还可能对我们的听力造成潜在的伤害。在这样的环境下,如果想要享受音乐或追剧,同时又能保持对周围环境的警觉,开…

充电宝哪个品牌好?360度全方面测评热门款充电宝

在这个智能手机、平板电脑等移动设备普及的时代,充电宝已成为我们日常生活中不可或缺的伴侣。无论是在通勤途中、旅行出行,还是在户外运动时,充电宝都能为我们的设备提供源源不断的电力支持。然而,市场上充电宝品牌众多&#xff0…

c++开发,下载安装Boost库并检测是否安装成功

c开发,下载安装Boost库并检测是否安装成功 系统说明下载Boost库安装测试验证 系统说明 win10系统 下载Boost库 从官方网站下载,点击版本号 进去后选择windows系统的下载 安装 第1步 将下载后的压缩包解压到你想存储的文件夹中,比如我这里…

自主身份:Web3如何重新定义个人数据所有权

随着数字时代的快速发展,个人数据成为了一种新型的资产,深刻影响着我们的生活。然而,在Web2时代,个人数据往往被科技巨头所掌控,用户在享受互联网服务时,无意中失去了对自己数据的控制权。Web3的到来&#…

Java 调整字符串,验证码生成

package text7;public class ZiFanz {public static void main(String[] args) {//1.定义两个字符串String strA "abcde";String strB "deabc";//2.abcde->bcdea->cdeab->deabc旋转字符串//旋转并比较boolean result cheak(strA, strB);System…

时间序列分析中的特征提取

一、说明 在多变量时间序列分析期间,数据包含随时间推移测量的多个数据。为了管理模型性能,建议进行特征提取,以使模型的数据点更加紧凑。 二、时间序列的挑战 2.1 特征提取 仅选择“信息性”特征,这些特征在多变量时间序列分析…

【Java】了解线程 Thread 类的使用,如何创建、终止、等待一个线程,一文读懂不迷路

线程是什么 线程是操作系统中调度的基本单位,是比进程更小的执行单元。线程在进程内部运行,共享该进程的资源,如内存和文件句柄,但每个线程都有自己的执行栈和程序计数器。 线程的主要特点包括: 轻量级:…

格式工厂怎么转换mp4?简单4步实现视频转换

视频转换的重要性不言而喻。随着科技的发展,视频已经成为我们生活中不可或缺的一部分。然而,不同的设备和平台往往支持不同的视频格式,这就导致了视频兼容性问题。此外,不同格式的视频文件在存储和传输方面也存在差异。因此&#…

【MySQL】数据库基础与MySQL的安装

1. 数据库基础 1.1 什么是数据库 在接触数据库之前,回想一下我们之前写的所有小项目,如果需要持久化保存一些内容,我们是保存在文件中的,似乎也能够很不错的支持我们的操作,解决我们的需求。但是,实际上是…

健身房管理系统的设计与实现设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图详细视频演示技术栈系统测试为什么选择我官方认证玩家,服务很多代码文档,百分百好评,战绩可查!!入职于互联网大厂,可以交流,共同进步。有保障的售后 代码参考数据库参…

Redis7基础篇(七)

redis哨兵(sentinel) 目录 redis哨兵(sentinel) 是什么 能干吗 案例演示 架构 案例步骤 出现的问题 哨兵的运行流程和选举原理 哨兵的使用建议​编辑 是什么 在之前的复制中我们了解到 主机shutdown之后 从机就会一直等…

轻松创作高质量的AI音乐——Suno API

Suno 歌曲生成 API 对接指南 随着人工智能技术的飞速发展,各类 AI 程序已如雨后春笋般涌现。AI 不再是遥不可及的存在,它的身影深入了人类工作与生活的每一个角落。其应用领域也愈加广泛,从初期的写作,到现如今的医疗、教育&…

为什么同一台手机连着电脑的ip地址不一样

在现代社会中,网络已成为我们日常生活不可或缺的一部分。从日常办公到休闲娱乐,网络无处不在。然而,在享受网络带来的便利时,我们可能会遇到一些看似复杂实则有趣的网络现象。今天,我们就来探讨一个常见却又容易被忽视…

LLM | 面向对话式医疗健康场景的医疗大模型

近日,复旦大学数据智能与社会计算实验室 (Fudan-DISC) 开发并开源了一个专门针对医疗健康对话式场景而设计的医疗领域大模型:DISC-MedLLM。 DISC-MedLLM DISC-MedLLM 是一个专为医疗健康对话场景而打造的领域大模型,它可以满足您的各种医疗保…

嵌入式堆栈、ARM寄存器

栈里面存放的内容:局部变量和系统信息,函数调用链路也是系统信息的一环 ARM寄存器 LR:程序跳转的时候,返回到的地址就保存到此处 PC:程序计数器,pc 要执行的下一条指令地址,就存放在此处&#…

Obsidian Publish的开源替代品Markopolis

什么是 Markopolis ? Markopolis 是一款旨在提供 Markdown 文件的 Web 应用和 API 服务器。它允许您以网站形式共享 Markdown 笔记,并使用 API 与 Markdown 文件交互和操作它们。类似于 Obsidian Publish,但又不会被锁定在 Obsidian 生态系统…

FMS 2024:多家厂商CXL技术方案总览

CXL(Compute Express Link)联盟自成立以来一直是FMS闪存峰会的常客。在2022年的峰会上,CXL联盟宣布了CXL 3.0版本规范,随后在2023年的超级计算大会上推出了CXL 3.1版本。起初,CXL作为一种主机到设备的互联标准&#xf…

【LiteX】【仿真】使用litex_sim在Python环境中实现FPGA SoC仿真测试

目录 介绍环境依赖litex_sim 入门仿真litex_server、litex_cli、litescope_cli仿真调试litex_sim仿真窗口litex_server窗口litex_cli窗口litescope_cli窗口 波形DUMP方法一:导出指定时间段的波形方法二:在命令行中配置寄存器控制波形导出方法三&#xff…

BI分析实操案例分享:零售企业如何利用BI工具对销售数据进行分析?

在当下这个竞争激烈的零售市场,企业如何在波诡云谲的商场中站稳脚跟,实现销售目标的翻倍增长? 答案可能就藏在那些看似杂乱无章的数字里。 是的,你没有看错,答案正是那些我们日常接触的销售数据。它们就像是宝藏&…

92.SAP ABAP - RFC函数外部调用时的debug - 笔记

当RFC函数被外部系统访问,需要联合调试时,也需要debug模式,打断点进行跟踪。这种要如何做呢? 目录 1.SE37进入程序,通过菜单Utilities-Settings进入 2.ABAP Editor-Debugging Tab页面 3.单击Set/Delete External Br…