首页 > 其他分享 >点亮.NET的文字云艺术之光——Sdcb.WordCloud 2.0

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

时间:2024-02-09 18:33:18浏览次数:30  
标签:文字 wc WordCloud new Sdcb 2.0

点亮.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,并在需要的时候重建它。

文字云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格式保证了无论图片放大到何种程度,文字云总是清晰可见。

生成SVG输出示例

共享、开放、优化

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

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

标签:文字,wc,WordCloud,new,Sdcb,2.0
From: https://www.cnblogs.com/sdflysha/p/18012571/sdcb-wordcloud-2_0

相关文章

  • 2024.02.06
    今天白天依然百股跌停的局面开头,上午拉升了指数和中盘股,但大盘股(前期不跌反涨的)开始有被抽水的迹象,小盘股还是那个鸟样。这种情况,我还是选择了不参与。宁错过不犯错,这是很重要的一课,之前挨打多了,下午行情飙升,这种情况下立刻参与了,虽然还是有些犹豫,但也很好了。今天的操作,我觉......
  • 【2024潇湘夜雨】WIN11_Pro_23H2.22635.3139软件选装纯净版2.04
    【系统简介】=============================================================1.本次更新母盘来自WIN11_Pro_23H2.22635.3139.2.增加部分优化方案,手工精简部分较多。3.OS版本号为22635.3139。精简系统只是为部分用户安装,个别要求高的去MSDN下。4.集成《DrvCeo-2.16.0.0》网卡版、运......
  • Remix v0.42.0 更新日志
    重要讯息向GPT提问关于CircomZKP编译器的错误或警告问题Solidity默认版本变更为0.8.24,支持坎昆EVM版本工作空间模版‘Uniswapv4Periphery’更名为‘Uniswapv4Template’GPT帮助解决关于Circom的问题您尝试过使用Remix里的Circom编译器吗?如果没有,您......
  • Splunk Enterprise 9.2.0 (macOS, Linux, Windows) - 机器数据管理和分析
    SplunkEnterprise9.2.0(macOS,Linux,Windows)-机器数据管理和分析SIEM、全面的日志管理和分析平台请访问原文链接:https://sysin.org/blog/splunk-9/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.org混合世界的数据平台快速、大规模地从可见性转向行动,以实现安......
  • 【2024.02.02】构图练习(糖水肖像)
    图源糖水日记作者的午饭饭,侵删采用摄影师泰罗所说的描绘法去观察每一张图的构图与线条可以观察到除非是夜景,一般来说感光度都会拉很低,避免噪点光圈值一般都会控制在2附近及以下,为了达到更好的的一个背景虚化效果说实话描绘了几张后感觉背景确实不是那么重要,只要控制好前景部分......
  • KubeSphere 社区双周报|Fluent Bit 升级到 v2.2.2|2024.01.18-02.01
    KubeSphere社区双周报主要整理展示新增的贡献者名单和证书、新增的讲师证书以及两周内提交过commit的贡献者,并对近期重要的PR进行解析,同时还包含了线上/线下活动和布道推广等一系列社区动态。本次双周报涵盖时间为:2024.01.18-02.01。贡献者名单新晋KubeSpherecontribut......
  • 等保2.0云安全体系,点击查看
    云安全服务平台(等保2.0)创新基于智能编排创建安全服务链南北向安全-基于VPC重构安全区域边界东西向安全-基于微隑离重构安全区域边界东西向安全隔离,就是各虚拟机之间的隔离。简写词解释IaaS基础设施即服务这个模型提供了基础设施,如服务器、存储、网络等。用户可以在这个基础设施上......
  • 百度网盘(百度云)SVIP超级会员共享账号每日更新(2024.02.01)
    一、百度网盘SVIP超级会员共享账号可能很多人不懂这个共享账号是什么意思,小编在这里给大家做一下解答。我们多知道百度网盘很大的用处就是类似U盘,不同的人把文件上传到百度网盘,别人可以直接下载,避免了U盘的物理载体,直接在网上就实现文件传输。百度网盘SVIP会员可以让自己百度账......
  • 代码随想录算法训练营第四天 |24. 两两交换链表中的节点 | 19.删除链表的倒数第N个节
    142.环形链表II 已解答中等 相关标签相关企业 给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。为了表示给定链表中的环,......
  • Ubuntu22.04 & Win11 双系统hibernate热切换实现
    Ubuntu22.04&Win11双系统hibernate热切换实现目录Ubuntu22.04&Win11双系统hibernate热切换实现修改交换分区或交换文件修改交换分区获取对应硬盘的UUID修改交换文件如何使Ubuntu进入hibernate?参考文章使用命令free-m来查看当前还剩余的内存neo@NeoNeuxs:~$free-m......