Skip to content

Instantly share code, notes, and snippets.

@fjolnir
Last active December 30, 2015 06:49
Show Gist options
  • Save fjolnir/7791888 to your computer and use it in GitHub Desktop.
Save fjolnir/7791888 to your computer and use it in GitHub Desktop.
http://d.asgeirsson.is/Vvpo <-inputs (PNG: 1.5m JPEG+Mask: ~100k)
+ (NSString *)_pathForImageName:(NSString *)aFileName
{
NSString * const extension = [aFileName pathExtension];
if([extension length] == 0)
return
[self _pathForImageName:[aFileName stringByAppendingString:@".png"]]
?: [self _pathForImageName:[aFileName stringByAppendingString:@".jpeg"]]
?: [self _pathForImageName:[aFileName stringByAppendingString:@".jpg"]];
else {
aFileName = [aFileName stringByDeletingPathExtension];
if([[UIScreen mainScreen] scale] == 2.0f)
return [[NSBundle coineyKitBundle] pathForResource:[aFileName stringByAppendingString:@"@2x"]
ofType:extension]
?: [[NSBundle coineyKitBundle] pathForResource:aFileName ofType:extension];
else
return [[NSBundle coineyKitBundle] pathForResource:aFileName ofType:extension]
?: [[NSBundle coineyKitBundle] pathForResource:[aFileName stringByAppendingString:@"@2x"]
ofType:extension];
}
}
+ (UIImage *)cy_imageNamed:(NSString * const)aName
{
NSString * const path = [self _pathForImageName:aName];
if(path) {
UIImage * const image = [self imageWithContentsOfFile:path];
NSString * const maskPath = [self _pathForImageName:[[aName stringByDeletingPathExtension] stringByAppendingString:@"Mask"]];
if(maskPath)
return [image cy_imageByApplyingMask:[self cy_imageWithContentsOfFile:maskPath]];
else
return image;
} else
return [self imageNamed:aName];
}
- (UIImage *)cy_imageByApplyingMask:(UIImage * const)aMaskImage
{
if(!aMaskImage)
return nil;
CGImageRef const mask = CGImageMaskCreate(CGImageGetWidth(aMaskImage.CGImage), CGImageGetHeight(aMaskImage.CGImage),
CGImageGetBitsPerComponent(aMaskImage.CGImage),
CGImageGetBitsPerPixel(aMaskImage.CGImage),
CGImageGetBytesPerRow(aMaskImage.CGImage),
CGImageGetDataProvider(aMaskImage.CGImage),
NULL, FALSE);
CGImageRef const maskedCGImage = CGImageCreateWithMask(self.CGImage, mask);
UIImage * const maskedImage = [UIImage imageWithCGImage:maskedCGImage
scale:self.scale
orientation:self.imageOrientation];
CGImageRelease(maskedCGImage);
CGImageRelease(mask);
return maskedImage;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment