IOS创建二维码
【摘要】
//调用 UIImage *qrcode = [self createNonInterpolatedUIImageFormCIImage:[self createQRForString:@"http://www.baidu.com"] withSize:190.0f]; UIImage *customQrcode = [...
-
//调用
-
UIImage *qrcode = [self createNonInterpolatedUIImageFormCIImage:[self createQRForString:@"http://www.baidu.com"] withSize:190.0f];
-
UIImage *customQrcode = [self imageBlackToTransparent:qrcode withRed:0.0f andGreen:0.0f andBlue:0.0f];
-
self.erweimaImg.image = customQrcode;
-
#pragma mark - InterpolatedUIImage
-
- (UIImage *)createNonInterpolatedUIImageFormCIImage:(CIImage *)image withSize:(CGFloat) size {
-
CGRect extent = CGRectIntegral(image.extent);
-
CGFloat scale = MIN(size/CGRectGetWidth(extent), size/CGRectGetHeight(extent));
-
// create a bitmap image that we'll draw into a bitmap context at the desired size;
-
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);
-
// Create an image with the contents of our bitmap
-
CGImageRef scaledImage = CGBitmapContextCreateImage(bitmapRef);
-
// Cleanup
-
CGContextRelease(bitmapRef);
-
CGImageRelease(bitmapImage);
-
return [UIImage imageWithCGImage:scaledImage];
-
}
-
-
#pragma mark - QRCodeGenerator
-
- (CIImage *)createQRForString:(NSString *)qrString {
-
// Need to convert the string to a UTF-8 encoded NSData object
-
NSData *stringData = [qrString dataUsingEncoding:NSUTF8StringEncoding];
-
// Create the filter
-
CIFilter *qrFilter = [CIFilter filterWithName:@"CIQRCodeGenerator"];
-
// Set the message content and error-correction level
-
[qrFilter setValue:stringData forKey:@"inputMessage"];
-
[qrFilter setValue:@"M" forKey:@"inputCorrectionLevel"];
-
// Send the image back
-
return qrFilter.outputImage;
-
}
-
-
#pragma mark - imageToTransparent
-
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);
-
// create context
-
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
-
CGContextRef context = CGBitmapContextCreate(rgbImageBuf, imageWidth, imageHeight, 8, bytesPerRow, colorSpace,
-
kCGBitmapByteOrder32Little | kCGImageAlphaNoneSkipLast);
-
CGContextDrawImage(context, CGRectMake(0, 0, imageWidth, imageHeight), image.CGImage);
-
// traverse pixe
-
int pixelNum = imageWidth * imageHeight;
-
uint32_t* pCurPtr = rgbImageBuf;
-
for (int i = 0; i < pixelNum; i++, pCurPtr++){
-
if ((*pCurPtr & 0xFFFFFF00) < 0x99999900){
-
// change color
-
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;
-
}
-
}
-
// context to image
-
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];
-
// release
-
CGImageRelease(imageRef);
-
CGContextRelease(context);
-
CGColorSpaceRelease(colorSpace);
-
return resultUIImage;
-
}
文章来源: zzzili.blog.csdn.net,作者:清雨小竹,版权归原作者所有,如需转载,请联系作者。
原文链接:zzzili.blog.csdn.net/article/details/49759121
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)