關(guān)于UIImage轉(zhuǎn)NSData (UIImagePNGRepresentation)返回為nil的情況

業(yè)務(wù)場景:

在自己做二維碼生成弱恒,生成以后需要傳遞圖片到后端射亏,結(jié)果發(fā)現(xiàn)APP一直在閃退虫腋,斷點調(diào)試的時候莽红,發(fā)現(xiàn)問題出現(xiàn)在了UIImage轉(zhuǎn)NSData這一步妥畏,也就是以下這兩個方法:

UIImagePNGRepresentation

UIImageJPEGRepresentation

(兩個方法的差異我就不贅述了,可以自己百度下)

實際在執(zhí)行這個方式時安吁,返回了一個nil對象醉蚁,導(dǎo)致了上傳的時候,appendPartWithFileData數(shù)據(jù)為空而崩潰了鬼店;其實以前一直是這樣操作的网棍,一直沒想到為什么會為nil

經(jīng)過參考官方文檔,發(fā)現(xiàn)了問題:
在蘋果官方的文檔里面寫著這么一句
“ return image as JPEG. May return nil if image has no CGImageRef or invalid bitmap format. compression is 0(most)..1(least)”

也就是當(dāng)沒有CGImageRef的時候妇智,會造成這個方法返回為空滥玷;然后我又回溯了一下自己生成二維碼的方法:

CIFilter *qrFilter = [CIFilter filterWithName:@"CIQRCodeGenerator"];
 [qrFilter setValue:stringData forKey:@"inputMessage"];
 [qrFilter setValue:@"M" forKey:@"inputCorrectionLevel"];
    
CIImage *qrImage = qrFilter.outputImage;
//放大并繪制二維碼 (上面生成的二維碼很小,需要放大)
CGImageRef cgImage = [[CIContext contextWithOptions:nil] createCGImage:qrImage fromRect:qrImage.extent];
UIGraphicsBeginImageContext(size);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetInterpolationQuality(context, kCGInterpolationNone);
//翻轉(zhuǎn)一下圖片 不然生成的QRCode就是上下顛倒的
CGContextScaleCTM(context, 1.0, -1.0);
CGContextDrawImage(context, CGContextGetClipBoundingBox(context), cgImage);
UIImage *codeImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
    
CGImageRelease(cgImage);
    
//繪制顏色
CIFilter *colorFilter = [CIFilter filterWithName:@"CIFalseColor"
                                       keysAndValues:
                             @"inputImage",[CIImage imageWithCGImage:codeImage.CGImage],
                             @"inputColor0",[CIColor colorWithCGColor:frontColor == nil ? [UIColor clearColor].CGColor: frontColor.CGColor],
                             @"inputColor1",[CIColor colorWithCGColor: backColor == nil ? [UIColor blackColor].CGColor : backColor.CGColor],
                             nil];
    
UIImage * colorCodeImage = [UIImage imageWithCIImage:colorFilter.outputImage];

其實自己用到的巍棱,就是CIImage惑畴,當(dāng)執(zhí)行方法生成的圖片,去打印 colorCodeImage的CGImage

NSLog(@"%@", colorCodeImage.CGImage)

執(zhí)行結(jié)果是nil

以此航徙,找到了問題的所在如贷,如果這樣的話,那就重新生成一下圖片就行了
直接貼上代碼,需要的研究一下

- (UIImage *)scaleImage:(UIImage *)image{
    //確定壓縮后的size
    CGFloat scaleWidth = image.size.width;
    CGFloat scaleHeight = image.size.height;
    CGSize scaleSize = CGSizeMake(scaleWidth, scaleHeight);
    //開啟圖形上下文
    UIGraphicsBeginImageContext(scaleSize);
    //繪制圖片
    [image drawInRect:CGRectMake(0, 0, scaleWidth, scaleHeight)];
    //從圖形上下文獲取圖片
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
    //關(guān)閉圖形上下文
    UIGraphicsEndImageContext();
    return newImage;
}

當(dāng)拿到現(xiàn)在的newImage的時候杠袱,發(fā)現(xiàn)正常能夠執(zhí)行相應(yīng)的轉(zhuǎn)換NSData的方法了泻红;

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市霞掺,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌讹躯,老刑警劉巖菩彬,帶你破解...
    沈念sama閱讀 216,744評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異潮梯,居然都是意外死亡骗灶,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,505評論 3 392
  • 文/潘曉璐 我一進店門秉馏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來耙旦,“玉大人,你說我怎么就攤上這事萝究∶舛迹” “怎么了?”我有些...
    開封第一講書人閱讀 163,105評論 0 353
  • 文/不壞的土叔 我叫張陵椭岩,是天一觀的道長晒喷。 經(jīng)常有香客問我锯七,道長,這世上最難降的妖魔是什么险领? 我笑而不...
    開封第一講書人閱讀 58,242評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮秒紧,結(jié)果婚禮上绢陌,老公的妹妹穿的比我還像新娘。我一直安慰自己熔恢,他們只是感情好脐湾,可當(dāng)我...
    茶點故事閱讀 67,269評論 6 389
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著绩聘,像睡著了一般沥割。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上凿菩,一...
    開封第一講書人閱讀 51,215評論 1 299
  • 那天机杜,我揣著相機與錄音,去河邊找鬼衅谷。 笑死椒拗,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蚀苛,決...
    沈念sama閱讀 40,096評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼在验,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了堵未?” 一聲冷哼從身側(cè)響起腋舌,我...
    開封第一講書人閱讀 38,939評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎渗蟹,沒想到半個月后块饺,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,354評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡雌芽,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,573評論 2 333
  • 正文 我和宋清朗相戀三年授艰,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片世落。...
    茶點故事閱讀 39,745評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡淮腾,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出屉佳,到底是詐尸還是另有隱情谷朝,我是刑警寧澤,帶...
    沈念sama閱讀 35,448評論 5 344
  • 正文 年R本政府宣布忘古,位于F島的核電站徘禁,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏髓堪。R本人自食惡果不足惜送朱,卻給世界環(huán)境...
    茶點故事閱讀 41,048評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望干旁。 院中可真熱鬧驶沼,春花似錦、人聲如沸争群。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,683評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽换薄。三九已至玉雾,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間轻要,已是汗流浹背复旬。 一陣腳步聲響...
    開封第一講書人閱讀 32,838評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留冲泥,地道東北人驹碍。 一個月前我還...
    沈念sama閱讀 47,776評論 2 369
  • 正文 我出身青樓壁涎,卻偏偏與公主長得像,于是被迫代替她去往敵國和親志秃。 傳聞我的和親對象是個殘疾皇子怔球,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,652評論 2 354

推薦閱讀更多精彩內(nèi)容