点亮.NET的文字云艺术之光——Sdcb.WordCloud 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选项来轻松实现。以下展示了如何用一段简洁的代码创建五种文本方向的文字云:

csharp 复制代码
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格式,方便存储和交换:

csharp 复制代码
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,并在需要的时候重建它。

应用遮罩的文字云

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

csharp 复制代码
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蒙面形象。

使用特定字体的文字云

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

csharp 复制代码
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格式:

csharp 复制代码
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编程的奥秘和魅力。期待你的加入!

相关推荐
李昊哲小课3 小时前
matplotlib_tutorial
数据分析·matplotlib·数据可视化
柳杉15 小时前
从动漫水面到赛博飞船:这位开发者的Three.js作品太惊艳了
前端·javascript·数据可视化
Triv20251 天前
太阳能船远程信息处理:CAN数据记录 + Grafana仪表板实战案例
grafana·数据可视化·influxdb·嵌入式系统·can总线·数据采集与监控·智能船舶
lzq6032 天前
如何利用AI生成可视化图表(统计图、流程图、思维导图……)免代码一键绘制图表
人工智能·aigc·数据可视化
柳杉3 天前
两款惊艳的 WebGL 开源项目推荐
前端·javascript·数据可视化
weixin_505154463 天前
博维数孪创新引领,3D作业指导助力制造业升级
大数据·人工智能·3d·数字孪生·数据可视化·产品交互展示
dd_669963 天前
游戏上市公司合同系统实施案例(三):从需求分层到全生命周期管理
游戏·信息可视化·数据可视化
数据小玩子3 天前
精准归因:如何量化分析光伏电站的每一分发电损失?
大数据·人工智能·数据可视化·助睿数智·光伏电站运营
Highcharts.js4 天前
数据可视化不仅属于金融、互联网|农业数据可视化设计:Farmable与Highcharts的前端设计
前端·信息可视化·数据可视化·highcharts·农业可视化
山海鲸实战案例分享6 天前
【数字孪生实战案例】如何通过自定义区域颜色,让地图组件中的特定区域突出显示?~山海鲸可视化
数字孪生·数据可视化·零代码·中国地图·实战案例·山海鲸可视化·自定义区域颜色