IOS创建二维码

举报
清雨小竹 发表于 2022/09/25 00:04:40 2022/09/25
【摘要】 //调用 UIImage *qrcode = [self createNonInterpolatedUIImageFormCIImage:[self createQRForString:@"http://www.baidu.com"] withSize:190.0f]; UIImage *customQrcode = [...


  
  1. //调用
  2. UIImage *qrcode = [self createNonInterpolatedUIImageFormCIImage:[self createQRForString:@"http://www.baidu.com"] withSize:190.0f];
  3. UIImage *customQrcode = [self imageBlackToTransparent:qrcode withRed:0.0f andGreen:0.0f andBlue:0.0f];
  4. self.erweimaImg.image = customQrcode;



  
  1. #pragma mark - InterpolatedUIImage
  2. - (UIImage *)createNonInterpolatedUIImageFormCIImage:(CIImage *)image withSize:(CGFloat) size {
  3. CGRect extent = CGRectIntegral(image.extent);
  4. CGFloat scale = MIN(size/CGRectGetWidth(extent), size/CGRectGetHeight(extent));
  5. // create a bitmap image that we'll draw into a bitmap context at the desired size;
  6. size_t width = CGRectGetWidth(extent) * scale;
  7. size_t height = CGRectGetHeight(extent) * scale;
  8. CGColorSpaceRef cs = CGColorSpaceCreateDeviceGray();
  9. CGContextRef bitmapRef = CGBitmapContextCreate(nil, width, height, 8, 0, cs, (CGBitmapInfo)kCGImageAlphaNone);
  10. CIContext *context = [CIContext contextWithOptions:nil];
  11. CGImageRef bitmapImage = [context createCGImage:image fromRect:extent];
  12. CGContextSetInterpolationQuality(bitmapRef, kCGInterpolationNone);
  13. CGContextScaleCTM(bitmapRef, scale, scale);
  14. CGContextDrawImage(bitmapRef, extent, bitmapImage);
  15. // Create an image with the contents of our bitmap
  16. CGImageRef scaledImage = CGBitmapContextCreateImage(bitmapRef);
  17. // Cleanup
  18. CGContextRelease(bitmapRef);
  19. CGImageRelease(bitmapImage);
  20. return [UIImage imageWithCGImage:scaledImage];
  21. }
  22. #pragma mark - QRCodeGenerator
  23. - (CIImage *)createQRForString:(NSString *)qrString {
  24. // Need to convert the string to a UTF-8 encoded NSData object
  25. NSData *stringData = [qrString dataUsingEncoding:NSUTF8StringEncoding];
  26. // Create the filter
  27. CIFilter *qrFilter = [CIFilter filterWithName:@"CIQRCodeGenerator"];
  28. // Set the message content and error-correction level
  29. [qrFilter setValue:stringData forKey:@"inputMessage"];
  30. [qrFilter setValue:@"M" forKey:@"inputCorrectionLevel"];
  31. // Send the image back
  32. return qrFilter.outputImage;
  33. }
  34. #pragma mark - imageToTransparent
  35. void ProviderReleaseData (void *info, const void *data, size_t size){
  36. free((void*)data);
  37. }
  38. - (UIImage*)imageBlackToTransparent:(UIImage*)image withRed:(CGFloat)red andGreen:(CGFloat)green andBlue:(CGFloat)blue{
  39. const int imageWidth = image.size.width;
  40. const int imageHeight = image.size.height;
  41. size_t bytesPerRow = imageWidth * 4;
  42. uint32_t* rgbImageBuf = (uint32_t*)malloc(bytesPerRow * imageHeight);
  43. // create context
  44. CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
  45. CGContextRef context = CGBitmapContextCreate(rgbImageBuf, imageWidth, imageHeight, 8, bytesPerRow, colorSpace,
  46. kCGBitmapByteOrder32Little | kCGImageAlphaNoneSkipLast);
  47. CGContextDrawImage(context, CGRectMake(0, 0, imageWidth, imageHeight), image.CGImage);
  48. // traverse pixe
  49. int pixelNum = imageWidth * imageHeight;
  50. uint32_t* pCurPtr = rgbImageBuf;
  51. for (int i = 0; i < pixelNum; i++, pCurPtr++){
  52. if ((*pCurPtr & 0xFFFFFF00) < 0x99999900){
  53. // change color
  54. uint8_t* ptr = (uint8_t*)pCurPtr;
  55. ptr[3] = red; //0~255
  56. ptr[2] = green;
  57. ptr[1] = blue;
  58. }else{
  59. uint8_t* ptr = (uint8_t*)pCurPtr;
  60. ptr[0] = 0;
  61. }
  62. }
  63. // context to image
  64. CGDataProviderRef dataProvider = CGDataProviderCreateWithData(NULL, rgbImageBuf, bytesPerRow * imageHeight, ProviderReleaseData);
  65. CGImageRef imageRef = CGImageCreate(imageWidth, imageHeight, 8, 32, bytesPerRow, colorSpace,
  66. kCGImageAlphaLast | kCGBitmapByteOrder32Little, dataProvider,
  67. NULL, true, kCGRenderingIntentDefault);
  68. CGDataProviderRelease(dataProvider);
  69. UIImage* resultUIImage = [UIImage imageWithCGImage:imageRef];
  70. // release
  71. CGImageRelease(imageRef);
  72. CGContextRelease(context);
  73. CGColorSpaceRelease(colorSpace);
  74. return resultUIImage;
  75. }


文章来源: zzzili.blog.csdn.net,作者:清雨小竹,版权归原作者所有,如需转载,请联系作者。

原文链接:zzzili.blog.csdn.net/article/details/49759121

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。