iOS 指定位置拉伸图片 图片Base64编码 生成二维码

#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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值