点亮.NET的文字云艺术之光——Sdcb.WordCloud 2.0

作为一名.NET开发者,你是否渴望拥有一个强大且易用的库,用以在你的应用程序中创造美轮美奂的文字云?我在经过一轮农历新年前的码力全开后,非常自豪地向大家宣布,我的个人项目—Sdcb.WordCloud 2.0,现已推出!相比于上一个版本(1.2),这个全新的版本在性能上更进一步,利用指针操作等技术进行了深度优化,大幅提升了文字云生成的速度。且支持跨平台、生成多种格式输出。现在,我们赋予文字以自由,让它们在虚拟的空间中起舞。

版本 2.0 的全新提升

  • 跨平台兼容性:在不同操作系统上工作,无需依赖于System.Drawing
  • 多种输出格式:支持生成图片、SVG或JSON数据的文字云。
  • 灵活配置:通过各种选项自定义您的文字云,包括文本方向、字体和遮罩。
  • 开源:在MIT许可下自由提供,欢迎贡献和修改。

在Sdcb.WordCloud 2.0中,我注重性能的同时,也保持了对创造力的尊重。利用.NET的强大功能,特别是指针操作的精细优化,这个版本的文字云生成不仅更加迅速,更在视觉效果上带来了更为丰富的展现。以下是基于Sdcb.WordCloud 2.0,你可以轻松实现的一些很酷的功能。

不同文本方向的文字云

要实现不同方向排列的文字云,你可以通过调整TextOrientation选项来轻松实现。以下展示了如何用一段简洁的代码创建五种文本方向的文字云:

TextOrientations[] orientations =
[
TextOrientations.PreferHorizontal, // 默认
TextOrientations.PreferVertical,
TextOrientations.HorizontalOnly,
TextOrientations.VerticalOnly,
TextOrientations.Random,
];
foreach (var o in orientations)
{
WordCloud wc = WordCloud.Create(new WordCloudOptions(600, 600, MakeDemoScore())
{
TextOrientation = o,
});
byte[] pngBytes = wc.ToSKBitmap().Encode(SKEncodedImageFormat.Png, 100).AsSpan().ToArray();
File.WriteAllBytes($"{o}.png", pngBytes);
}

这样你就能得到下面这些充满艺术感的文字云,每一张都展示了文字的不同排列方向。

文字云转换为JSON,并进行反转操作

使用Sdcb.WordCloud,可以很灵活地操作文字云的数据,甚至可以将其转换为JSON格式,方便存储和交换:

WordCloud wc = WordCloud.Create(new WordCloudOptions(900, 900, MakeDemoScore())
{
FontManager = new FontManager([SKTypeface.FromFamilyName("Times New Roman")]),
Mask = MaskOptions.CreateWithForegroundColor(SKBitmap.Decode(new HttpClient().GetByteArrayAsync("https://io.starworks.cc:88/cv-public/2024/alice_mask.png").GetAwaiter().GetResult()), SKColors.White)
});
string json = wc.ToJson();
Console.WriteLine(json); // 可以从JSON再转换回来
WordCloud wc2 = WordCloud.FromJson(json);
File.WriteAllText($"reconstructed.svg", wc2.ToSvg());

通过这种方式,你可以灵活地将文字云存为JSON,并在需要的时候重建它。

应用遮罩的文字云

想要让文字云填充特定形状?使用遮罩,你可以轻易做到:

WordCloud wc = WordCloud.Create(new WordCloudOptions(900, 900, MakeDemoScore())
{
FontManager = new FontManager([SKTypeface.FromFamilyName("Times New Roman")]),
Mask = MaskOptions.CreateWithForegroundColor(SKBitmap.Decode(new HttpClient().GetByteArrayAsync("https://io.starworks.cc:88/cv-public/2024/alice_mask.png").GetAwaiter().GetResult()), SKColors.White)
});
byte[] pngBytes = wc.ToSKBitmap().Encode(SKEncodedImageFormat.Png, 100).AsSpan().ToArray();
File.WriteAllBytes($"mask.png", pngBytes);

这样,单词将被巧妙地分布在指定的形状中,就像这个示例中的Alice蒙面形象。

使用特定字体的文字云

通过指定字体,你可以制作出符合品牌形象或主题风格的文字云:

WordCloud wc = WordCloud.Create(new WordCloudOptions(600, 600, MakeDemoScore())
{
FontManager = new FontManager([SKTypeface.FromFamilyName("Consolas")])
});
byte[] pngBytes = wc.ToSKBitmap().Encode(SKEncodedImageFormat.Png, 100).AsSpan().ToArray();
File.WriteAllBytes($"specified-font.png", pngBytes);

选择合适的字体,你的文字云不仅能传递信息,还能提升视觉效果。

生成SVG输出

对于需要可扩展图形的Web应用程序,可以直接产出SVG格式:

WordCloud wc = WordCloud.Create(new WordCloudOptions(900, 900, MakeDemoScore())
{
FontManager = new FontManager([SKTypeface.FromFamilyName("Consolas")])
});
File.WriteAllText($"out.svg", wc.ToSvg());

SVG格式保证了无论图片放大到何种程度,文字云总是清晰可见。

共享、开放、优化

Sdcb.WordCloud 2.0的每个功能示例,都使用了同一套共享的词频列表,这充分展示了其数据驱动的设计理念。同时,Sdcb.WordCloud 2.0的开源本质,意味着它能够随着社区的努力而不断优化和增强。我们所致力的,不仅仅是造福.NET社区,更是为了推动软件开发的整个生态系统向前发展。

让.NET的世界因你我而更精彩,我期待在我的项目Github页面https://github.com/sdcb/Sdcb.WordCloud上看到你的身影,无论是提出建议,还是贡献代码,或是简单地给这个项目加星,每一点力量都将成为这个项目发展的推动力。

最后,通过这篇文章,你不仅得以窥见Sdcb.WordCloud 2.0的魅力,也一窥.NET技术的潜力。我坚信,无论是文字的艺术,还是代码的力量,我们都能共同塑造一个更为美好的数字世界。欢迎加入我的.NET技术交流QQ群:495782587,一起探讨.NET编程的奥秘和魅力。期待你的加入!

点亮.NET的文字云艺术之光——Sdcb.WordCloud 2.0的更多相关文章

  1. Canvas 3D球形文字云动画特效

    Canvas 3D球形文字云动画特效 效果图: 代码如下,复制即可使用: (适用浏览器:360.FireFox.Chrome.Opera.傲游.搜狗.世界之窗. 不支持Safari.IE8及以下浏览器 ...

  2. golang实现文字云算法

    golang实现文字云算法 项目链接 https://github.com/bangbaoshi/wordcloud 效果图 测试步骤如下 git clone https://github.com/b ...

  3. python 在线生成文字云

    在线生成文字云 在线生成文字云地址  http://a.leechg.com:8080/wordcloud 效果图 大体步骤 1 接收请求中的文本,通过结巴分词处理文本. seg_generator ...

  4. 2019 GNTC 阿里云参会分享:云原生SDWAN网络2.0 一站式上云服务

    本次10/22-24 南京2019 GNTC大会上,阿里云网络云原生SDWAN网络2.0 由于独特的云原生定位.创新的解决方案,及成熟的应用案例.行业用户,获得行业媒体C114中国通信网.产业专家高度 ...

  5. 为更强大而生的开源关系型数据库来了!阿里云RDS for MySQL 8.0 正式上线!

    2019年5月29日15时,阿里云RDS for MySQL 8.0正式上线,使得阿里云成为紧跟社区步伐,发布MySQL最新版本的云厂商.RDS for MySQL 8.0 产品是阿里云推出的 MyS ...

  6. 云萌 V2.6.3.0 win10,win11 Windows永久激活工具

    Windows如果一直不激活,其实用起来问题也不大,除了无法修改壁纸.颜色.锁屏.主题以及无法使用微软账号的同步功能等之外,绝大多数的基本功能都可以正常使用.不过该激活还是得激活的.别的不说,就桌面右 ...

  7. iUAP云运维平台v3.0全面支持基于K8s的微服务架构

    什么是微服务架构? 微服务(MicroServices)架构是当前互联网业界的一个技术热点,业内各公司也都纷纷开展微服务化体系建设.微服务架构的本质,是用一些功能比较明确.业务比较精练的服务去解决更大 ...

  8. 云计算之路-阿里云上:原来“黑色0.1秒”发生在socket读取数据时

    在昨天的博文(云计算之路-阿里云上:读取缓存时的“黑色0.1秒”)中我们犯了一个很低级的错误——把13ms算成了130ms(感谢陈硕发现这个错误!),从而对问题的原因作出了错误的推断,望大家谅解! 从 ...

  9. python学习_新闻联播文字版爬虫(V 1.0版)

    python3的爬虫练习,爬取的是新闻联播文字版网站 #!/usr/bin/env python # -*- coding: utf-8 -*- ''' __author__ = 'wyf349' _ ...

  10. 为数据计算提供强力引擎,阿里云文件存储HDFS v1.0公测发布

    在2019年3月的北京云栖峰会上,阿里云正式推出全球首个云原生HDFS存储服务—文件存储HDFS,为数据分析业务在云上提供可线性扩展的吞吐能力和免运维的快速弹性伸缩能力,降低用户TCO.阿里云文件存储 ...

随机推荐

  1. Flume原理及使用案例

    本文为转载篇!原文: https://www.cnblogs.com/zhangyinhua/p/7803486.html https://www.cnblogs.com/ciade/p/549521 ...

  2. freeswitch的3XX重定向

    概述 sip协议标准RFC3261中,对3XX重定向有明确的定义. freeswitch中如何使用3XX redirect的特性,如何落地,应用场景有哪些? 环境 centos:CentOS  rel ...

  3. C# 序列化器

    理论知识: 序列化是指将对象转换成字节流,从而存储对象或将对象传输到内存.数据库或文件的过程. 它的主要用途是保存对象的状态,以便能够在需要时重新创建对象. 反向过程称为"反序列化" ...

  4. 【scikit-learn基础】--『监督学习』之 空间聚类

    空间聚类算法是数据挖掘和机器学习领域中的一种重要技术. 本篇介绍的基于密度的空间聚类算法的概念可以追溯到1990年代初期.随着数据量的增长和数据维度的增加,基于密度的算法逐渐引起了研究者的关注.其中, ...

  5. hello world 的并发实现

    本篇文章将介绍 hello world 的并发实现,其中涉及到的知识有: 并发与并行 GPM 调度系统 并发与并行 并发不是并行.并发是同时管理很多事情,这些事情可能只做了一半就被暂停做别的事情了.而 ...

  6. Gradle 出现 Could not resolve gradle

    Gradle 在进行 sync 的时候会出现 Caused by: org.gradle.internal.resolve.ModuleVersionResolveException: Could n ...

  7. js - 元素 scrollTop 设置无效的原因 及 解决办法

    原因 :  元素 display : flex ; 解决方法 : display : block;

  8. mysql-数值函数-取整-保留小数位-求余数

  9. [转帖]MySQL运维实战(2)MySQL用户和权限管理

    https://segmentfault.com/a/1190000044514403 作者:俊达 引言 MySQL数据库系统,拥有强大的控制系统功能,可以为不同用户分配特定的权限,这对于运维来说至关 ...

  10. 阿里云ECS自建K8S_IPV6重启后异常问题解决过程

    阿里云ECS自建K8S_IPV6重启后异常问题解决过程 背景 最近安装了一个单节点的K8S_IPV6 昨天不知道何故 突然宕机了. 然后只能在阿里云的控制台后台重启了ECS 启动之后看K8S的状态一开 ...