iOS 中常用的图片扩展方法,后期用到的都会更新在这里。
//
// UIImage+Category.h
//
// Created by weixin:wangguanxiao on 16/7/19.
// Copyright © 2016年 Golf. All rights reserved.
//
#import
@interface UIImage (Category)
/**
* 等比缩放
*
* @param size 缩放尺寸
*
* @return 图像
*/
- (instancetype)scaleToSize:(CGSize)size;
/**
* 缩放
*
* @param radio 缩放比例, eg. 0.5 缩放一半
*
* @return 图像
*/
- (instancetype)scaleRadio:(CGFloat)radio;
/**
* 拉伸图片
*
* @param name 图片名
*
* @return UIImage
*/
+ (instancetype)stretchableImageWithName:(NSString *)name;
/**
* 得到一块填充颜色的image
*
* @param color 填充颜色
* @param size 大小
*
* @return image
*/
+ (instancetype)imageWithFillColor:(UIColor *)color size:(CGSize)size;
// 得到图片的Data
- (NSData *)imageData;
/// 获得屏幕图像
+ (instancetype)imageFromView:(UIView *)view;
/// 获得某个范围内的屏幕图像
+ (instancetype)imageFromView:(UIView *)view
atFrame:(CGRect)rect;
/// 裁剪区域
- (UIImage *)clipFrame:(CGRect)frame;
@end
#import
@implementation UIImage (Category)
/**
* 等比缩放
*
* @param size 缩放尺寸
*
* @return 图像
*/
- (instancetype)scaleToSize:(CGSize)size
{
// 创建一个bitmap的context
UIGraphicsBeginImageContext(size);
// 绘制改变大小的图片
[self drawInRect:CGRectMake(0, 0, size.width, size.height)];
// 从当前context中创建一个改变大小后的图片
UIImage* scaledImage = UIGraphicsGetImageFromCurrentImageContext();
// 使当前的context出堆栈
UIGraphicsEndImageContext();
// 返回新的改变大小后的图片
return scaledImage;
}
/**
* 缩放
*
* @param radio 缩放比例, eg. 0.5 缩放一半
*
* @return 图像
*/
- (instancetype)scaleRadio:(CGFloat)radio;
{
float width = self.size.width*radio;
float height = self.size.height*radio;
CGSize size = CGSizeMake(width, height);
// 创建一个bitmap的context
UIGraphicsBeginImageContext(size);
// 绘制改变大小的图片
[self drawInRect:CGRectMake(0, 0, size.width, size.height)];
// 从当前context中创建一个改变大小后的图片
UIImage* scaledImage = UIGraphicsGetImageFromCurrentImageContext();
// 使当前的context出堆栈
UIGraphicsEndImageContext();
// 返回新的改变大小后的图片
return scaledImage;
}
/**
* 拉伸图片
*
* @param name 图片名
*
* @return UIImage
*/
+ (instancetype)stretchableImageWithName:(NSString *)name
{
UIImage *img = [UIImage imageNamed:name];
return [img stretchableImageWithLeftCapWidth:img.size.width/2 topCapHeight:img.size.height/2];
}
/**
* 得到一块填充颜色的image
*
* @param color 填充颜色
* @param size 大小
*
* @return image
*/
+ (instancetype)imageWithFillColor:(UIColor *)color size:(CGSize)size
{
UIGraphicsBeginImageContext(size);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetFillColorWithColor(context, [color CGColor]);
CGContextFillRect(context, CGRectMake(0, 0, size.width, size.height));
UIImage *img = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return img;
}
- (NSData *)imageData
{
return UIImagePNGRepresentation(self);
}
/// 获得屏幕图像
+ (instancetype)imageFromView:(UIView *)view
{
UIGraphicsBeginImageContextWithOptions(view.bounds.size, YES, view.layer.contentsScale);
[view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *image=UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
}
/// 获得某个范围内的屏幕图像
+ (instancetype)imageFromView:(UIView *)view
atFrame:(CGRect)rect
{
UIGraphicsBeginImageContextWithOptions(rect.size, NO, [UIScreen mainScreen].scale);
CGContextRef context = UIGraphicsGetCurrentContext();
if (context == NULL)
{
return nil;
}
CGContextSaveGState(context);
[view.layer renderInContext:context];
CGContextRestoreGState(context);
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
}
/// 裁剪区域
- (UIImage *)clipFrame:(CGRect)frame
{
CGImageRef imageRef = CGImageCreateWithImageInRect([self CGImage], frame);
UIImage *cropped = [UIImage imageWithCGImage:imageRef];
CGImageRelease(imageRef);
return cropped;
}
@end