Added unit tests for WebP settings.

This commit is contained in:
Antti Kortetmaa 2020-12-10 21:07:37 +02:00
parent 66cfc23f1c
commit e330f22573
4 changed files with 72 additions and 5 deletions

View File

@ -7,7 +7,6 @@
objects = {
/* Begin PBXBuildFile section */
220A6239257EAFB300262720 /* SDWebImageWebPCoderDefine.m in Sources */ = {isa = PBXBuildFile; fileRef = 220A6237257EAFB300262720 /* SDWebImageWebPCoderDefine.m */; };
220A623A257EAFB300262720 /* SDWebImageWebPCoderDefine.m in Sources */ = {isa = PBXBuildFile; fileRef = 220A6237257EAFB300262720 /* SDWebImageWebPCoderDefine.m */; };
220A623B257EAFB300262720 /* SDWebImageWebPCoderDefine.m in Sources */ = {isa = PBXBuildFile; fileRef = 220A6237257EAFB300262720 /* SDWebImageWebPCoderDefine.m */; };
220A623C257EAFB300262720 /* SDWebImageWebPCoderDefine.m in Sources */ = {isa = PBXBuildFile; fileRef = 220A6237257EAFB300262720 /* SDWebImageWebPCoderDefine.m */; };
@ -15,6 +14,7 @@
220A623E257EAFB300262720 /* SDWebImageWebPCoderDefine.h in Headers */ = {isa = PBXBuildFile; fileRef = 220A6238257EAFB300262720 /* SDWebImageWebPCoderDefine.h */; };
220A623F257EAFB300262720 /* SDWebImageWebPCoderDefine.h in Headers */ = {isa = PBXBuildFile; fileRef = 220A6238257EAFB300262720 /* SDWebImageWebPCoderDefine.h */; };
220A6240257EAFB300262720 /* SDWebImageWebPCoderDefine.h in Headers */ = {isa = PBXBuildFile; fileRef = 220A6238257EAFB300262720 /* SDWebImageWebPCoderDefine.h */; };
228EA36125825A52005903D9 /* SDWebImageWebPCoderDefine.m in Sources */ = {isa = PBXBuildFile; fileRef = 220A6237257EAFB300262720 /* SDWebImageWebPCoderDefine.m */; };
806E77B32136A2E900A316D2 /* UIImage+WebP.m in Sources */ = {isa = PBXBuildFile; fileRef = 806E77AA2136A2E900A316D2 /* UIImage+WebP.m */; };
806E77B42136A2E900A316D2 /* SDImageWebPCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 806E77AB2136A2E900A316D2 /* SDImageWebPCoder.h */; settings = {ATTRIBUTES = (Public, ); }; };
806E77B62136A2E900A316D2 /* UIImage+WebP.h in Headers */ = {isa = PBXBuildFile; fileRef = 806E77AD2136A2E900A316D2 /* UIImage+WebP.h */; settings = {ATTRIBUTES = (Public, ); }; };
@ -432,7 +432,7 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
220A6239257EAFB300262720 /* SDWebImageWebPCoderDefine.m in Sources */,
228EA36125825A52005903D9 /* SDWebImageWebPCoderDefine.m in Sources */,
806E77B72136A2E900A316D2 /* SDImageWebPCoder.m in Sources */,
806E77B32136A2E900A316D2 /* UIImage+WebP.m in Sources */,
);

View File

@ -12,6 +12,20 @@
@import SDWebImage;
#endif
#if __has_include("webp/decode.h") && __has_include("webp/encode.h") && __has_include("webp/demux.h") && __has_include("webp/mux.h")
#import "webp/decode.h"
#import "webp/encode.h"
#import "webp/demux.h"
#import "webp/mux.h"
#elif __has_include(<libwebp/decode.h>) && __has_include(<libwebp/encode.h>) && __has_include(<libwebp/demux.h>) && __has_include(<libwebp/mux.h>)
#import <libwebp/decode.h>
#import <libwebp/encode.h>
#import <libwebp/demux.h>
#import <libwebp/mux.h>
#else
@import libwebp;
#endif
/**
Built in coder that supports WebP and animated WebP
*/
@ -19,4 +33,8 @@
@property (nonatomic, class, readonly, nonnull) SDImageWebPCoder *sharedCoder;
- (void) updateWebPOptionsToConfig:(WebPConfig * _Nonnull)config
maxFileSize:(NSUInteger)maxFileSize
options:(nullable SDImageCoderOptions *)options;
@end

View File

@ -841,9 +841,9 @@ static CGSize SDCalculateThumbnailSize(CGSize fullSize, BOOL preserveAspectRatio
return webpData;
}
- (void) updateWebPOptionsToConfig:(WebPConfig*)config
maxFileSize:(NSUInteger)maxFileSize
options:(nullable SDImageCoderOptions *)options {
- (void) updateWebPOptionsToConfig:(WebPConfig * _Nonnull)config
maxFileSize:(NSUInteger)maxFileSize
options:(nullable SDImageCoderOptions *)options {
config->target_size = (int)maxFileSize; // Max filesize for output, 0 means use quality instead
config->pass = maxFileSize > 0 ? 6 : 1; // Use 6 passes for file size limited encoding, which is the default value of `cwebp` command line

View File

@ -10,6 +10,7 @@
@import XCTest;
#import <SDWebImage/SDWebImage.h>
#import <SDWebImageWebPCoder/SDWebImageWebPCoder.h>
#import <SDWebImageWebPCoder/SDWebImageWebPCoderDefine.h>
#import <Expecta/Expecta.h>
#import <objc/runtime.h>
@ -196,6 +197,54 @@ const int64_t kAsyncTestTimeout = 5;
XCTAssertLessThanOrEqual(dataWithLimit.length, maxFileSize);
}
- (void)testEncodingSettings {
WebPConfig config;
WebPConfigPreset(&config, WEBP_PRESET_DEFAULT, 0.2);
SDImageCoderOptions *options = @{ SDImageCoderEncodeWebPMethod: @1,
SDImageCoderEncodeWebPPass: @2,
SDImageCoderEncodeWebPPreprocessing: @3,
SDImageCoderEncodeWebPThreadLevel: @4,
SDImageCoderEncodeWebPLowMemory: @5,
SDImageCoderEncodeWebPTargetPSNR: @6,
SDImageCoderEncodeWebPSegments: @7,
SDImageCoderEncodeWebPSnsStrength: @8,
SDImageCoderEncodeWebPFilterStrength: @9,
SDImageCoderEncodeWebPFilterSharpness: @10,
SDImageCoderEncodeWebPFilterType: @11,
SDImageCoderEncodeWebPAutofilter: @12,
SDImageCoderEncodeWebPAlphaCompression: @13,
SDImageCoderEncodeWebPAlphaFiltering: @14,
SDImageCoderEncodeWebPAlphaQuality: @15,
SDImageCoderEncodeWebPShowCompressed: @16,
SDImageCoderEncodeWebPPartitions: @17,
SDImageCoderEncodeWebPPartitionLimit: @18,
SDImageCoderEncodeWebPUseSharpYuv: @19 };
[SDImageWebPCoder.sharedCoder updateWebPOptionsToConfig:&config maxFileSize:1200 options:options];
expect(config.method).to.equal(1);
expect(config.pass).to.equal(2);
expect(config.preprocessing).to.equal(3);
expect(config.thread_level).to.equal(4);
expect(config.low_memory).to.equal(5);
expect(config.target_PSNR).to.equal(6);
expect(config.segments).to.equal(7);
expect(config.sns_strength).to.equal(8);
expect(config.filter_strength).to.equal(9);
expect(config.filter_sharpness).to.equal(10);
expect(config.filter_type).to.equal(11);
expect(config.autofilter).to.equal(12);
expect(config.alpha_compression).to.equal(13);
expect(config.alpha_filtering).to.equal(14);
expect(config.alpha_quality).to.equal(15);
expect(config.show_compressed).to.equal(16);
expect(config.partitions).to.equal(17);
expect(config.partition_limit).to.equal(18);
expect(config.use_sharp_yuv).to.equal(19);
}
@end
@implementation SDWebImageWebPCoderTests (Helpers)