博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS生成二维码
阅读量:6947 次
发布时间:2019-06-27

本文共 3584 字,大约阅读时间需要 11 分钟。

  hot3.png

分两步:1生成二维码,2调整大小1,生成- (CIImage *)createQRForString:(NSString *)qrString {    NSData *stringData = [qrString dataUsingEncoding:NSUTF8StringEncoding];    // 创建filter    CIFilter *qrFilter = [CIFilter filterWithName:@"CIQRCodeGenerator"];    // 设置内容和纠错级别    [qrFilter setValue:stringData forKey:@"inputMessage"];    [qrFilter setValue:@"M" forKey:@"inputCorrectionLevel"];    // 返回CIImage    return qrFilter.outputImage;}2,调整大小- (UIImage *)createNonInterpolatedUIImageFormCIImage:(CIImage *)image withSize:(CGFloat) size {    CGRect extent = CGRectIntegral(image.extent);    CGFloat scale = MIN(size/CGRectGetWidth(extent), size/CGRectGetHeight(extent));    // 创建bitmap;    size_t width = CGRectGetWidth(extent) * scale;    size_t height = CGRectGetHeight(extent) * scale;    CGColorSpaceRef cs = CGColorSpaceCreateDeviceGray();    CGContextRef bitmapRef = CGBitmapContextCreate(nil, width, height, 8, 0, cs, (CGBitmapInfo)kCGImageAlphaNone);    CIContext *context = [CIContext contextWithOptions:nil];    CGImageRef bitmapImage = [context createCGImage:image fromRect:extent];    CGContextSetInterpolationQuality(bitmapRef, kCGInterpolationNone);    CGContextScaleCTM(bitmapRef, scale, scale);    CGContextDrawImage(bitmapRef, extent, bitmapImage);    // 保存bitmap到图片    CGImageRef scaledImage = CGBitmapContextCreateImage(bitmapRef);    CGContextRelease(bitmapRef);    CGImageRelease(bitmapImage);    return [UIImage imageWithCGImage:scaledImage];}3,彩色二维码(一般生成黑白的这步可以不要)void ProviderReleaseData (void *info, const void *data, size_t size){    free((void*)data);}- (UIImage*)imageBlackToTransparent:(UIImage*)image withRed:(CGFloat)red andGreen:(CGFloat)green andBlue:(CGFloat)blue{    const int imageWidth = image.size.width;    const int imageHeight = image.size.height;    size_t      bytesPerRow = imageWidth * 4;    uint32_t* rgbImageBuf = (uint32_t*)malloc(bytesPerRow * imageHeight);    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();    CGContextRef context = CGBitmapContextCreate(rgbImageBuf, imageWidth, imageHeight, 8, bytesPerRow, colorSpace,                                                 kCGBitmapByteOrder32Little | kCGImageAlphaNoneSkipLast);    CGContextDrawImage(context, CGRectMake(0, 0, imageWidth, imageHeight), image.CGImage);    // 遍历像素    int pixelNum = imageWidth * imageHeight;    uint32_t* pCurPtr = rgbImageBuf;    for (int i = 0; i < pixelNum; i++, pCurPtr++){        if ((*pCurPtr & 0xFFFFFF00) < 0x99999900)    // 将白色变成透明        {            // 改成下面的代码,会将图片转成想要的颜色            uint8_t* ptr = (uint8_t*)pCurPtr;            ptr[3] = red; //0~255            ptr[2] = green;            ptr[1] = blue;        }        else        {            uint8_t* ptr = (uint8_t*)pCurPtr;            ptr[0] = 0;        }    }    // 输出图片    CGDataProviderRef dataProvider = CGDataProviderCreateWithData(NULL, rgbImageBuf, bytesPerRow * imageHeight, ProviderReleaseData);    CGImageRef imageRef = CGImageCreate(imageWidth, imageHeight, 8, 32, bytesPerRow, colorSpace,                                        kCGImageAlphaLast | kCGBitmapByteOrder32Little, dataProvider,                                        NULL, true, kCGRenderingIntentDefault);    CGDataProviderRelease(dataProvider);    UIImage* resultUIImage = [UIImage imageWithCGImage:imageRef];    // 清理空间    CGImageRelease(imageRef);    CGContextRelease(context);    CGColorSpaceRelease(colorSpace);    return resultUIImage;}调用:    UIImage *qrImg = [self createNonInterpolatedUIImageFormCIImage:[self createQRForString:@"http://www.baidu.com"] withSize:100.0];

转载于:https://my.oschina.net/yup/blog/657837

你可能感兴趣的文章
[WARNING]: Could not match supplied host pattern, ignoring: servers
查看>>
npm install 后缀
查看>>
全自动安装linux操作系统(CentOS)
查看>>
通过自定义域名防止第一代比特币勒索病毒WannaCrypt传播的解决办法
查看>>
LVS负载均衡群集基础(一)
查看>>
fdisk分区命令使用总结
查看>>
HTTP 304 错误的详细解释
查看>>
服务器上安装sersync工具,实时触发rsync进行同步
查看>>
运维平台第一版本实现过程
查看>>
List接口,Set接口,Map接口学习总结
查看>>
Android笔记之:App列表之下拉刷新的使用
查看>>
生产环境常见的HTTP状态码列表(老男孩整理)
查看>>
mysqldump使用方法
查看>>
CALayer4-自定义层
查看>>
gradle在unix下编译
查看>>
;,&,&&,shell,区别
查看>>
Windows 7下安装Cygwin亲历烦恼记录
查看>>
cmd下windows批处理,获取当前系统时间,生成日志文件名
查看>>
XenServer 5.6 SP2开启Intellicache
查看>>
C#编码简单性之泛型篇(如何编写简短的C#代码,随时更新)
查看>>