當前位置: 妍妍網 > 碼農

點亮.NET的文字雲藝術之光:Sdcb.WordCloud 2.0

2024-02-11碼農

點亮.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 選項來輕松實作。以下展示了如何用一段簡潔的程式碼建立五種文本方向的文字雲:

    1. TextOrientations[] orientations =

    2. [

    3. TextOrientations.PreferHorizontal,// 預設

    4. TextOrientations.PreferVertical,

    5. TextOrientations.HorizontalOnly,

    6. TextOrientations.VerticalOnly,

    7. TextOrientations.Random,

    8. ];

    9. foreach(var o in orientations)

    10. {

    11. WordCloud wc =WordCloud.Create(newWordCloudOptions(600,600,MakeDemoScore())

    12. {

    13. TextOrientation= o,

    14. });

    15. byte[] pngBytes = wc.ToSKBitmap().Encode(SKEncodedImageFormat.Png,100).AsSpan().ToArray();

    16. File.WriteAllBytes($"{o}.png", pngBytes);

    17. }

    這樣你就能得到下面這些充滿藝術感的文字雲,每一張都展示了文字的不同排列方向。

    文字雲轉換為JSON,並進行反轉操作

    使用Sdcb.WordCloud,可以很靈活地操作文字雲的數據,甚至可以將其轉換為JSON格式,方便儲存和交換:

    1. WordCloud wc =WordCloud.Create(newWordCloudOptions(900,900,MakeDemoScore())

    2. {

    3. FontManager=newFontManager([SKTypeface.FromFamilyName("Times New Roman")]),

    4. Mask=MaskOptions.CreateWithForegroundColor(SKBitmap.Decode(newHttpClient().GetByteArrayAsync("https://io.starworks.cc:88/cv-public/2024/alice_mask.png").GetAwaiter().GetResult()),SKColors.White)

    5. });

    6. string json = wc.ToJson();

    7. Console.WriteLine(json);

    8. // 可以從JSON再轉換回來

    9. WordCloud wc2 =WordCloud.FromJson(json);

    10. File.WriteAllText($"reconstructed.svg", wc2.ToSvg());

    透過這種方式,你可以靈活地將文字雲存為JSON,並在需要的時候重建它。

    套用遮罩的文字雲

    想要讓文字雲填充特定形狀?使用遮罩,你可以輕易做到:

    1. WordCloud wc =WordCloud.Create(newWordCloudOptions(900,900,MakeDemoScore())

    2. {

    3. FontManager=newFontManager([SKTypeface.FromFamilyName("Times New Roman")]),

    4. Mask=MaskOptions.CreateWithForegroundColor(SKBitmap.Decode(newHttpClient().GetByteArrayAsync("https://io.starworks.cc:88/cv-public/2024/alice_mask.png").GetAwaiter().GetResult()),SKColors.White)

    5. });

    6. byte[] pngBytes = wc.ToSKBitmap().Encode(SKEncodedImageFormat.Png,100).AsSpan().ToArray();

    7. File.WriteAllBytes($"mask.png", pngBytes);

    這樣,單詞將被巧妙地分布在指定的形狀中,就像這個範例中的Alice蒙面形象。

    使用特定字型的文字雲

    透過指定字型,你可以制作出符合品牌形象或主題風格的文字雲:

    1. WordCloud wc =WordCloud.Create(newWordCloudOptions(600,600,MakeDemoScore())

    2. {

    3. FontManager=newFontManager([SKTypeface.FromFamilyName("Consolas")])

    4. });

    5. byte[] pngBytes = wc.ToSKBitmap().Encode(SKEncodedImageFormat.Png,100).AsSpan().ToArray();

    6. File.WriteAllBytes($"specified-font.png", pngBytes);

    選擇合適的字型,你的文字雲不僅能傳遞資訊,還能提升視覺效果。

    生成SVG輸出

    對於需要可延伸圖形的Web應用程式,可以直接產出SVG格式:

    1. WordCloud wc =WordCloud.Create(newWordCloudOptions(900,900,MakeDemoScore())

    2. {

    3. FontManager=newFontManager([SKTypeface.FromFamilyName("Consolas")])

    4. });

    5. 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編程的奧秘和魅力。期待你的加入!