Giter Site home page Giter Site logo

znanl / ios-webp Goto Github PK

View Code? Open in Web Editor NEW

This project forked from seanooi/ios-webp

0.0 1.0 0.0 2.63 MB

Google's WebP image format decoder and encoder for iOS

Home Page: http://seanooi.github.io/iOS-WebP/

License: MIT License

Objective-C 31.75% Ruby 0.71% C 67.54%

ios-webp's Introduction

#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.4'

###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)imageWithWebP:(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)
Config block

If you need to fine tune the performance of the encoding algorithm you can specify overrides to the preset in a config block.

// quality value is [0, 100]
// alpha value is [0, 1]
[UIImage imageToWebP:[UIImage imageNamed:@"demo.jpg"] quality:quality alpha:alpha 
 preset:WEBP_PRESET_DEFAULT 
 configBlock:^(WebPConfig *config) {
    config->sns_strength = 50.0f;
    config->filter_strength = 0.0f;
    config->method = 2;
    config->preprocessing = 0;
    config->filter_sharpness = 0;
    config->thread_level = 1;
 }
 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);
}];

All possible config values can be found in encode.h in the WebPConfig stuct.

Converting From WebP

[UIImage imageWithWebP:@"/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];

Credits

ios-webp's People

Contributors

autom8er avatar seanooi avatar weibel avatar makimoto avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.