Skip to content

Commit 7892f4c

Browse files
committed
Fix some CIFilter implementation
1 parent 3c89a09 commit 7892f4c

File tree

2 files changed

+8
-4
lines changed

2 files changed

+8
-4
lines changed

SDWebImage/Core/UIImage+Transform.m

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -659,7 +659,9 @@ - (nullable UIImage *)sd_tintedImageWithColor:(nonnull UIColor *)tintColor blend
659659
} else {
660660
clearColor = [[CIColor alloc] initWithColor:UIColor.clearColor];
661661
}
662-
ciImage = [CIImage imageWithColor:clearColor];
662+
colorImage = [CIImage imageWithColor:clearColor];
663+
colorImage = [colorImage imageByCroppingToRect:ciImage.extent];
664+
ciImage = colorImage;
663665
} else if (blendMode == kCGBlendModeCopy) {
664666
// R = S
665667
ciImage = colorImage;
@@ -675,12 +677,14 @@ - (nullable UIImage *)sd_tintedImageWithColor:(nonnull UIColor *)tintColor blend
675677
} else if (blendMode == kCGBlendModePlusDarker) {
676678
// R = MAX(0, (1 - D) + (1 - S))
677679
// (1 - D)
678-
CIFilter *filter1 = [CIFilter filterWithName:@"CIColorInvert"];
680+
CIFilter *filter1 = [CIFilter filterWithName:@"CIColorControls"];
679681
[filter1 setValue:ciImage forKey:kCIInputImageKey];
682+
[filter1 setValue:@(-0.5) forKey:kCIInputBrightnessKey];
680683
ciImage = filter1.outputImage;
681684
// (1 - S)
682-
CIFilter *filter2 = [CIFilter filterWithName:@"CIColorInvert"];
685+
CIFilter *filter2 = [CIFilter filterWithName:@"CIColorControls"];
683686
[filter2 setValue:colorImage forKey:kCIInputImageKey];
687+
[filter2 setValue:@(-0.5) forKey:kCIInputBrightnessKey];
684688
colorImage = filter2.outputImage;
685689
// +
686690
CIFilter *filter = [CIFilter filterWithName:@"CIAdditionCompositing"];

Tests/Tests/SDImageTransformerTests.m

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -243,7 +243,7 @@ - (void)test06UIImageTransformTintWithImage:(UIImage *)testImage {
243243
UIColor *topCenterColor = [tintedImage sd_colorAtPoint:CGPointMake(150, 20)];
244244
expect([topCenterColor.sd_hexString isEqualToString:[UIColor blackColor].sd_hexString]).beTruthy();
245245

246-
UIImage *tintedSourceInImage = [testImage sd_tintedImageWithColor:tintColor blendMode:kCGBlendModeSourceOut];
246+
UIImage *tintedSourceInImage = [testImage sd_tintedImageWithColor:tintColor blendMode:kCGBlendModeSourceIn];
247247
centerColor = [tintedSourceInImage sd_colorAtPoint:CGPointMake(150, 150)];
248248
expect([centerColor.sd_hexString isEqualToString:[UIColor blackColor].sd_hexString]).beTruthy();
249249
}

0 commit comments

Comments
 (0)