Skip to content

Commit 78d30ad

Browse files
committed
修复进行处理之后的图片没有保存
1 parent 78de8c6 commit 78d30ad

3 files changed

Lines changed: 124 additions & 4 deletions

File tree

src/MediaConverters/MediaConverters.Tests/Framework/TestFileProvider.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,11 @@ public static Image<Rgba32> GetDefaultTestImage()
1717

1818
public static string GetTestFilePath(string fileName)
1919
{
20+
if (File.Exists(fileName))
21+
{
22+
return Path.GetFullPath(fileName);
23+
}
24+
2025
return System.IO.Path.Join(AppContext.BaseDirectory, "Assets", "TestFiles", fileName);
2126
}
2227

src/MediaConverters/MediaConverters.Tests/Tool/MediaConverterTests.cs

Lines changed: 108 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,15 @@
1-
using System.Text.Json;
1+
using DotNetCampus.MediaConverters.Contexts;
2+
using DotNetCampus.MediaConverters.Imaging.Effects;
3+
using DotNetCampus.MediaConverters.Imaging.Effects.Colors;
4+
5+
using SixLabors.ImageSharp;
6+
using SixLabors.ImageSharp.Formats.Png;
7+
using SixLabors.ImageSharp.PixelFormats;
8+
9+
using System.Text.Json;
210
using System.Text.Json.Serialization;
3-
using DotNetCampus.MediaConverters.Contexts;
11+
12+
using TextVisionComparer;
413

514
namespace DotNetCampus.MediaConverters.Tests.Tool;
615

@@ -27,6 +36,103 @@ public async Task ReplaceColorTask1()
2736
TestHelper.OpenFileInExplorer(new FileInfo(options.OutputFile));
2837
}
2938

39+
[TestMethod]
40+
public async Task ReplaceColorTask2()
41+
{
42+
using Image<Rgba32> image = TestFileProvider.GetDefaultTestImage();
43+
var list = image.GetColorCountList();
44+
list = list.OrderByDescending(t => t.Count).ToList();
45+
46+
var replaceColorInfoList = new List<ReplaceColorInfo>();
47+
48+
for (var i = 0; i < list.Count && i < 10; i++)
49+
{
50+
var color = list[i].Color;
51+
replaceColorInfoList.Add(new ReplaceColorInfo($"#{color.A:X2}{color.R:X2}{color.G:X2}{color.B:X2}", "#00FFFFFF"));
52+
}
53+
54+
var imageConvertContext = new ImageConvertContext()
55+
{
56+
ImageConvertTaskList =
57+
[
58+
new ReplaceColorTask()
59+
{
60+
ReplaceColorInfoList = replaceColorInfoList
61+
},
62+
]
63+
};
64+
65+
var options = ToOptions(TestFileProvider.DefaultTestImageName, imageConvertContext);
66+
67+
var result = await Program.RunAsync(options);
68+
Assert.AreEqual(ErrorCode.Success, result);
69+
AssertReplaceColor(options);
70+
TestHelper.OpenFileInExplorer(new FileInfo(options.OutputFile));
71+
}
72+
73+
[TestMethod]
74+
public async Task ReplaceColorTask3()
75+
{
76+
var name = "file_example_TIFF_1MB.tiff";
77+
Image<Rgba32> image = await Image.LoadAsync<Rgba32>(TestFileProvider.GetTestFilePath(name));
78+
var list = image.GetColorCountList();
79+
list = list.OrderByDescending(t => t.Count).ToList();
80+
81+
var replaceColorInfoList = new List<ReplaceColorInfo>();
82+
83+
for (var i = 0; i < list.Count && i < 10; i++)
84+
{
85+
var color = list[i].Color;
86+
replaceColorInfoList.Add(new ReplaceColorInfo($"#{color.A:X2}{color.R:X2}{color.G:X2}{color.B:X2}", "#00FFFFFF"));
87+
}
88+
89+
var imageConvertContext = new ImageConvertContext()
90+
{
91+
ImageConvertTaskList =
92+
[
93+
new ReplaceColorTask()
94+
{
95+
ReplaceColorInfoList = replaceColorInfoList
96+
},
97+
]
98+
};
99+
100+
var options = ToOptions(name, imageConvertContext);
101+
102+
var result = await Program.RunAsync(options);
103+
Assert.AreEqual(ErrorCode.Success, result);
104+
AssertReplaceColor(options);
105+
TestHelper.OpenFileInExplorer(new FileInfo(options.OutputFile));
106+
}
107+
108+
private void AssertReplaceColor(Options options)
109+
{
110+
var inputFile = options.InputFile;
111+
using var image = Image.Load<Rgba32>(inputFile);
112+
113+
var list = image.GetColorCountList();
114+
list = list.OrderByDescending(t => t.Count).ToList();
115+
var replaceList = new List<(ColorMetadata SourceMetadata, ColorMetadata TargetMetadata)>();
116+
for (var i = 0; i < list.Count && i < 10; i++)
117+
{
118+
var color = list[i].Color;
119+
var targetMetadata = new ColorMetadata(new Rgba32(0xFF, 0xFF, 0xFF, 0x00));
120+
replaceList.Add((new ColorMetadata(color), targetMetadata));
121+
}
122+
123+
image.ReplaceColor(replaceList);
124+
125+
var tempFile = Path.Join(options.WorkingFolder, $"Assert_{Path.GetRandomFileName()}.png");
126+
image.SaveAsPng(tempFile, new PngEncoder()
127+
{
128+
ColorType = PngColorType.RgbWithAlpha
129+
});
130+
131+
var visionComparer = new VisionComparer();
132+
var visionCompareResult = visionComparer.Compare(new FileInfo(tempFile), new FileInfo(options.OutputFile));
133+
Assert.IsTrue(visionCompareResult.IsSimilar());
134+
}
135+
30136
[TestMethod]
31137
public async Task OptimizeImageFile1()
32138
{

src/MediaConverters/MediaConverters.Tool/Program.cs

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
using System.Diagnostics;
1111
using System.Text.Json;
12-
12+
using SixLabors.ImageSharp.Formats.Png;
1313
using SourceGenerationContext = DotNetCampus.MediaConverters.Contexts.SourceGenerationContext;
1414

1515
namespace DotNetCampus.MediaConverters;
@@ -75,9 +75,18 @@ internal static async Task<ErrorCode> RunAsync(Options options)
7575
{
7676
workerProvider.Run(image, imageConvertTask);
7777
}
78+
79+
await image.SaveAsPngAsync(options.OutputFile, new PngEncoder()
80+
{
81+
ColorType = PngColorType.RgbWithAlpha,
82+
BitDepth = PngBitDepth.Bit8,
83+
});
7884
}
7985

80-
optimizedImageFile.CopyTo(options.OutputFile, overwrite: true);
86+
else
87+
{
88+
optimizedImageFile.CopyTo(options.OutputFile, overwrite: true);
89+
}
8190

8291
return ErrorCode.Success;
8392
}

0 commit comments

Comments
 (0)