#import <UIKit/UIKit.h>
NS_ASSUME_NONNULL_BEGIN
@interface UIImage (Extention)
- (NSString *)encodeToBase64String;
// 指定位置拉伸图片
- (UIImage *)drawImageWithLeft:(CGFloat)left top:(CGFloat)top;
// 生成圆角图片
- (UIImage *)circleImage;
//生成二维码
+ (UIImage *)createQRCodeWithData:(NSString *)dataString logoImageName:(NSString *)logoImageName imageSize:(CGFloat)size;
@end
NS_ASSUME_NONNULL_END
#import "UIImage+Extention.h"
@implementation UIImage (Extention)
- (NSString *)encodeToBase64String {
return [UIImagePNGRepresentation(self) base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength];
}
- (UIImage *)decodeBase64ToImage:(NSString *)strEncodeData {
NSData *data = [[NSData alloc]initWithBase64EncodedString:strEncodeData options:NSDataBase64DecodingIgnoreUnknownCharacters];
return[UIImage imageWithData:data];
}
// 指定位置拉伸图片
- (UIImage *)drawImageWithLeft:(CGFloat)left top:(CGFloat)top {
CGFloat imageWidth = self.size.width * left;
CGFloat imageHeight = self.size.height * top;
return [self stretchableImageWithLeftCapWidth:imageWidth topCapHeight:imageHeight];
}
// 生成一个圆角图片
- (UIImage *)circleImage {
// 裁剪图片: 图形上下文
// 1.开启图形上下文
// scale:比例因素 点:像素比例 0:自动识别比例因素
UIGraphicsBeginImageContextWithOptions(self.size, NO, 0);
// 2.描述圆形裁剪路径
UIBezierPath *clipPath = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(0, 0, self.size.width, self.size.height)];
// 3.设置为裁剪区域
[clipPath addClip];
// 4.画图片
[self drawAtPoint:CGPointZero];
// 5.取出图片
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
// 6.关闭上下文
UIGraphicsEndImageContext();
return image;
}
#pragma mark - 二维码
+ (UIImage *)createQRCodeWithData:(NSString *)dataString logoImageName:(NSString *)logoImageName imageSize:(CGFloat)size {
UIImage *image= [self createQRImageWithString:dataString];
image = [image drawImageWithSize:CGSizeMake(size, size)];
return [image addLogoImage:logoImageName];
}
+ (UIImage *)createQRImageWithString:(NSString *)qrString {
//先编码 成NSData
NSData* data=[qrString dataUsingEncoding:(NSUTF8StringEncoding)];
//创建CFFliter 实例
//CIImage 是Core Image的图片数据类
//CIFilter是 Core Image滤镜类
CIFilter* filter=[CIFilter filterWithName:@"CIQRCodeGenerator"];
//设置内容
[filter setValue:data forKey:@"inputMessage"];
//设置纠错级别
[filter setValue:@"H" forKey:@"inputCorrectionLevel"];
//[filter setDefaults];
CIImage *ciimage = filter.outputImage;
return [[UIImage alloc] initWithCIImage:ciimage];
}
//图片添加logo
- (UIImage *)addLogoImage:(NSString *)logoImageName {
UIImage *logoImage = [UIImage imageNamed:logoImageName];
if (logoImage == nil) {
return self;
}
//原始图片的宽和高,可以根据需求自己定义
CGFloat w = self.size.width;
CGFloat h = self.size.height;
//logo的宽和高,也可以根据需求自己定义
CGFloat logoWidth = w * 0.25;
CGFloat logoHeight = h * 0.25;
//绘制
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef context = CGBitmapContextCreate(NULL, w, h, 8, 444 * w, colorSpace, kCGImageAlphaPremultipliedFirst);
CGContextDrawImage(context, CGRectMake(0, 0, w, h), self.CGImage);
//绘制的logo位置,可自己调整
CGContextDrawImage(context, CGRectMake((w - logoWidth)/2,(h - logoHeight)/2, logoWidth, logoHeight), [logoImage CGImage]);
CGImageRef imageMasked = CGBitmapContextCreateImage(context);
CGContextRelease(context);
CGColorSpaceRelease(colorSpace);
return [UIImage imageWithCGImage:imageMasked];
}
@end