ImageBorderRemoverTests.cs 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. using System;
  2. using System.IO;
  3. using Masuit.Tools.Media;
  4. using SixLabors.ImageSharp;
  5. using SixLabors.ImageSharp.PixelFormats;
  6. using Xunit;
  7. namespace Masuit.Tools.Abstractions.Test.Media;
  8. public class ImageBorderRemoverTests
  9. {
  10. private Image<Rgba32> CreateTestImage(int width, int height, Rgba32 borderColor, int borderSize = 5)
  11. {
  12. var image = new Image<Rgba32>(width, height);
  13. // 填充边框
  14. for (int y = 0; y < height; y++)
  15. for (int x = 0; x < width; x++)
  16. {
  17. if (x < borderSize || x >= width - borderSize || y < borderSize || y >= height - borderSize)
  18. image[x, y] = borderColor;
  19. else
  20. image[x, y] = new Rgba32(Random.Shared.Next(255), Random.Shared.Next(255), Random.Shared.Next(255));
  21. }
  22. return image;
  23. }
  24. [Fact]
  25. public void DetectBorders_ImageObject_ShouldDetectBorder()
  26. {
  27. var remover = new ImageBorderRemover(ToleranceMode.Channel);
  28. using var image = CreateTestImage(30, 30, new Rgba32(255, 0, 0), 3);
  29. var result = remover.DetectBorders(image, 10);
  30. Assert.True(result.HasAnyBorder);
  31. }
  32. [Fact]
  33. public void RemoveBorders_Stream_ShouldReturnCroppedStream()
  34. {
  35. var remover = new ImageBorderRemover(ToleranceMode.Channel);
  36. using var image = CreateTestImage(60, 60, new Rgba32(255, 0, 0), 6);
  37. using var ms = new MemoryStream();
  38. image.SaveAsPng(ms);
  39. ms.Position = 0;
  40. using var resultStream = remover.RemoveBorders(ms, 0);
  41. resultStream.Position = 0;
  42. using var cropped = Image.Load<Rgba32>(resultStream);
  43. Assert.True(48 >= cropped.Width);
  44. Assert.True(48 >= cropped.Height);
  45. }
  46. }