Skip to content

Commit 64cdf3e

Browse files
mgenwaredreampiggy
andauthored
Enable lossless mode (#85)
Enable lossless mode with `SDImageCoderEncodeWebPLossless` --------- Co-authored-by: DreamPiggy <[email protected]>
1 parent 3819cb7 commit 64cdf3e

File tree

4 files changed

+13
-2
lines changed

4 files changed

+13
-2
lines changed

SDWebImageWebPCoder/Classes/SDImageWebPCoder.m

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -955,7 +955,7 @@ - (void) updateWebPOptionsToConfig:(WebPConfig * _Nonnull)config
955955

956956
config->target_size = (int)maxFileSize; // Max filesize for output, 0 means use quality instead
957957
config->pass = maxFileSize > 0 ? 6 : 1; // Use 6 passes for file size limited encoding, which is the default value of `cwebp` command line
958-
config->lossless = 0; // Disable lossless encoding (If we need, can add new Encoding Options in future version)
958+
config->lossless = GetIntValueForKey(options, SDImageCoderEncodeWebPLossless, config->lossless);
959959

960960
config->method = GetIntValueForKey(options, SDImageCoderEncodeWebPMethod, config->method);
961961
config->pass = GetIntValueForKey(options, SDImageCoderEncodeWebPPass, config->pass);

SDWebImageWebPCoder/Classes/SDWebImageWebPCoderDefine.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,4 +132,12 @@ FOUNDATION_EXPORT SDImageCoderOption _Nonnull const SDImageCoderEncodeWebPPartit
132132
*/
133133
FOUNDATION_EXPORT SDImageCoderOption _Nonnull const SDImageCoderEncodeWebPUseSharpYuv;
134134

135+
/**
136+
0: Disabled, 1: Enabled.
137+
Lossless mode. Note that if lossless is enabled, encoder quality param specifies
138+
compression effort. 100 means maximum compression.
139+
Details on cwebp documentation: https://developers.google.com/speed/webp/docs/cwebp#lossless
140+
*/
141+
FOUNDATION_EXPORT SDImageCoderOption _Nonnull const SDImageCoderEncodeWebPLossless;
142+
135143
NS_ASSUME_NONNULL_END

SDWebImageWebPCoder/Classes/SDWebImageWebPCoderDefine.m

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,3 +26,4 @@
2626
SDImageCoderOption _Nonnull const SDImageCoderEncodeWebPPartitions = @"webPPartitions";
2727
SDImageCoderOption _Nonnull const SDImageCoderEncodeWebPPartitionLimit = @"webPPartitionLimit";
2828
SDImageCoderOption _Nonnull const SDImageCoderEncodeWebPUseSharpYuv = @"webPUseSharpYuv";
29+
SDImageCoderOption _Nonnull const SDImageCoderEncodeWebPLossless = @"webPLossless";

Tests/SDWebImageWebPCoderTests.m

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -252,7 +252,8 @@ - (void)testEncodingSettings {
252252
SDImageCoderEncodeWebPShowCompressed: @16,
253253
SDImageCoderEncodeWebPPartitions: @17,
254254
SDImageCoderEncodeWebPPartitionLimit: @18,
255-
SDImageCoderEncodeWebPUseSharpYuv: @19 };
255+
SDImageCoderEncodeWebPUseSharpYuv: @19,
256+
SDImageCoderEncodeWebPLossless: @1 };
256257

257258
[SDImageWebPCoder.sharedCoder updateWebPOptionsToConfig:&config maxFileSize:1200 options:options];
258259

@@ -275,6 +276,7 @@ - (void)testEncodingSettings {
275276
expect(config.partitions).to.equal(17);
276277
expect(config.partition_limit).to.equal(18);
277278
expect(config.use_sharp_yuv).to.equal(19);
279+
expect(config.lossless).to.equal(1);
278280
}
279281

280282
- (void)testEncodingSettingsDefaultValue {

0 commit comments

Comments
 (0)