圖片base64 編碼 iOS
阿新 • • 發佈:2018-12-15
/** * 壓縮圖片到指定檔案大小 * * @param image 目標圖片 * @param size 目標大小(最大值) * * @return 返回的圖片檔案 */ - (NSData *)zh_compressOriginalImage:(UIImage *)image toMaxDataSizeKBytes:(CGFloat)size { NSData *data = UIImageJPEGRepresentation(image, 1.f); CGFloat dataKBytes = data.length / 1000.f; CGFloat maxQuality = .9f; CGFloat lastData = dataKBytes; while (dataKBytes > size && maxQuality > .01f) { maxQuality -= .01f; data = UIImageJPEGRepresentation(image, maxQuality); dataKBytes = data.length / 1000.f; NSLog(@"當前圖片大小:%fKB", dataKBytes); if (lastData == dataKBytes) { break; } else { lastData = dataKBytes; } } return data; } //圖片base64編碼後的處理,// 由於字串中會有“+”,“+”上傳到伺服器會變空格,此處用了支付寶支付時帶的編碼方法 - (NSString *)encode:(NSString *)str { return (__bridge_transfer NSString*)CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (__bridge CFStringRef)str, NULL, (__bridge CFStringRef)@"!*'();:@&=+$,/?%#[]", kCFStringEncodingUTF8 ); }
呼叫方法並進行base64編碼
NSData *imageData = [ShowTool zh_compressOriginalImage:image toMaxDataSizeKBytes:80.f]; CGFloat len = [imageData length] / 1000.f; if (len > 100.f){ [ShowTool showHud:@"圖片過大請手動輸入" view:self.view]; return; } // base64編碼 NSString *imageBase64Str = [imageData base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength]; imageBase64Str = [ShowTool encode:imageBase64Str];