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

【svg】—— java提取svg中的颜色

 需要针对svg元素进行解析,并提取其中的颜色,首先需要知道svg中的颜色。针对svg中颜色的格式大致可以一般有纯色和渐变两种形式。对于渐变有分为:线性渐变和放射性渐变针对svg中的颜色支持16进制的格式,又可以支持RGB的格式,再者渐变颜色是以连接的形式存在的。提取渐变的颜色需要找到fill对应的dom节点![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/7254e8f46a1e404eb141ebb417a57e19.png#pic_center)

16进制颜色判断

private static boolean isHexColor(String value) {value = StringUtils.lowerCase(value);return Pattern.compile(HEX_COLOR).matcher(value).matches();}```
## RGB颜色判断
```javaprivate static boolean isRgbColor(String value) {value = StringUtils.lowerCase(value).replace(StringUtils.SPACE, StringUtils.EMPTY);// 此处只做简单的数值校验,不做范围的验证return Pattern.compile(RGB_COLOR).matcher(value).matches();}```## 渐变颜色判断
```javaprivate static boolean isGradientColor(String value) {value = StringUtils.lowerCase(value).replace(StringUtils.SPACE, StringUtils.EMPTY);return Pattern.compile(GRADIENT_ID).matcher(value).matches();}

提取颜色代码

public static void getSvgColor(org.jsoup.nodes.Element svgElem, Set<String> colorSet) {String color = svgElem.attr("fill");if (isHexColor(color) || isRgbColor(color) || isGradientColor(color)) {colorSet.add(color);}Elements children = svgElem.children();for (org.jsoup.nodes.Element child : children) {getSvgColor(child, colorSet);}}

测试

 public static void main(String[] args) throws Exception {// 指定文件路径String filePath = "/Users/qweasdzxc/Downloads/1.svg";try {// 使用Files.readAllLines读取文件的所有行,使用UTF-8编码List<String> lines = Files.readAllLines(Paths.get(filePath), StandardCharsets.UTF_8);// 将字符串列表转换为一个单一的String,每行之间用系统默认的换行符分隔String svgConent = String.join(System.lineSeparator(), lines);org.jsoup.nodes.Element svgElem = Jsoup.parse(svgConent).getElementsByTag("svg").get(0);// 打印文件内容HashSet hashSet = new HashSet<>();getSvgColor(svgElem, hashSet);System.out.println(hashSet);} catch (IOException e) {// 异常处理e.printStackTrace();}}
http://www.lryc.cn/news/337231.html

相关文章:

  • 论文分享 | FAST'23 阿里云提出的针对SMR优化的存储引擎SMRSTORE
  • 题目:建造房屋 (蓝桥OJ3362)
  • 智能合约平台开发指南
  • 数学建模-最优包衣厚度终点判别法(主成分分析)
  • Mysql内存表及使用场景(12/16)
  • Django交易商场
  • 华为校园公开课走入上海交大,鸿蒙成为专业核心课程
  • 【会员单位】泰州玉安环境工程有限公司
  • Google视觉机器人超级汇总:从RT、RT-2到AutoRT/SARA-RT/RT-Trajectory、RT-H
  • LeetCode-1143. 最长公共子序列【字符串 动态规划】
  • 从0开始创建单链表
  • STC89C52学习笔记(十)
  • 初识二叉树和二叉树的基本操作
  • 如何开辟动态二维数组(C语言)
  • 【MATLAB第104期】基于MATLAB的xgboost的敏感性分析/特征值排序计算(针对多输入单输出回归预测模型)
  • C语言程序与设计——工程项目开发
  • 【Java核心技术】第6章 接口
  • 【Java探索之旅】从输入输出到猜数字游戏
  • 【动态规划】【01背包】Leetcode 1049. 最后一块石头的重量 II
  • 2023 年上海市大学生程序设计竞赛 - 四月赛
  • 别让这6个UI设计雷区毁了你的APP!
  • 继承【C/C++复习版】
  • 题目 2694: 蓝桥杯2022年第十三届决赛真题-最大数字【暴力解法】
  • 【C语言】- C语言字符串函数详解
  • 如何实现小程序滑动删除组件+全选批量删除组件
  • 基于SSM+Jsp+Mysql的农产品供销服务系统
  • ​​​​网络编程学习探索系列之——广播原理剖析
  • 小程序开发SSL证书下载和安装
  • 医疗图像分割 | 基于Pyramid-Vision-Transformer算法实现医疗息肉分割
  • 蓝桥杯 每日2题 day5