New file |
| | |
| | | // |
| | | // UIImage+YYAdd.h |
| | | // YYCategories <https://github.com/ibireme/YYCategories> |
| | | // |
| | | // Created by ibireme on 13/4/4. |
| | | // Copyright (c) 2015 ibireme. |
| | | // |
| | | // This source code is licensed under the MIT-style license found in the |
| | | // LICENSE file in the root directory of this source tree. |
| | | // |
| | | |
| | | #import <UIKit/UIKit.h> |
| | | |
| | | NS_ASSUME_NONNULL_BEGIN |
| | | |
| | | /** |
| | | Provide some commen method for `UIImage`. |
| | | Image process is based on CoreGraphic and vImage. |
| | | */ |
| | | @interface UIImage (YYAdd) |
| | | |
| | | #pragma mark - Create image |
| | | ///============================================================================= |
| | | /// @name Create image |
| | | ///============================================================================= |
| | | |
| | | /** |
| | | Create an animated image with GIF data. After created, you can access |
| | | the images via property '.images'. If the data is not animated gif, this |
| | | function is same as [UIImage imageWithData:data scale:scale]; |
| | | |
| | | @discussion It has a better display performance, but costs more memory |
| | | (width * height * frames Bytes). It only suited to display small |
| | | gif such as animated emoji. If you want to display large gif, |
| | | see `YYImage`. |
| | | |
| | | @param data GIF data. |
| | | |
| | | @param scale The scale factor |
| | | |
| | | @return A new image created from GIF, or nil when an error occurs. |
| | | */ |
| | | + (nullable UIImage *)imageWithSmallGIFData:(NSData *)data scale:(CGFloat)scale; |
| | | |
| | | /** |
| | | Whether the data is animated GIF. |
| | | |
| | | @param data Image data |
| | | |
| | | @return Returns YES only if the data is gif and contains more than one frame, |
| | | otherwise returns NO. |
| | | */ |
| | | + (BOOL)isAnimatedGIFData:(NSData *)data; |
| | | |
| | | /** |
| | | Whether the file in the specified path is GIF. |
| | | |
| | | @param path An absolute file path. |
| | | |
| | | @return Returns YES if the file is gif, otherwise returns NO. |
| | | */ |
| | | + (BOOL)isAnimatedGIFFile:(NSString *)path; |
| | | |
| | | /** |
| | | Create an image from a PDF file data or path. |
| | | |
| | | @discussion If the PDF has multiple page, is just return's the first page's |
| | | content. Image's scale is equal to current screen's scale, size is same as |
| | | PDF's origin size. |
| | | |
| | | @param dataOrPath PDF data in `NSData`, or PDF file path in `NSString`. |
| | | |
| | | @return A new image create from PDF, or nil when an error occurs. |
| | | */ |
| | | + (nullable UIImage *)imageWithPDF:(id)dataOrPath; |
| | | |
| | | /** |
| | | Create an image from a PDF file data or path. |
| | | |
| | | @discussion If the PDF has multiple page, is just return's the first page's |
| | | content. Image's scale is equal to current screen's scale. |
| | | |
| | | @param dataOrPath PDF data in `NSData`, or PDF file path in `NSString`. |
| | | |
| | | @param size The new image's size, PDF's content will be stretched as needed. |
| | | |
| | | @return A new image create from PDF, or nil when an error occurs. |
| | | */ |
| | | + (nullable UIImage *)imageWithPDF:(id)dataOrPath size:(CGSize)size; |
| | | |
| | | /** |
| | | Create a square image from apple emoji. |
| | | |
| | | @discussion It creates a square image from apple emoji, image's scale is equal |
| | | to current screen's scale. The original emoji image in `AppleColorEmoji` font |
| | | is in size 160*160 px. |
| | | |
| | | @param emoji single emoji, such as @"😄". |
| | | |
| | | @param size image's size. |
| | | |
| | | @return Image from emoji, or nil when an error occurs. |
| | | */ |
| | | + (nullable UIImage *)imageWithEmoji:(NSString *)emoji size:(CGFloat)size; |
| | | |
| | | /** |
| | | Create and return a 1x1 point size image with the given color. |
| | | |
| | | @param color The color. |
| | | */ |
| | | + (nullable UIImage *)imageWithColor:(UIColor *)color; |
| | | |
| | | /** |
| | | Create and return a pure color image with the given color and size. |
| | | |
| | | @param color The color. |
| | | @param size New image's type. |
| | | */ |
| | | + (nullable UIImage *)imageWithColor:(UIColor *)color size:(CGSize)size; |
| | | |
| | | /** |
| | | Create and return an image with custom draw code. |
| | | |
| | | @param size The image size. |
| | | @param drawBlock The draw block. |
| | | |
| | | @return The new image. |
| | | */ |
| | | + (nullable UIImage *)imageWithSize:(CGSize)size drawBlock:(void (^)(CGContextRef context))drawBlock; |
| | | |
| | | #pragma mark - Image Info |
| | | ///============================================================================= |
| | | /// @name Image Info |
| | | ///============================================================================= |
| | | |
| | | /** |
| | | Whether this image has alpha channel. |
| | | */ |
| | | - (BOOL)hasAlphaChannel; |
| | | |
| | | |
| | | #pragma mark - Modify Image |
| | | ///============================================================================= |
| | | /// @name Modify Image |
| | | ///============================================================================= |
| | | |
| | | /** |
| | | Draws the entire image in the specified rectangle, content changed with |
| | | the contentMode. |
| | | |
| | | @discussion This method draws the entire image in the current graphics context, |
| | | respecting the image's orientation setting. In the default coordinate system, |
| | | images are situated down and to the right of the origin of the specified |
| | | rectangle. This method respects any transforms applied to the current graphics |
| | | context, however. |
| | | |
| | | @param rect The rectangle in which to draw the image. |
| | | |
| | | @param contentMode Draw content mode |
| | | |
| | | @param clips A Boolean value that determines whether content are confined to the rect. |
| | | */ |
| | | - (void)drawInRect:(CGRect)rect withContentMode:(UIViewContentMode)contentMode clipsToBounds:(BOOL)clips; |
| | | |
| | | /** |
| | | Returns a new image which is scaled from this image. |
| | | The image will be stretched as needed. |
| | | |
| | | @param size The new size to be scaled, values should be positive. |
| | | |
| | | @return The new image with the given size. |
| | | */ |
| | | - (nullable UIImage *)imageByResizeToSize:(CGSize)size; |
| | | |
| | | /** |
| | | Returns a new image which is scaled from this image. |
| | | The image content will be changed with thencontentMode. |
| | | |
| | | @param size The new size to be scaled, values should be positive. |
| | | |
| | | @param contentMode The content mode for image content. |
| | | |
| | | @return The new image with the given size. |
| | | */ |
| | | - (nullable UIImage *)imageByResizeToSize:(CGSize)size contentMode:(UIViewContentMode)contentMode; |
| | | |
| | | /** |
| | | Returns a new image which is cropped from this image. |
| | | |
| | | @param rect Image's inner rect. |
| | | |
| | | @return The new image, or nil if an error occurs. |
| | | */ |
| | | - (nullable UIImage *)imageByCropToRect:(CGRect)rect; |
| | | |
| | | /** |
| | | Returns a new image which is edge inset from this image. |
| | | |
| | | @param insets Inset (positive) for each of the edges, values can be negative to 'outset'. |
| | | |
| | | @param color Extend edge's fill color, nil means clear color. |
| | | |
| | | @return The new image, or nil if an error occurs. |
| | | */ |
| | | - (nullable UIImage *)imageByInsetEdge:(UIEdgeInsets)insets withColor:(nullable UIColor *)color; |
| | | |
| | | /** |
| | | Rounds a new image with a given corner size. |
| | | |
| | | @param radius The radius of each corner oval. Values larger than half the |
| | | rectangle's width or height are clamped appropriately to half |
| | | the width or height. |
| | | */ |
| | | - (nullable UIImage *)imageByRoundCornerRadius:(CGFloat)radius; |
| | | |
| | | /** |
| | | Rounds a new image with a given corner size. |
| | | |
| | | @param radius The radius of each corner oval. Values larger than half the |
| | | rectangle's width or height are clamped appropriately to |
| | | half the width or height. |
| | | |
| | | @param borderWidth The inset border line width. Values larger than half the rectangle's |
| | | width or height are clamped appropriately to half the width |
| | | or height. |
| | | |
| | | @param borderColor The border stroke color. nil means clear color. |
| | | */ |
| | | - (nullable UIImage *)imageByRoundCornerRadius:(CGFloat)radius |
| | | borderWidth:(CGFloat)borderWidth |
| | | borderColor:(nullable UIColor *)borderColor; |
| | | |
| | | /** |
| | | Rounds a new image with a given corner size. |
| | | |
| | | @param radius The radius of each corner oval. Values larger than half the |
| | | rectangle's width or height are clamped appropriately to |
| | | half the width or height. |
| | | |
| | | @param corners A bitmask value that identifies the corners that you want |
| | | rounded. You can use this parameter to round only a subset |
| | | of the corners of the rectangle. |
| | | |
| | | @param borderWidth The inset border line width. Values larger than half the rectangle's |
| | | width or height are clamped appropriately to half the width |
| | | or height. |
| | | |
| | | @param borderColor The border stroke color. nil means clear color. |
| | | |
| | | @param borderLineJoin The border line join. |
| | | */ |
| | | - (nullable UIImage *)imageByRoundCornerRadius:(CGFloat)radius |
| | | corners:(UIRectCorner)corners |
| | | borderWidth:(CGFloat)borderWidth |
| | | borderColor:(nullable UIColor *)borderColor |
| | | borderLineJoin:(CGLineJoin)borderLineJoin; |
| | | |
| | | /** |
| | | Returns a new rotated image (relative to the center). |
| | | |
| | | @param radians Rotated radians in counterclockwise.⟲ |
| | | |
| | | @param fitSize YES: new image's size is extend to fit all content. |
| | | NO: image's size will not change, content may be clipped. |
| | | */ |
| | | - (nullable UIImage *)imageByRotate:(CGFloat)radians fitSize:(BOOL)fitSize; |
| | | |
| | | /** |
| | | Returns a new image rotated counterclockwise by a quarter‑turn (90°). ⤺ |
| | | The width and height will be exchanged. |
| | | */ |
| | | - (nullable UIImage *)imageByRotateLeft90; |
| | | |
| | | /** |
| | | Returns a new image rotated clockwise by a quarter‑turn (90°). ⤼ |
| | | The width and height will be exchanged. |
| | | */ |
| | | - (nullable UIImage *)imageByRotateRight90; |
| | | |
| | | /** |
| | | Returns a new image rotated 180° . ↻ |
| | | */ |
| | | - (nullable UIImage *)imageByRotate180; |
| | | |
| | | /** |
| | | Returns a vertically flipped image. ⥯ |
| | | */ |
| | | - (nullable UIImage *)imageByFlipVertical; |
| | | |
| | | /** |
| | | Returns a horizontally flipped image. ⇋ |
| | | */ |
| | | - (nullable UIImage *)imageByFlipHorizontal; |
| | | |
| | | |
| | | #pragma mark - Image Effect |
| | | ///============================================================================= |
| | | /// @name Image Effect |
| | | ///============================================================================= |
| | | |
| | | /** |
| | | Tint the image in alpha channel with the given color. |
| | | |
| | | @param color The color. |
| | | */ |
| | | - (nullable UIImage *)imageByTintColor:(UIColor *)color; |
| | | |
| | | /** |
| | | Returns a grayscaled image. |
| | | */ |
| | | - (nullable UIImage *)imageByGrayscale; |
| | | |
| | | /** |
| | | Applies a blur effect to this image. Suitable for blur any content. |
| | | */ |
| | | - (nullable UIImage *)imageByBlurSoft; |
| | | |
| | | /** |
| | | Applies a blur effect to this image. Suitable for blur any content except pure white. |
| | | (same as iOS Control Panel) |
| | | */ |
| | | - (nullable UIImage *)imageByBlurLight; |
| | | |
| | | /** |
| | | Applies a blur effect to this image. Suitable for displaying black text. |
| | | (same as iOS Navigation Bar White) |
| | | */ |
| | | - (nullable UIImage *)imageByBlurExtraLight; |
| | | |
| | | /** |
| | | Applies a blur effect to this image. Suitable for displaying white text. |
| | | (same as iOS Notification Center) |
| | | */ |
| | | - (nullable UIImage *)imageByBlurDark; |
| | | |
| | | /** |
| | | Applies a blur and tint color to this image. |
| | | |
| | | @param tintColor The tint color. |
| | | */ |
| | | - (nullable UIImage *)imageByBlurWithTint:(UIColor *)tintColor; |
| | | |
| | | /** |
| | | Applies a blur, tint color, and saturation adjustment to this image, |
| | | optionally within the area specified by @a maskImage. |
| | | |
| | | @param blurRadius The radius of the blur in points, 0 means no blur effect. |
| | | |
| | | @param tintColor An optional UIColor object that is uniformly blended with |
| | | the result of the blur and saturation operations. The |
| | | alpha channel of this color determines how strong the |
| | | tint is. nil means no tint. |
| | | |
| | | @param tintBlendMode The @a tintColor blend mode. Default is kCGBlendModeNormal (0). |
| | | |
| | | @param saturation A value of 1.0 produces no change in the resulting image. |
| | | Values less than 1.0 will desaturation the resulting image |
| | | while values greater than 1.0 will have the opposite effect. |
| | | 0 means gray scale. |
| | | |
| | | @param maskImage If specified, @a inputImage is only modified in the area(s) |
| | | defined by this mask. This must be an image mask or it |
| | | must meet the requirements of the mask parameter of |
| | | CGContextClipToMask. |
| | | |
| | | @return image with effect, or nil if an error occurs (e.g. no |
| | | enough memory). |
| | | */ |
| | | - (nullable UIImage *)imageByBlurRadius:(CGFloat)blurRadius |
| | | tintColor:(nullable UIColor *)tintColor |
| | | tintMode:(CGBlendMode)tintBlendMode |
| | | saturation:(CGFloat)saturation |
| | | maskImage:(nullable UIImage *)maskImage; |
| | | |
| | | @end |
| | | |
| | | NS_ASSUME_NONNULL_END |