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

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上看到你的身影,无论是提出建议,还是贡献代码,或是简单地给这个项目加星🌟,每一点力量都将成为这个项目发展的推动力。

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

posted @ 2024-02-09 18:24  .NET骚操作  阅读(1114)  评论(9编辑  收藏  举报