CILinearGradientを使用して、1 つのコーナーのみでケラレ効果を得ることができます。
- (CIImage*) processPhoto:(CIImage*)image {
CGFloat width = [image extent].size.width;
CGFloat height = [image extent].size.height;
CIFilter* gradient = [CIFilter filterWithName:CILinearGradient];
[gradient setValue:
[CIVector vectorWithX:width*0.75 Y:height*0.5]
forKey:@"inputPoint0"];
[gradient setValue:
[CIColor colorWithRed:0.5 green:0.5 blue:0.5 alpha:0]
forKey:@"inputColor0"];
[gradient setValue:
[CIVector vectorWithX:width*0.85 Y:0]
forKey:@"inputPoint1"];
[gradient setValue:
[CIColor colorWithRed:0 green:0 blue:0 alpha:0.7]
forKey:@"inputColor1"];
CIImage* croppedImage =
[gradient.outputImage imageByCroppingToRect:[image extent]];
CIFilter* composite = [CIFilter filterWithName:CIHardLightBlendMode];
[composite setValue:croppedImage forKey:kCIInputImageKey];
[composite setValue:image forKey:kCIInputBackgroundImageKey];
return composite.outputImage;
}
最適な結果を得るには、エンドポイントと勾配をもう少し微調整することをお勧めします。
または、四角い外観にしたい場合は、テキストと画像の間に UIView を貼り付けて、背景を黒、不透明度を ~0.4 にすることができます。
設計的には、その方が良いアプローチだと思いますが、コードはあまり面白くありません!