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 ;
210using System . Text . Json . Serialization ;
3- using DotNetCampus . MediaConverters . Contexts ;
11+
12+ using TextVisionComparer ;
413
514namespace 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 {
0 commit comments