UIImage(QMUI)

@interface UIImage (QMUI)

/**
 用于绘制一张图并以 UIImage 的形式返回

 @param size 要绘制的图片的 size,宽或高均不能为 0
 @param opaque 图片是否不透明,YES 表示不透明,NO 表示半透明
 @param scale 图片的倍数,0 表示取当前屏幕的倍数
 @param actionBlock 实际的图片绘制操作,在这里只管绘制就行,不用手动生成 image
 @return 返回绘制完的图片
 */
+ (nullable UIImage *)qmui_imageWithSize:(CGSize)size opaque:(BOOL)opaque scale:(CGFloat)scale actions:(void (^)(CGContextRef contextRef))actionBlock;

/// 当前图片是否是可拉伸/平铺的,也即通过 resizableImageWithCapInsets: 处理过的图片
@property(nonatomic, assign, readonly) BOOL qmui_resizable;

/// 获取当前图片的像素大小,如果是多倍图,会被放大到一倍来算
@property(nonatomic, assign, readonly) CGSize qmui_sizeInPixel;

/**
 *  判断一张图是否不存在 alpha 通道,注意 “不存在 alpha 通道” 不等价于 “不透明”。一张不透明的图有可能是存在 alpha 通道但 alpha 值为 1。
 */
- (BOOL)qmui_opaque;

/**
 *  获取当前图片的均色,原理是将图片绘制到1px*1px的矩形内,再从当前区域取色,得到图片的均色。
 *  @link http://www.bobbygeorgescu.com/2011/08/finding-average-color-of-uiimage/ @/link
 *
 *  @return 代表图片平均颜色的UIColor对象
 */
- (UIColor *)qmui_averageColor;

/**
 *  置灰当前图片
 *
 *  @return 已经置灰的图片
 */
- (nullable UIImage *)qmui_grayImage;

/**
 *  设置一张图片的透明度
 *
 *  @param alpha 要用于渲染透明度
 *
 *  @return 设置了透明度之后的图片
 */
- (nullable UIImage *)qmui_imageWithAlpha:(CGFloat)alpha;

/**
 *  保持当前图片的形状不变,使用指定的颜色去重新渲染它,生成一张新图片并返回
 *
 *  @param tintColor 要用于渲染的新颜色
 *
 *  @return 与当前图片形状一致但颜色与参数tintColor相同的新图片
 */
- (nullable UIImage *)qmui_imageWithTintColor:(nullable UIColor *)tintColor;

/**
 *  以 CIColorBlendMode 的模式为当前图片叠加一个颜色,生成一张新图片并返回,在叠加过程中会保留图片内的纹理。
 *
 *  @param blendColor 要叠加的颜色
 *
 *  @return 基于当前图片纹理保持不变的情况下颜色变为指定的叠加颜色的新图片
 *
 *  @warning 这个方法可能比较慢,会卡住主线程,建议异步使用
 */
- (nullable UIImage *)qmui_imageWithBlendColor:(nullable UIColor *)blendColor;

/**
 *  在当前图片的基础上叠加一张图片,并指定绘制叠加图片的起始位置
 *
 *  叠加上去的图片将保持原图片的大小不变,不被压缩、拉伸
 *
 *  @param image 要叠加的图片
 *  @param point 所叠加图片的绘制的起始位置
 *
 *  @return 返回一张与原图大小一致的图片,所叠加的图片若超出原图大小,则超出部分被截掉
 */
- (nullable UIImage *)qmui_imageWithImageAbove:(UIImage *)image atPoint:(CGPoint)point;

/**
 *  在当前图片的上下左右增加一些空白(不支持负值),通常用于调节NSAttributedString里的图片与文字的间距
 *  @param extension 要拓展的大小
 *  @return 拓展后的图片
 */
- (nullable UIImage *)qmui_imageWithSpacingExtensionInsets:(UIEdgeInsets)extension;

/**
 *  切割出在指定位置中的图片
 *
 *  @param rect 要切割的rect
 *
 *  @return 切割后的新图片
 */
- (nullable UIImage *)qmui_imageWithClippedRect:(CGRect)rect;


/**
 *  切割出在指定圆角的图片
 *
 *  @param cornerRadius 要切割的圆角值
 *
 *  @return 切割后的新图片
 */
- (nullable UIImage *)qmui_imageWithClippedCornerRadius:(CGFloat)cornerRadius;

/**
 *  同上,可以设置 scale
 */

- (nullable UIImage *)qmui_imageWithClippedCornerRadius:(CGFloat)cornerRadius scale:(CGFloat)scale;

/**
 *  将原图以 QMUIImageResizingModeScaleAspectFit 的策略缩放,使其缩放后的大小不超过指定的大小,并返回缩放后的图片。缩放后的图片的倍数保持与原图一致。
 *  @param size 在这个约束的 size 内进行缩放后的大小,处理后返回的图片的 size 会根据 resizingMode 不同而不同,但必定不会超过 size。
 *
 *  @return 处理完的图片
 *  @see qmui_imageResizedInLimitedSize:resizingMode:scale:
 */
- (nullable UIImage *)qmui_imageResizedInLimitedSize:(CGSize)size;

/**
 *  将原图按指定的 QMUIImageResizingMode 缩放,使其缩放后的大小不超过指定的大小,并返回缩放后的图片,缩放后的图片的倍数保持与原图一致。
 *  @param size 在这个约束的 size 内进行缩放后的大小,处理后返回的图片的 size 会根据 resizingMode 不同而不同,但必定不会超过 size。
 *  @param resizingMode 希望使用的缩放模式
 *
 *  @return 处理完的图片
 *  @see qmui_imageResizedInLimitedSize:resizingMode:scale:
 */
- (nullable UIImage *)qmui_imageResizedInLimitedSize:(CGSize)size resizingMode:(QMUIImageResizingMode)resizingMode;

/**
 *  将原图按指定的 QMUIImageResizingMode 缩放,使其缩放后的大小不超过指定的大小,并返回缩放后的图片。
 *  @param size 在这个约束的 size 内进行缩放后的大小,处理后返回的图片的 size 会根据 resizingMode 不同而不同,但必定不会超过 size。
 *  @param resizingMode 希望使用的缩放模式
 *  @param scale 用于指定缩放后的图片的倍数
 *
 *  @return 处理完的图片
 */
- (nullable UIImage *)qmui_imageResizedInLimitedSize:(CGSize)size resizingMode:(QMUIImageResizingMode)resizingMode scale:(CGFloat)scale;

/**
 *  将原图进行旋转,只能选择上下左右四个方向
 *
 *  @param  direction 旋转的方向
 *
 *  @return 处理完的图片
 */
- (nullable UIImage *)qmui_imageWithOrientation:(UIImageOrientation)direction;

/**
 *  为图片加上一个border,border的路径为path
 *
 *  @param borderColor  border的颜色
 *  @param path         border的路径
 *
 *  @return 带border的UIImage
 *  @warning 注意通过`path.lineWidth`设置边框大小,同时注意路径要考虑像素对齐(`path.lineWidth / 2.0`)
 */
- (nullable UIImage *)qmui_imageWithBorderColor:(nullable UIColor *)borderColor path:(nullable UIBezierPath *)path;

/**
 *  为图片加上一个border,border的路径为borderColor、cornerRadius和borderWidth所创建的path
 *
 *  @param borderColor   border的颜色
 *  @param borderWidth    border的宽度
 *  @param cornerRadius  border的圆角
 *
 *  @param dashedLengths 一个CGFloat的数组,例如`CGFloat dashedLengths[] = {2, 4}`。如果不需要虚线,则传0即可
 *
 *  @return 带border的UIImage
 */
- (nullable UIImage *)qmui_imageWithBorderColor:(nullable UIColor *)borderColor borderWidth:(CGFloat)borderWidth cornerRadius:(CGFloat)cornerRadius dashedLengths:(nullable const CGFloat *)dashedLengths;
- (nullable UIImage *)qmui_imageWithBorderColor:(nullable UIColor *)borderColor borderWidth:(CGFloat)borderWidth cornerRadius:(CGFloat)cornerRadius;


/**
 *  为图片加上一个border(可以是任意一条边,也可以是多条组合;只能创建矩形的border,不能添加圆角)
 *
 *  @param borderColor       border的颜色
 *  @param borderWidth        border的宽度
 *  @param borderPosition    border的位置
 *
 *  @return 带border的UIImage
 */
- (nullable UIImage *)qmui_imageWithBorderColor:(nullable UIColor *)borderColor borderWidth:(CGFloat)borderWidth borderPosition:(QMUIImageBorderPosition)borderPosition;

/**
 *  返回一个被mask的图片
 *
 *  @param maskImage             mask图片
 *  @param usingMaskImageMode    是否使用“mask image”的方式,若为 YES,则黑色部分显示,白色部分消失,透明部分显示,其他颜色会按照颜色的灰色度对图片做透明处理。若为 NO,则 maskImage 要求必须为灰度颜色空间的图片(黑白图),白色部分显示,黑色部分消失,透明部分消失,其他灰色度对图片做透明处理。
 *
 *  @return 被mask的图片
 */
- (nullable UIImage *)qmui_imageWithMaskImage:(UIImage *)maskImage usingMaskImageMode:(BOOL)usingMaskImageMode;

/**
 将 data 转换成 animated UIImage(如果非 animated 则转换成普通 UIImage),image 倍数为 1(与系统的 [UIImage imageWithData:] 接口一致)

 @param data 图片文件的 data
 @return 转换成的 UIImage
 */
+ (nullable UIImage *)qmui_animatedImageWithData:(NSData *)data;

/**
 将 data 转换成 animated UIImage(如果非 animated 则转换成普通 UIImage)

 @param data 图片文件的 data
 @param scale 图片的倍数,0 表示获取当前设备的屏幕倍数
 @return 转换成的 UIImage
 @see http://www.jianshu.com/p/767af9c690a3
 @see https://github.com/rs/SDWebImage
 */
+ (nullable UIImage *)qmui_animatedImageWithData:(NSData *)data scale:(CGFloat)scale;

/**
 在 mainBundle 里找到对应名字的图片, 注意图片 scale 为 1,与系统的 [UIImage imageWithData:] 接口一致,若需要修改倍数,请使用 -qmui_animatedImageNamed:scale:

 @param name 图片名,可指定后缀,若不写后缀,默认为“gif”。不写后缀的情况下会先找“gif”后缀的图片,不存在再找无后缀的文件,仍不存在则返回 nil
 @return  转换成的 UIImage
 */
+ (nullable UIImage *)qmui_animatedImageNamed:(NSString *)name;

/**
 在 mainBundle 里找到对应名字的图片
 
 @param name 图片名,可指定后缀,若不写后缀,默认为“gif”。不写后缀的情况下会先找“gif”后缀的图片,不存在再找无后缀的文件,仍不存在则返回 nil
 @param scale 图片的倍数,0 表示获取当前设备的屏幕倍数
 @return  转换成的 UIImage
 */
+ (nullable UIImage *)qmui_animatedImageNamed:(NSString *)name scale:(CGFloat)scale;

/**
 *  创建一个size为(4, 4)的纯色的UIImage
 *
 *  @param color 图片的颜色
 *
 *  @return 纯色的UIImage
 */
+ (nullable UIImage *)qmui_imageWithColor:(nullable UIColor *)color;

/**
 *  创建一个纯色的UIImage
 *
 *  @param  color           图片的颜色
 *  @param  size            图片的大小
 *  @param  cornerRadius    图片的圆角
 *
 * @return 纯色的UIImage
 */
+ (nullable UIImage *)qmui_imageWithColor:(nullable UIColor *)color size:(CGSize)size cornerRadius:(CGFloat)cornerRadius;

/**
 *  创建一个纯色的UIImage,支持为四个角设置不同的圆角
 *  @param  color               图片的颜色
 *  @param  size                图片的大小
 *  @param  cornerRadius   四个角的圆角值的数组,长度必须为4,顺序分别为[左上角、左下角、右下角、右上角]
 */
+ (nullable UIImage *)qmui_imageWithColor:(nullable UIColor *)color size:(CGSize)size cornerRadiusArray:(nullable NSArray<NSNumber *> *)cornerRadius;

/**
 *  创建一个带边框路径,没有背景色的路径图片,border的路径为path
 *
 *  @param strokeColor  border的颜色
 *  @param path         border的路径
 *  @param addClip      是否要调path的addClip
 *
 *  @return 带border的UIImage
 */
+ (nullable UIImage *)qmui_imageWithStrokeColor:(nullable UIColor *)strokeColor size:(CGSize)size path:(nullable UIBezierPath *)path addClip:(BOOL)addClip;

/**
 *  创建一个带边框路径,没有背景色的路径图片,border的路径为strokeColor、cornerRadius和lineWidth所创建的path
 *
 *  @param strokeColor  border的颜色
 *  @param lineWidth    border的宽度
 *  @param cornerRadius border的圆角
 *
 *  @return 带border的UIImage
 */
+ (nullable UIImage *)qmui_imageWithStrokeColor:(nullable UIColor *)strokeColor size:(CGSize)size lineWidth:(CGFloat)lineWidth cornerRadius:(CGFloat)cornerRadius;

/**
 *  创建一个带边框路径,没有背景色的路径图片(可以是任意一条边,也可以是多条组合;只能创建矩形的border,不能添加圆角)
 *
 *  @param strokeColor        路径的颜色
 *  @param size               图片的大小
 *  @param lineWidth          路径的大小
 *  @param borderPosition     图片的路径位置,上左下右
 *
 *  @return 带路径,没有背景色的UIImage
 */
+ (nullable UIImage *)qmui_imageWithStrokeColor:(nullable UIColor *)strokeColor size:(CGSize)size lineWidth:(CGFloat)lineWidth borderPosition:(QMUIImageBorderPosition)borderPosition;
/**
 *  创建一个指定大小和颜色的形状图片
 *  @param shape 图片形状
 *  @param size 图片大小
 *  @param tintColor 图片颜色
 */
+ (nullable UIImage *)qmui_imageWithShape:(QMUIImageShape)shape size:(CGSize)size tintColor:(nullable UIColor *)tintColor;

/**
 *  创建一个指定大小和颜色的形状图片
 *  @param shape 图片形状
 *  @param size 图片大小
 *  @param lineWidth 路径大小,不会影响最终size
 *  @param tintColor 图片颜色
 */
+ (nullable UIImage *)qmui_imageWithShape:(QMUIImageShape)shape size:(CGSize)size lineWidth:(CGFloat)lineWidth tintColor:(nullable UIColor *)tintColor;

/**
 *  将文字渲染成图片,最终图片和文字一样大
 */
+ (nullable UIImage *)qmui_imageWithAttributedString:(NSAttributedString *)attributedString;

/**
 对传进来的 `UIView` 截图,生成一个 `UIImage` 并返回。注意这里使用的是 view.layer 来渲染图片内容。

 @param view 要截图的 `UIView`

 @return `UIView` 的截图
 
 @warning UIView 的 transform 并不会在截图里生效
 */
+ (nullable UIImage *)qmui_imageWithView:(UIView *)view;

/**
 对传进来的 `UIView` 截图,生成一个 `UIImage` 并返回。注意这里使用的是 iOS 7的系统截图接口。

 @param view         要截图的 `UIView`
 @param afterUpdates 是否要在界面更新完成后才截图

 @return `UIView` 的截图
 
 @warning UIView 的 transform 并不会在截图里生效
 */
+ (nullable UIImage *)qmui_imageWithView:(UIView *)view afterScreenUpdates:(BOOL)afterUpdates;

@end

Undocumented

  • 用于绘制一张图并以 UIImage 的形式返回

    Declaration

    Objective-C

    + (nullable UIImage *)
        qmui_imageWithSize:(CGSize)size
                    opaque:(BOOL)opaque
                     scale:(CGFloat)scale
                   actions:(nonnull void (^)(CGContextRef _Nonnull))actionBlock;

    Swift

    class func qmui_image(with size: CGSize, opaque: Bool, scale: CGFloat, actions actionBlock: @escaping (CGContext) -> Void) -> UIImage?

    Parameters

    size

    要绘制的图片的 size,宽或高均不能为 0

    opaque

    图片是否不透明,YES 表示不透明,NO 表示半透明

    scale

    图片的倍数,0 表示取当前屏幕的倍数

    actionBlock

    实际的图片绘制操作,在这里只管绘制就行,不用手动生成 image

    Return Value

    返回绘制完的图片

  • 当前图片是否是可拉伸/平铺的,也即通过 resizableImageWithCapInsets: 处理过的图片

    Declaration

    Objective-C

    @property (nonatomic, readonly) BOOL qmui_resizable;

    Swift

    var qmui_resizable: Bool { get }
  • 获取当前图片的像素大小,如果是多倍图,会被放大到一倍来算

    Declaration

    Objective-C

    @property (nonatomic, readonly) CGSize qmui_sizeInPixel;

    Swift

    var qmui_sizeInPixel: CGSize { get }
  • 判断一张图是否不存在 alpha 通道,注意 “不存在 alpha 通道” 不等价于 “不透明”。一张不透明的图有可能是存在 alpha 通道但 alpha 值为 1。

    Declaration

    Objective-C

    - (BOOL)qmui_opaque;

    Swift

    func qmui_opaque() -> Bool
  • 获取当前图片的均色,原理是将图片绘制到1px*1px的矩形内,再从当前区域取色,得到图片的均色。 @link http://www.bobbygeorgescu.com/2011/08/finding-average-color-of-uiimage/ @/link

    Declaration

    Objective-C

    - (nonnull UIColor *)qmui_averageColor;

    Swift

    func qmui_averageColor() -> UIColor

    Return Value

    代表图片平均颜色的UIColor对象

  • 置灰当前图片

    Declaration

    Objective-C

    - (nullable UIImage *)qmui_grayImage;

    Swift

    func qmui_gray() -> UIImage?

    Return Value

    已经置灰的图片

  • 设置一张图片的透明度

    Declaration

    Objective-C

    - (nullable UIImage *)qmui_imageWithAlpha:(CGFloat)alpha;

    Swift

    func qmui_image(withAlpha alpha: CGFloat) -> UIImage?

    Parameters

    alpha

    要用于渲染透明度

    Return Value

    设置了透明度之后的图片

  • 保持当前图片的形状不变,使用指定的颜色去重新渲染它,生成一张新图片并返回

    Declaration

    Objective-C

    - (nullable UIImage *)qmui_imageWithTintColor:(nullable UIColor *)tintColor;

    Swift

    func qmui_image(withTintColor tintColor: UIColor?) -> UIImage?

    Parameters

    tintColor

    要用于渲染的新颜色

    Return Value

    与当前图片形状一致但颜色与参数tintColor相同的新图片

  • 以 CIColorBlendMode 的模式为当前图片叠加一个颜色,生成一张新图片并返回,在叠加过程中会保留图片内的纹理。

    Warning

    这个方法可能比较慢,会卡住主线程,建议异步使用

    Declaration

    Objective-C

    - (nullable UIImage *)qmui_imageWithBlendColor:(nullable UIColor *)blendColor;

    Swift

    func qmui_image(withBlendColor blendColor: UIColor?) -> UIImage?

    Parameters

    blendColor

    要叠加的颜色

    Return Value

    基于当前图片纹理保持不变的情况下颜色变为指定的叠加颜色的新图片

  • 在当前图片的基础上叠加一张图片,并指定绘制叠加图片的起始位置

    叠加上去的图片将保持原图片的大小不变,不被压缩、拉伸

    Declaration

    Objective-C

    - (nullable UIImage *)qmui_imageWithImageAbove:(nonnull UIImage *)image
                                           atPoint:(CGPoint)point;

    Swift

    func qmui_imageWithImage(above image: UIImage, at point: CGPoint) -> UIImage?

    Parameters

    image

    要叠加的图片

    point

    所叠加图片的绘制的起始位置

    Return Value

    返回一张与原图大小一致的图片,所叠加的图片若超出原图大小,则超出部分被截掉

  • 在当前图片的上下左右增加一些空白(不支持负值),通常用于调节NSAttributedString里的图片与文字的间距

    Declaration

    Objective-C

    - (nullable UIImage *)qmui_imageWithSpacingExtensionInsets:
        (UIEdgeInsets)extension;

    Swift

    func qmui_image(withSpacingExtensionInsets extension: UIEdgeInsets) -> UIImage?

    Parameters

    extension

    要拓展的大小

    Return Value

    拓展后的图片

  • 切割出在指定位置中的图片

    Declaration

    Objective-C

    - (nullable UIImage *)qmui_imageWithClippedRect:(CGRect)rect;

    Swift

    func qmui_image(withClippedRect rect: CGRect) -> UIImage?

    Parameters

    rect

    要切割的rect

    Return Value

    切割后的新图片

  • 切割出在指定圆角的图片

    Declaration

    Objective-C

    - (nullable UIImage *)qmui_imageWithClippedCornerRadius:(CGFloat)cornerRadius;

    Swift

    func qmui_image(withClippedCornerRadius cornerRadius: CGFloat) -> UIImage?

    Parameters

    cornerRadius

    要切割的圆角值

    Return Value

    切割后的新图片

  • 同上,可以设置 scale

    Declaration

    Objective-C

    - (nullable UIImage *)qmui_imageWithClippedCornerRadius:(CGFloat)cornerRadius
                                                      scale:(CGFloat)scale;

    Swift

    func qmui_image(withClippedCornerRadius cornerRadius: CGFloat, scale: CGFloat) -> UIImage?
  • 将原图以 QMUIImageResizingModeScaleAspectFit 的策略缩放,使其缩放后的大小不超过指定的大小,并返回缩放后的图片。缩放后的图片的倍数保持与原图一致。

    See

    qmui_imageResizedInLimitedSize:resizingMode:scale:

    Declaration

    Objective-C

    - (nullable UIImage *)qmui_imageResizedInLimitedSize:(CGSize)size;

    Swift

    func qmui_imageResized(inLimitedSize size: CGSize) -> UIImage?

    Parameters

    size

    在这个约束的 size 内进行缩放后的大小,处理后返回的图片的 size 会根据 resizingMode 不同而不同,但必定不会超过 size。

    Return Value

    处理完的图片

  • 将原图按指定的 QMUIImageResizingMode 缩放,使其缩放后的大小不超过指定的大小,并返回缩放后的图片,缩放后的图片的倍数保持与原图一致。

    See

    qmui_imageResizedInLimitedSize:resizingMode:scale:

    Declaration

    Objective-C

    - (nullable UIImage *)qmui_imageResizedInLimitedSize:(CGSize)size
                                            resizingMode:
                                                (QMUIImageResizingMode)resizingMode;

    Swift

    func qmui_imageResized(inLimitedSize size: CGSize, resizingMode: QMUIImageResizingMode) -> UIImage?

    Parameters

    size

    在这个约束的 size 内进行缩放后的大小,处理后返回的图片的 size 会根据 resizingMode 不同而不同,但必定不会超过 size。

    resizingMode

    希望使用的缩放模式

    Return Value

    处理完的图片

  • 将原图按指定的 QMUIImageResizingMode 缩放,使其缩放后的大小不超过指定的大小,并返回缩放后的图片。

    Declaration

    Objective-C

    - (nullable UIImage *)qmui_imageResizedInLimitedSize:(CGSize)size
                                            resizingMode:
                                                (QMUIImageResizingMode)resizingMode
                                                   scale:(CGFloat)scale;

    Swift

    func qmui_imageResized(inLimitedSize size: CGSize, resizingMode: QMUIImageResizingMode, scale: CGFloat) -> UIImage?

    Parameters

    size

    在这个约束的 size 内进行缩放后的大小,处理后返回的图片的 size 会根据 resizingMode 不同而不同,但必定不会超过 size。

    resizingMode

    希望使用的缩放模式

    scale

    用于指定缩放后的图片的倍数

    Return Value

    处理完的图片

  • 将原图进行旋转,只能选择上下左右四个方向

    Declaration

    Objective-C

    - (nullable UIImage *)qmui_imageWithOrientation:(UIImageOrientation)direction;

    Swift

    func qmui_image(with direction: UIImage.Orientation) -> UIImage?

    Parameters

    direction

    旋转的方向

    Return Value

    处理完的图片

  • 为图片加上一个border,border的路径为path

    Warning

    注意通过path.lineWidth设置边框大小,同时注意路径要考虑像素对齐(path.lineWidth / 2.0

    Declaration

    Objective-C

    - (nullable UIImage *)qmui_imageWithBorderColor:(nullable UIColor *)borderColor
                                               path:(nullable UIBezierPath *)path;

    Swift

    func qmui_image(withBorderColor borderColor: UIColor?, path: UIBezierPath?) -> UIImage?

    Parameters

    borderColor

    border的颜色

    path

    border的路径

    Return Value

    带border的UIImage

  • 为图片加上一个border,border的路径为borderColor、cornerRadius和borderWidth所创建的path

    Declaration

    Objective-C

    - (nullable UIImage *)qmui_imageWithBorderColor:(nullable UIColor *)borderColor
                                        borderWidth:(CGFloat)borderWidth
                                       cornerRadius:(CGFloat)cornerRadius
                                      dashedLengths:
                                          (nullable const CGFloat *)dashedLengths;

    Swift

    func qmui_image(withBorderColor borderColor: UIColor?, borderWidth: CGFloat, cornerRadius: CGFloat, dashedLengths: UnsafePointer<CGFloat>?) -> UIImage?

    Parameters

    borderColor

    border的颜色

    borderWidth

    border的宽度

    cornerRadius

    border的圆角

    dashedLengths

    一个CGFloat的数组,例如CGFloat dashedLengths[] = {2, 4}。如果不需要虚线,则传0即可

    Return Value

    带border的UIImage

  • Undocumented

    Declaration

    Objective-C

    - (nullable UIImage *)qmui_imageWithBorderColor:(nullable UIColor *)borderColor borderWidth:(CGFloat)borderWidth cornerRadius:(CGFloat)cornerRadius;

    Swift

    func qmui_image(withBorderColor borderColor: UIColor?, borderWidth: CGFloat, cornerRadius: CGFloat) -> UIImage?
  • 为图片加上一个border(可以是任意一条边,也可以是多条组合;只能创建矩形的border,不能添加圆角)

    Declaration

    Objective-C

    - (nullable UIImage *)qmui_imageWithBorderColor:(nullable UIColor *)borderColor
                                        borderWidth:(CGFloat)borderWidth
                                     borderPosition:
                                         (QMUIImageBorderPosition)borderPosition;

    Swift

    func qmui_image(withBorderColor borderColor: UIColor?, borderWidth: CGFloat, borderPosition: QMUIImageBorderPosition) -> UIImage?

    Parameters

    borderColor

    border的颜色

    borderWidth

    border的宽度

    borderPosition

    border的位置

    Return Value

    带border的UIImage

  • 返回一个被mask的图片

    Declaration

    Objective-C

    - (nullable UIImage *)qmui_imageWithMaskImage:(nonnull UIImage *)maskImage
                               usingMaskImageMode:(BOOL)usingMaskImageMode;

    Swift

    func qmui_image(withMaskImage maskImage: UIImage, usingMaskImageMode: Bool) -> UIImage?

    Parameters

    maskImage

    mask图片

    usingMaskImageMode

    是否使用“mask image”的方式,若为 YES,则黑色部分显示,白色部分消失,透明部分显示,其他颜色会按照颜色的灰色度对图片做透明处理。若为 NO,则 maskImage 要求必须为灰度颜色空间的图片(黑白图),白色部分显示,黑色部分消失,透明部分消失,其他灰色度对图片做透明处理。

    Return Value

    被mask的图片

  • 将 data 转换成 animated UIImage(如果非 animated 则转换成普通 UIImage),image 倍数为 1(与系统的 [UIImage imageWithData:] 接口一致)

    Declaration

    Objective-C

    + (nullable UIImage *)qmui_animatedImageWithData:(nonnull NSData *)data;

    Swift

    class func qmui_animatedImage(with data: Data) -> UIImage?

    Parameters

    data

    图片文件的 data

    Return Value

    转换成的 UIImage

  • 将 data 转换成 animated UIImage(如果非 animated 则转换成普通 UIImage)

    Declaration

    Objective-C

    + (nullable UIImage *)qmui_animatedImageWithData:(nonnull NSData *)data
                                               scale:(CGFloat)scale;

    Swift

    class func qmui_animatedImage(with data: Data, scale: CGFloat) -> UIImage?

    Parameters

    data

    图片文件的 data

    scale

    图片的倍数,0 表示获取当前设备的屏幕倍数

    Return Value

    转换成的 UIImage

  • 在 mainBundle 里找到对应名字的图片, 注意图片 scale 为 1,与系统的 [UIImage imageWithData:] 接口一致,若需要修改倍数,请使用 -qmui_animatedImageNamed:scale:

    Declaration

    Objective-C

    + (nullable UIImage *)qmui_animatedImageNamed:(nonnull NSString *)name;

    Swift

    class func qmui_animatedImageNamed(_ name: String) -> UIImage?

    Parameters

    name

    图片名,可指定后缀,若不写后缀,默认为“gif”。不写后缀的情况下会先找“gif”后缀的图片,不存在再找无后缀的文件,仍不存在则返回 nil

    Return Value

    转换成的 UIImage

  • 在 mainBundle 里找到对应名字的图片

    Declaration

    Objective-C

    + (nullable UIImage *)qmui_animatedImageNamed:(nonnull NSString *)name
                                            scale:(CGFloat)scale;

    Swift

    class func qmui_animatedImageNamed(_ name: String, scale: CGFloat) -> UIImage?

    Parameters

    name

    图片名,可指定后缀,若不写后缀,默认为“gif”。不写后缀的情况下会先找“gif”后缀的图片,不存在再找无后缀的文件,仍不存在则返回 nil

    scale

    图片的倍数,0 表示获取当前设备的屏幕倍数

    Return Value

    转换成的 UIImage

  • 创建一个size为(4, 4)的纯色的UIImage

    Declaration

    Objective-C

    + (nullable UIImage *)qmui_imageWithColor:(nullable UIColor *)color;

    Swift

    class func qmui_image(with color: UIColor?) -> UIImage?

    Parameters

    color

    图片的颜色

    Return Value

    纯色的UIImage

  • 创建一个纯色的UIImage

    Declaration

    Objective-C

    + (nullable UIImage *)qmui_imageWithColor:(nullable UIColor *)color
                                         size:(CGSize)size
                                 cornerRadius:(CGFloat)cornerRadius;

    Swift

    class func qmui_image(with color: UIColor?, size: CGSize, cornerRadius: CGFloat) -> UIImage?

    Parameters

    color

    图片的颜色

    size

    图片的大小

    cornerRadius

    图片的圆角

    Return Value

    纯色的UIImage

  • 创建一个纯色的UIImage,支持为四个角设置不同的圆角

    Declaration

    Objective-C

    + (nullable UIImage *)qmui_imageWithColor:(nullable UIColor *)color
                                         size:(CGSize)size
                            cornerRadiusArray:
                                (nullable NSArray<NSNumber *> *)cornerRadius;

    Swift

    class func qmui_image(with color: UIColor?, size: CGSize, cornerRadiusArray cornerRadius: [NSNumber]?) -> UIImage?

    Parameters

    color

    图片的颜色

    size

    图片的大小

    cornerRadius

    四个角的圆角值的数组,长度必须为4,顺序分别为[左上角、左下角、右下角、右上角]

  • 创建一个带边框路径,没有背景色的路径图片,border的路径为path

    Declaration

    Objective-C

    + (nullable UIImage *)qmui_imageWithStrokeColor:(nullable UIColor *)strokeColor
                                               size:(CGSize)size
                                               path:(nullable UIBezierPath *)path
                                            addClip:(BOOL)addClip;

    Swift

    class func qmui_image(withStroke strokeColor: UIColor?, size: CGSize, path: UIBezierPath?, addClip: Bool) -> UIImage?

    Parameters

    strokeColor

    border的颜色

    path

    border的路径

    addClip

    是否要调path的addClip

    Return Value

    带border的UIImage

  • 创建一个带边框路径,没有背景色的路径图片,border的路径为strokeColor、cornerRadius和lineWidth所创建的path

    Declaration

    Objective-C

    + (nullable UIImage *)qmui_imageWithStrokeColor:(nullable UIColor *)strokeColor
                                               size:(CGSize)size
                                          lineWidth:(CGFloat)lineWidth
                                       cornerRadius:(CGFloat)cornerRadius;

    Swift

    class func qmui_image(withStroke strokeColor: UIColor?, size: CGSize, lineWidth: CGFloat, cornerRadius: CGFloat) -> UIImage?

    Parameters

    strokeColor

    border的颜色

    lineWidth

    border的宽度

    cornerRadius

    border的圆角

    Return Value

    带border的UIImage

  • 创建一个带边框路径,没有背景色的路径图片(可以是任意一条边,也可以是多条组合;只能创建矩形的border,不能添加圆角)

    Declaration

    Objective-C

    + (nullable UIImage *)qmui_imageWithStrokeColor:(nullable UIColor *)strokeColor
                                               size:(CGSize)size
                                          lineWidth:(CGFloat)lineWidth
                                     borderPosition:
                                         (QMUIImageBorderPosition)borderPosition;

    Swift

    class func qmui_image(withStroke strokeColor: UIColor?, size: CGSize, lineWidth: CGFloat, borderPosition: QMUIImageBorderPosition) -> UIImage?

    Parameters

    strokeColor

    路径的颜色

    size

    图片的大小

    lineWidth

    路径的大小

    borderPosition

    图片的路径位置,上左下右

    Return Value

    带路径,没有背景色的UIImage

  • 创建一个指定大小和颜色的形状图片

    Declaration

    Objective-C

    + (nullable UIImage *)qmui_imageWithShape:(QMUIImageShape)shape
                                         size:(CGSize)size
                                    tintColor:(nullable UIColor *)tintColor;

    Swift

    class func qmui_image(with shape: QMUIImageShape, size: CGSize, tintColor: UIColor?) -> UIImage?

    Parameters

    shape

    图片形状

    size

    图片大小

    tintColor

    图片颜色

  • 创建一个指定大小和颜色的形状图片

    Declaration

    Objective-C

    + (nullable UIImage *)qmui_imageWithShape:(QMUIImageShape)shape
                                         size:(CGSize)size
                                    lineWidth:(CGFloat)lineWidth
                                    tintColor:(nullable UIColor *)tintColor;

    Swift

    class func qmui_image(with shape: QMUIImageShape, size: CGSize, lineWidth: CGFloat, tintColor: UIColor?) -> UIImage?

    Parameters

    shape

    图片形状

    size

    图片大小

    lineWidth

    路径大小,不会影响最终size

    tintColor

    图片颜色

  • 将文字渲染成图片,最终图片和文字一样大

    Declaration

    Objective-C

    + (nullable UIImage *)qmui_imageWithAttributedString:
        (nonnull NSAttributedString *)attributedString;

    Swift

    class func qmui_image(with attributedString: NSAttributedString) -> UIImage?
  • 对传进来的 UIView 截图,生成一个 UIImage 并返回。注意这里使用的是 view.layer 来渲染图片内容。

    Warning

    UIView 的 transform 并不会在截图里生效

    Declaration

    Objective-C

    + (nullable UIImage *)qmui_imageWithView:(nonnull UIView *)view;

    Swift

    class func qmui_image(with view: UIView) -> UIImage?

    Parameters

    view

    要截图的 UIView

    Return Value

    UIView 的截图

  • 对传进来的 UIView 截图,生成一个 UIImage 并返回。注意这里使用的是 iOS 7的系统截图接口。

    Warning

    UIView 的 transform 并不会在截图里生效

    Declaration

    Objective-C

    + (nullable UIImage *)qmui_imageWithView:(nonnull UIView *)view
                          afterScreenUpdates:(BOOL)afterUpdates;

    Swift

    class func qmui_image(with view: UIView, afterScreenUpdates afterUpdates: Bool) -> UIImage?

    Parameters

    view

    要截图的 UIView

    afterUpdates

    是否要在界面更新完成后才截图

    Return Value

    UIView 的截图