Skip to content

starFelix/iOS-WebP

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

40 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

#iOS-WebP

Most apps nowadays enhance user experience with the use of images, and one of the issues I've noticed with that is the amount of time it takes to load an image. (Not everyone has the luxury of a fast connection)

Google's WebP image format offers better compression compared to PNG or JPEG, allowing apps to send/retrieve images with smaller file sizes, reducing request times and hopefully provide a better user experience.

alt demo

#Getting Started

###The CocoaPods Way

pod 'iOS-WebP', '0.3'

###The Manual Way Include the 3 files inside the iOS-WebP folder into your project:

  • UIImage+WebP.h
  • UIImage+WebP.m
  • WebP.framework

#Usage Don't forget to #import "UIImage+WebP.h" or #import <UIImage+WebP.h> if you're using cocoapods. There are 3 methods in iOS-WebP, converting images to WebP format, converting images from WebP format, and setting an image's transparency.

+ (void)imageToWebP:(UIImage *)image quality:(CGFloat)quality alpha:(CGFloat)alpha preset:(WebPPreset)preset
    completionBlock:(void (^)(NSData *result))completionBlock
       failureBlock:(void (^)(NSError *error))failureBlock;

+ (void)imageFromWebP:(NSString *)filePath
      completionBlock:(void (^)(UIImage *result))completionBlock
         failureBlock:(void (^)(NSError *error))failureBlock;

- (UIImage *)imageByApplyingAlpha:(CGFloat)alpha;

Encoding and decoding of images are done in the background thread and results returned in the completion block on the main thread so as not to lock the main thread, allowing the UI to be updated as needed.

Converting To WebP

// quality value is [0, 100]
// alpha value is [0, 1]
[UIImage imageToWebP:[UIImage imageNamed:@"demo.jpg"] quality:quality alpha:alpha preset:WEBP_PRESET_DEFAULT completionBlock:^(NSData *result) {
  NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
  NSString *webPPath = [paths[0] stringByAppendingPathComponent:@"image.webp"];
  if (![result writeToFile:webPPath atomically:YES]) {
    NSLog(@"Failed to save file");
  }
} failureBlock:^(NSError *error) {
  NSLog(@"%@", error.localizedDescription);
}];

#####WebPPreset possible values

  • WEBP_PRESET_DEFAULT (default preset)
  • WEBP_PRESET_PICTURE (digital picture, like portrait, inner shot)
  • WEBP_PRESET_PHOTO (outdoor photograph, with natural lighting)
  • WEBP_PRESET_DRAWING (hand or line drawing, with high-contrast details)
  • WEBP_PRESET_ICON (small-sized colorful images)
  • WEBP_PRESET_TEXT (text-like)

Converting From WebP

[UIImage imageFromWebP:@"/path/to/file" completionBlock:^(UIImage *result) {
  UIImageView *myImageView = [[UIImageView alloc] initWithImage:result];
}failureBlock:^(NSError *error) {
  NSLog(@"%@", error.localizedDescription);
}];

Setting Image Transparency

//alpha value is [0, 1]
UIImage *transparencyImage = [[UIImage imageNamed:image.jpg] imageByApplyingAlpha:0.5];

Credit

About

Google's WebP image format decoder and encoder for iOS

Resources

License

Stars

Watchers

Forks

Packages

No packages published