特性 | Sdcb.WordCloud | KnowledgePicker.WordCloud |
---|---|---|
渲染引擎 | SkiaSharp(跨平台) | SkiaSharp(跨平台) |
输出格式 | 图片(PNG)、SVG、JSON | 图片(Bitmap)、SVG(需要自绘) |
自定义程度 | 高(遮罩、字体、多方向、JSON输出等) | 中(字体、颜色、布局可定制,但不支持遮罩) |
遮罩功能 | ✅ 原生支持遮罩图生成特定形状词云 | ❌ 暂不支持遮罩,生成规则矩形词云 |
最近维护状态 | 活跃(2024年持续更新) | 活跃(2024年有提交) |
使用复杂度 | 中(配置多、自由度高) | 中(较简洁,适合快速集成) |
2.都支持灵活配置字体、布局、颜色,并且速度非常快。
5.开源友好:MIT License,开发者自由扩展。
dotnet add package Sdcb.WordCloud实战:在 StarBlogPublisher 中应用
private async Task<List<WordScore>?> GetWordScores() { var response = await ApiService.Instance.Categories.GetWordCloud(); if (response.Data == null) thrownew Exception("获取词云数据失败"); var originalScores = response.Data .Select(e => new WordScore(Score: e.Value, Word: e.Name)) .ToList(); // 堆代码 duidaima.com var extendedScores = new List<WordScore>(); foreach (var score in originalScores) { for (int i = 0; i < 10; i++) { extendedScores.Add(score); } } return extendedScores; }这里小技巧: 将原本每个单词的词频复制多次,可以有效提升词云的视觉密度和丰富度。
private async Task GenerateWordCloudImage() { var wordScores = await GetWordScores(); if (wordScores == null || !wordScores.Any()) { ErrorMessage = "没有可用的词云数据"; return; } var wc = WordCloud.Create(new WordCloudOptions(900, 900, wordScores) { FontManager = new FontManager([ SKTypeface.FromFamilyName("Times New Roman") ]), Mask = MaskOptions.CreateWithForegroundColor( SKBitmap.Decode(awaitnew HttpClient().GetByteArrayAsync( "https://io.starworks.cc:88/cv-public/2024/alice_mask.png" )), SKColors.White ) }); usingvar skImage = wc.ToSKBitmap(); usingvar data = skImage.Encode(SKEncodedImageFormat.Png, 100); usingvar stream = new MemoryStream(data.ToArray()); WordCloudImage = new Bitmap(stream); }这里用了两点增强体验的小技巧:
自定义字体:更换字体可以让整体风格更符合网站/应用的设计感。