Skip to content

Commit e330f22

Browse files
author
Antti Kortetmaa
committed
Added unit tests for WebP settings.
1 parent 66cfc23 commit e330f22

File tree

4 files changed

+72
-5
lines changed

4 files changed

+72
-5
lines changed

SDWebImageWebPCoder.xcodeproj/project.pbxproj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,14 @@
77
objects = {
88

99
/* Begin PBXBuildFile section */
10-
220A6239257EAFB300262720 /* SDWebImageWebPCoderDefine.m in Sources */ = {isa = PBXBuildFile; fileRef = 220A6237257EAFB300262720 /* SDWebImageWebPCoderDefine.m */; };
1110
220A623A257EAFB300262720 /* SDWebImageWebPCoderDefine.m in Sources */ = {isa = PBXBuildFile; fileRef = 220A6237257EAFB300262720 /* SDWebImageWebPCoderDefine.m */; };
1211
220A623B257EAFB300262720 /* SDWebImageWebPCoderDefine.m in Sources */ = {isa = PBXBuildFile; fileRef = 220A6237257EAFB300262720 /* SDWebImageWebPCoderDefine.m */; };
1312
220A623C257EAFB300262720 /* SDWebImageWebPCoderDefine.m in Sources */ = {isa = PBXBuildFile; fileRef = 220A6237257EAFB300262720 /* SDWebImageWebPCoderDefine.m */; };
1413
220A623D257EAFB300262720 /* SDWebImageWebPCoderDefine.h in Headers */ = {isa = PBXBuildFile; fileRef = 220A6238257EAFB300262720 /* SDWebImageWebPCoderDefine.h */; };
1514
220A623E257EAFB300262720 /* SDWebImageWebPCoderDefine.h in Headers */ = {isa = PBXBuildFile; fileRef = 220A6238257EAFB300262720 /* SDWebImageWebPCoderDefine.h */; };
1615
220A623F257EAFB300262720 /* SDWebImageWebPCoderDefine.h in Headers */ = {isa = PBXBuildFile; fileRef = 220A6238257EAFB300262720 /* SDWebImageWebPCoderDefine.h */; };
1716
220A6240257EAFB300262720 /* SDWebImageWebPCoderDefine.h in Headers */ = {isa = PBXBuildFile; fileRef = 220A6238257EAFB300262720 /* SDWebImageWebPCoderDefine.h */; };
17+
228EA36125825A52005903D9 /* SDWebImageWebPCoderDefine.m in Sources */ = {isa = PBXBuildFile; fileRef = 220A6237257EAFB300262720 /* SDWebImageWebPCoderDefine.m */; };
1818
806E77B32136A2E900A316D2 /* UIImage+WebP.m in Sources */ = {isa = PBXBuildFile; fileRef = 806E77AA2136A2E900A316D2 /* UIImage+WebP.m */; };
1919
806E77B42136A2E900A316D2 /* SDImageWebPCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 806E77AB2136A2E900A316D2 /* SDImageWebPCoder.h */; settings = {ATTRIBUTES = (Public, ); }; };
2020
806E77B62136A2E900A316D2 /* UIImage+WebP.h in Headers */ = {isa = PBXBuildFile; fileRef = 806E77AD2136A2E900A316D2 /* UIImage+WebP.h */; settings = {ATTRIBUTES = (Public, ); }; };
@@ -432,7 +432,7 @@
432432
isa = PBXSourcesBuildPhase;
433433
buildActionMask = 2147483647;
434434
files = (
435-
220A6239257EAFB300262720 /* SDWebImageWebPCoderDefine.m in Sources */,
435+
228EA36125825A52005903D9 /* SDWebImageWebPCoderDefine.m in Sources */,
436436
806E77B72136A2E900A316D2 /* SDImageWebPCoder.m in Sources */,
437437
806E77B32136A2E900A316D2 /* UIImage+WebP.m in Sources */,
438438
);

SDWebImageWebPCoder/Classes/SDImageWebPCoder.h

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,29 @@
1212
@import SDWebImage;
1313
#endif
1414

15+
#if __has_include("webp/decode.h") && __has_include("webp/encode.h") && __has_include("webp/demux.h") && __has_include("webp/mux.h")
16+
#import "webp/decode.h"
17+
#import "webp/encode.h"
18+
#import "webp/demux.h"
19+
#import "webp/mux.h"
20+
#elif __has_include(<libwebp/decode.h>) && __has_include(<libwebp/encode.h>) && __has_include(<libwebp/demux.h>) && __has_include(<libwebp/mux.h>)
21+
#import <libwebp/decode.h>
22+
#import <libwebp/encode.h>
23+
#import <libwebp/demux.h>
24+
#import <libwebp/mux.h>
25+
#else
26+
@import libwebp;
27+
#endif
28+
1529
/**
1630
Built in coder that supports WebP and animated WebP
1731
*/
1832
@interface SDImageWebPCoder : NSObject <SDProgressiveImageCoder, SDAnimatedImageCoder>
1933

2034
@property (nonatomic, class, readonly, nonnull) SDImageWebPCoder *sharedCoder;
2135

36+
- (void) updateWebPOptionsToConfig:(WebPConfig * _Nonnull)config
37+
maxFileSize:(NSUInteger)maxFileSize
38+
options:(nullable SDImageCoderOptions *)options;
39+
2240
@end

SDWebImageWebPCoder/Classes/SDImageWebPCoder.m

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -841,9 +841,9 @@ - (nullable NSData *)sd_encodedWebpDataWithImage:(nullable CGImageRef)imageRef
841841
return webpData;
842842
}
843843

844-
- (void) updateWebPOptionsToConfig:(WebPConfig*)config
845-
maxFileSize:(NSUInteger)maxFileSize
846-
options:(nullable SDImageCoderOptions *)options {
844+
- (void) updateWebPOptionsToConfig:(WebPConfig * _Nonnull)config
845+
maxFileSize:(NSUInteger)maxFileSize
846+
options:(nullable SDImageCoderOptions *)options {
847847

848848
config->target_size = (int)maxFileSize; // Max filesize for output, 0 means use quality instead
849849
config->pass = maxFileSize > 0 ? 6 : 1; // Use 6 passes for file size limited encoding, which is the default value of `cwebp` command line

Tests/SDWebImageWebPCoderTests.m

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
@import XCTest;
1111
#import <SDWebImage/SDWebImage.h>
1212
#import <SDWebImageWebPCoder/SDWebImageWebPCoder.h>
13+
#import <SDWebImageWebPCoder/SDWebImageWebPCoderDefine.h>
1314
#import <Expecta/Expecta.h>
1415
#import <objc/runtime.h>
1516

@@ -196,6 +197,54 @@ - (void)test45WebPEncodingMaxFileSize {
196197
XCTAssertLessThanOrEqual(dataWithLimit.length, maxFileSize);
197198
}
198199

200+
- (void)testEncodingSettings {
201+
WebPConfig config;
202+
WebPConfigPreset(&config, WEBP_PRESET_DEFAULT, 0.2);
203+
204+
SDImageCoderOptions *options = @{ SDImageCoderEncodeWebPMethod: @1,
205+
SDImageCoderEncodeWebPPass: @2,
206+
SDImageCoderEncodeWebPPreprocessing: @3,
207+
SDImageCoderEncodeWebPThreadLevel: @4,
208+
SDImageCoderEncodeWebPLowMemory: @5,
209+
SDImageCoderEncodeWebPTargetPSNR: @6,
210+
SDImageCoderEncodeWebPSegments: @7,
211+
SDImageCoderEncodeWebPSnsStrength: @8,
212+
SDImageCoderEncodeWebPFilterStrength: @9,
213+
SDImageCoderEncodeWebPFilterSharpness: @10,
214+
SDImageCoderEncodeWebPFilterType: @11,
215+
SDImageCoderEncodeWebPAutofilter: @12,
216+
SDImageCoderEncodeWebPAlphaCompression: @13,
217+
SDImageCoderEncodeWebPAlphaFiltering: @14,
218+
SDImageCoderEncodeWebPAlphaQuality: @15,
219+
SDImageCoderEncodeWebPShowCompressed: @16,
220+
SDImageCoderEncodeWebPPartitions: @17,
221+
SDImageCoderEncodeWebPPartitionLimit: @18,
222+
SDImageCoderEncodeWebPUseSharpYuv: @19 };
223+
224+
[SDImageWebPCoder.sharedCoder updateWebPOptionsToConfig:&config maxFileSize:1200 options:options];
225+
226+
expect(config.method).to.equal(1);
227+
expect(config.pass).to.equal(2);
228+
expect(config.preprocessing).to.equal(3);
229+
expect(config.thread_level).to.equal(4);
230+
expect(config.low_memory).to.equal(5);
231+
expect(config.target_PSNR).to.equal(6);
232+
expect(config.segments).to.equal(7);
233+
expect(config.sns_strength).to.equal(8);
234+
expect(config.filter_strength).to.equal(9);
235+
expect(config.filter_sharpness).to.equal(10);
236+
expect(config.filter_type).to.equal(11);
237+
expect(config.autofilter).to.equal(12);
238+
expect(config.alpha_compression).to.equal(13);
239+
expect(config.alpha_filtering).to.equal(14);
240+
expect(config.alpha_quality).to.equal(15);
241+
expect(config.show_compressed).to.equal(16);
242+
expect(config.partitions).to.equal(17);
243+
expect(config.partition_limit).to.equal(18);
244+
expect(config.use_sharp_yuv).to.equal(19);
245+
246+
}
247+
199248
@end
200249

201250
@implementation SDWebImageWebPCoderTests (Helpers)

0 commit comments

Comments
 (0)