亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > iOS > 正文

IOS 創建彩色二維碼實例詳解

2020-07-26 03:00:52
字體:
來源:轉載
供稿:網友

IOS 創建彩色二維碼

因為系統創建的二維碼默認都是黑色的,所以突然想改變一下二維碼顏色,具體操作有點復雜,而且其中用到了好多C語言的語法,Swift不好寫,所以默認用了OC。只貼了.m文件的代碼,.h文件就是幾個類函數的聲明。

#import "UIImage+CreateQRCode.h"  @implementation UIImage (CreateQRCode)  + (UIImage *)createQRCode:(NSString *)string andSize:(CGSize)size andColor:(UIColor *)color {   UIImage *qrcode = [self createNonInterpolatedUIImageFormCIImage:[self createQRForString:string] withSize:size];   const CGFloat *_components = CGColorGetComponents(color.CGColor);   CGFloat red = _components[0] * 255.f;   CGFloat green = _components[1] * 255.f;   CGFloat blue = _components[2] * 255.f;   return [self imageBlackToTransparent:qrcode withRed:red andGreen:green andBlue:blue]; }  + (void)setImageViewShadow:(UIImageView *)view {   view.layer.shadowOffset = CGSizeMake(0, 2);   view.layer.shadowRadius = 2;   view.layer.shadowColor = [UIColor blackColor].CGColor;   view.layer.shadowOpacity = 0.5;   view.backgroundColor = [UIColor clearColor]; }  #pragma mark - 創建灰度圖,只有灰度圖才能改變顏色 + (UIImage *)createNonInterpolatedUIImageFormCIImage:(CIImage *)image withSize:(CGSize)size {   CGRect extent = CGRectIntegral(image.extent);   CGFloat scale = MIN(size.width/CGRectGetWidth(extent), size.height/CGRectGetHeight(extent));      size_t width = CGRectGetWidth(extent) * scale;   size_t height = CGRectGetHeight(extent) * scale;    //  iOS不支持設備依賴顏色空間或通用顏色空間。iOS應用程序必須使用設備顏色空間 //  設備顏色空間主要用于IOS應用程序,因為其它顏色空間無法在IOS上使用。大多數情況下,Mac OS X應用程序應使用通用顏色空間,而不使用設備顏色空間。 //  CGColorSpaceCreateDeviceGray:創建設備依賴灰度顏色空間 //  CGColorSpaceCreateDeviceRGB:創建設備依賴RGB顏色空間 //  CGColorSpaceCreateDeviceCMYK:創建設備依賴CMYK顏色空間   CGColorSpaceRef cs = CGColorSpaceCreateDeviceGray();//這個是改變二維碼顏色的主要屬性,必須是灰度空間,作用是將UIImage轉變成了灰度圖      CGContextRef bitmapRef = CGBitmapContextCreate(NULL, width, height, 8, 0, cs, kCGImageAlphaNone);   CIContext * context = [CIContext contextWithOptions:NULL];   CGImageRef bitmapImage = [context createCGImage:image fromRect:extent];   CGContextSetInterpolationQuality(bitmapRef, kCGInterpolationHigh);   CGContextScaleCTM(bitmapRef, scale, scale);   CGContextDrawImage(bitmapRef, extent, bitmapImage);   CGImageRef scaledImage = CGBitmapContextCreateImage(bitmapRef);      CGContextRelease(bitmapRef);   CGImageRelease(bitmapImage);      return [UIImage imageWithCGImage:scaledImage]; }  #pragma mark - 創建二維碼的主要代碼 + (CIImage *)createQRForString:(NSString *)qrString {   NSData *stringData = [qrString dataUsingEncoding:NSUTF8StringEncoding];   CIFilter *qrFilter = [CIFilter filterWithName:@"CIQRCodeGenerator"];   [qrFilter setValue:stringData forKey:@"inputMessage"];   [qrFilter setValue:@"M" forKey:@"inputCorrectionLevel"];   return qrFilter.outputImage; }  #pragma mark - 改變二維碼的顏色 void ProviderReleaseData (voidvoid *info, const voidvoid *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; }  @end 

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
中文字幕亚洲一区在线观看| 亚洲国产精品va在线看黑人动漫| 亚洲精品电影网| 亚洲自拍偷拍在线| 在线播放日韩av| 国产亚洲美女精品久久久| 亚洲桃花岛网站| 亚洲男人av在线| 欧美中文在线免费| 欧美高跟鞋交xxxxxhd| 日韩欧美主播在线| 国产精品美女久久久免费| 国产精品xxx视频| 国产成+人+综合+亚洲欧美丁香花| 中文字幕精品国产| 人人澡人人澡人人看欧美| 国产亚洲视频在线| 久久香蕉国产线看观看网| 亚洲精品永久免费精品| 538国产精品一区二区在线| 国自在线精品视频| 国产精品视频公开费视频| 黑人巨大精品欧美一区二区三区| 久久夜色精品国产欧美乱| 久久久久久尹人网香蕉| 国产精品美女久久久免费| 国产精品女主播视频| 欧美国产日韩免费| 秋霞成人午夜鲁丝一区二区三区| 日韩精品福利网站| 亚洲国产日韩欧美综合久久| 久久夜色精品国产欧美乱| 久久久久久久成人| 欧美大全免费观看电视剧大泉洋| 91九色在线视频| 亚洲人成电影网| 亚洲第一区在线观看| 欧美大尺度电影在线观看| 日韩亚洲第一页| 中文字幕精品一区二区精品| 欧美性做爰毛片| 国产亚洲视频在线| 精品高清一区二区三区| 国产精品永久免费观看| 日韩视频在线观看免费| 欧美精品在线网站| 国内精品久久久久久| 伊人久久久久久久久久久| 亚洲成人亚洲激情| 色一情一乱一区二区| 日韩在线一区二区三区免费视频| 国产成人高清激情视频在线观看| 最新中文字幕亚洲| 国产91精品在线播放| 成人激情视频在线播放| 久久在线免费观看视频| 欧美精品制服第一页| 日韩精品视频在线免费观看| 91理论片午午论夜理片久久| 国产成人在线播放| 久久久视频免费观看| 久久亚洲春色中文字幕| 久久久av电影| 中文字幕无线精品亚洲乱码一区| 668精品在线视频| 中文字幕久久精品| 国产成人精品久久亚洲高清不卡| 欧美亚洲视频一区二区| 日韩中文字幕精品视频| 欧美综合一区第一页| 欧美黑人性视频| 欧美大肥婆大肥bbbbb| 欧美激情va永久在线播放| 国产成人av在线播放| 久久久久一本一区二区青青蜜月| 日韩av在线免费看| 国产欧美最新羞羞视频在线观看| 国产99久久久欧美黑人| 亚洲福利小视频| 亚洲色图五月天| 亚洲成年人影院在线| 欧美日韩亚洲天堂| 久久男人资源视频| 亚洲欧美日韩第一区| 中文字幕亚洲综合久久| 日韩欧美一区二区三区| 日韩大片免费观看视频播放| 韩国一区二区电影| 亚洲成人久久久久| 美女精品视频一区| 国a精品视频大全| 88xx成人精品| 亚洲一级免费视频| 尤物99国产成人精品视频| 日韩久久免费视频| 日韩欧美中文第一页| 欧美美女操人视频| 久久久久久有精品国产| 欧洲亚洲在线视频| 大胆欧美人体视频| 国产一区二区三区欧美| 国产精品午夜一区二区欲梦| 欧美在线视频网站| 国产亚洲激情在线| 色狠狠av一区二区三区香蕉蜜桃| 日韩精品一二三四区| 欧美激情综合色| 亚洲精品大尺度| 欧美老女人在线视频| 91精品久久久久久久| 亚洲国产日韩欧美在线动漫| 欧美日韩裸体免费视频| 在线精品高清中文字幕| 亚洲精品成人久久| 91久久久久久久久久久| 国产精品久久久久av免费| 欧美中文字幕精品| 国产suv精品一区二区三区88区| 91精品久久久久久久久中文字幕| 91人人爽人人爽人人精88v| 色综合视频一区中文字幕| 国产欧美在线视频| 亚洲精品欧美一区二区三区| 国产经典一区二区| 伊人久久免费视频| 欧美激情极品视频| 国产成人亚洲综合91| 欧美国产中文字幕| 亚洲精品福利资源站| 在线精品91av| 韩国三级电影久久久久久| 人九九综合九九宗合| 美女视频黄免费的亚洲男人天堂| www日韩欧美| 4p变态网欧美系列| 日韩美女在线观看| 91久久精品美女高潮| 国产成人亚洲综合91精品| 亚洲日本成人女熟在线观看| 91国内产香蕉| 91精品国产色综合久久不卡98口| 欧美日韩国产中文字幕| 精品高清一区二区三区| 亚洲一区二区三区四区视频| 亚洲精品美女在线观看播放| 国产精品一区二区久久国产| 亚洲福利在线看| 亚洲www视频| 亚洲天堂成人在线| 欧美激情视频在线免费观看 欧美视频免费一| 国产亚洲欧洲在线| 91tv亚洲精品香蕉国产一区7ujn| 国产精品小说在线| 久久精品国产精品| 日韩精品久久久久| 热久久这里只有| 欧美成人精品不卡视频在线观看| 亚洲网站在线观看| 日韩a**中文字幕| 性夜试看影院91社区| 亚洲国产欧美在线成人app| 成人午夜两性视频| 不卡av在线网站| 亚洲国产欧美在线成人app|