Преобразование между строкой UIImage и Base64
кто-нибудь знает, как преобразовать UIImage
в строку Base64,а затем отменить его?
у меня есть ниже код; исходное изображение перед кодированием хорошо, но я получаю только пустое изображение после того, как я кодирую и декодирую его.
NSData *imageData = UIImagePNGRepresentation(viewImage);
NSString *b64EncStr = [self encode: imageData];
NSString *base64String = [self encodeBase64:imageData];
17 ответов:
Свифт
в первую очередь надо иметь изображения в формат NSData
//Use image name from bundle to create NSData let image : UIImage = UIImage(named:"imageNameHere")! //Now use image to create into NSData format let imageData:NSData = UIImagePNGRepresentation(image)! //OR next possibility //Use image's path to create NSData let url:NSURL = NSURL(string : "urlHere")! //Now use image to create into NSData format let imageData:NSData = NSData.init(contentsOfURL: url)!
Swift 2.0 > Кодировка
let strBase64:String = imageData.base64EncodedStringWithOptions(.Encoding64CharacterLineLength)
Swift 2.0 > Декодирование
let dataDecoded:NSData = NSData(base64EncodedString: strBase64, options: NSDataBase64DecodingOptions.IgnoreUnknownCharacters)!
Swift 3.0 > Декодирование
let dataDecoded : Data = Data(base64Encoded: strBase64, options: .ignoreUnknownCharacters)!
кодирование:
let strBase64 = imageData.base64EncodedString(options: .lineLength64Characters) print(strBase64)
декодирования:
let dataDecoded:NSData = NSData(base64EncodedString: strBase64, options: NSDataBase64DecodingOptions(rawValue: 0))! let decodedimage:UIImage = UIImage(data: dataDecoded)! print(decodedimage) yourImageView.image = decodedimage
Swift 3.0
let dataDecoded : Data = Data(base64Encoded: strBase64, options: .ignoreUnknownCharacters)! let decodedimage = UIImage(data: dataDecoded) yourImageView.image = decodedimage
С
ОС iOS7 > версия
можно использовать
NSData's
base64EncodedStringWithOptions
кодирование:
- (NSString *)encodeToBase64String:(UIImage *)image { return [UIImagePNGRepresentation(image) base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength]; }
декодирования:
- (UIImage *)decodeBase64ToImage:(NSString *)strEncodeData { NSData *data = [[NSData alloc]initWithBase64EncodedString:strEncodeData options:NSDataBase64DecodingIgnoreUnknownCharacters]; return [UIImage imageWithData:data]; }
iOS 6.1 и
Первый Вариант используйте этой ссылке
encode
иdecode
изображениядобавить Base64 класса в
project
.кодирование:
NSData* data = UIImageJPEGRepresentation(yourImage, 1.0f); NSString *strEncoded = [Base64 encode:data];
декодирования:
NSData* data = [Base64 decode:strEncoded ];; image.image = [UIImage imageWithData:data];
Другой Вариант используйте QSUtilities на
encoding
иdecoding
SWIFT 3.0, XCODE 8.0
заменить строку с URL. и testImage-это выход ImageView
// Put Your Image URL let url:NSURL = NSURL(string : "http://.jpg")! // It Will turn Into Data let imageData : NSData = NSData.init(contentsOf: url as URL)! // Data Will Encode into Base64 let str64 = imageData.base64EncodedData(options: .lineLength64Characters) // Now Base64 will Decode Here let data: NSData = NSData(base64Encoded: str64 , options: .ignoreUnknownCharacters)! // turn Decoded String into Data let dataImage = UIImage(data: data as Data) // pass the data image to image View.:) testImage.image = dataImage
Надеюсь, Что Это Поможет Спасибо.
XCode 9.1 и Swift 4.0
// // Convert String to base64 // class func convertImageToBase64(image: UIImage) -> String { let imageData = UIImagePNGRepresentation(image)! return imageData.base64EncodedString(options: Data.Base64EncodingOptions.lineLength64Characters) } // // Convert base64 to String // class func convertBase64ToImage(imageString: String) -> UIImage { let imageData = Data(base64Encoded: imageString, options: Data.Base64DecodingOptions.ignoreUnknownCharacters)! return UIImage(data: imageData)! }
Swift iOS8
// prgm mark ---- // convert images into base64 and keep them into string func convertImageToBase64(image: UIImage) -> String { var imageData = UIImagePNGRepresentation(image) let base64String = imageData.base64EncodedStringWithOptions(.allZeros) return base64String }// end convertImageToBase64 // prgm mark ---- // convert images into base64 and keep them into string func convertBase64ToImage(base64String: String) -> UIImage { let decodedData = NSData(base64EncodedString: base64String, options: NSDataBase64DecodingOptions(rawValue: 0) ) var decodedimage = UIImage(data: decodedData!) return decodedimage! }// end convertBase64ToImage
@implementation UIImage (Extended) - (NSString *)base64String { NSData * data = [UIImagePNGRepresentation(self) base64EncodedDataWithOptions:NSDataBase64Encoding64CharacterLineLength]; return [NSString stringWithUTF8String:[data bytes]]; } @end
в swift 2.0 используйте это расширение (кредит Йонасу Францу)
extension UIImage{ func toBase64() -> String{ let imageData = UIImagePNGRepresentation(self)! return imageData.base64EncodedStringWithOptions(.Encoding64CharacterLineLength) } }
Swift 3.0
для преобразования изображения в строку base64
протестировано на детской площадке
var logo = UIImage(named: "image_logo") let imageData:Data = UIImagePNGRepresentation(logo) let base64String = imageData.base64EncodedString() print(base64String)
в Swift 3.0 и Xcode 8.0
кодировка :
let userImage:UIImage = UIImage(named: "Your-Image_name")! let imageData:NSData = UIImagePNGRepresentation(userImage)! as NSData let dataImage = imageData.base64EncodedString(options: .lineLength64Characters)
декодирования :
let imageData = dataImage let dataDecode:NSData = NSData(base64Encoded: imageData!, options:.ignoreUnknownCharacters)! let avatarImage:UIImage = UIImage(data: dataDecode as Data)! yourImageView.image = avatarImage
Swift-Extension:
extension UIImage{ func toBase64() -> String{ var imageData = UIImagePNGRepresentation(self) return imageData.base64EncodedStringWithOptions(.allZeros) } }
Swift 4
кодирование
func ConvertImageToBase64String (img: UIImage) -> String { let imageData:NSData = UIImageJPEGRepresentation(img, 0.50)! as NSData //UIImagePNGRepresentation(img) let imgString = imageData.base64EncodedString(options: .init(rawValue: 0)) return imgString }
декодирования
func ConvertBase64StringToImage (imageBase64String:String) -> UIImage { let imageData = Data.init(base64Encoded: imageBase64String, options: .init(rawValue: 0)) let image = UIImage(data: imageData!) return image }
Примечание: протестировано в xcode 9.4.1
See my class - AppExtension.swift // MARK: - UIImage (Base64 Encoding) public enum ImageFormat { case PNG case JPEG(CGFloat) } extension UIImage { public func base64(format: ImageFormat) -> String { var imageData: NSData switch format { case .PNG: imageData = UIImagePNGRepresentation(self) case .JPEG(let compression): imageData = UIImageJPEGRepresentation(self, compression) } return imageData.base64EncodedStringWithOptions(.allZeros) } }
Swift версия-создать base64 для изображения
на мой взгляд неявно развернул необязательно в случае
UIImagePNGRepresenatation()
это не безопасно, поэтому я рекомендую использовать расширение, как показано ниже:extension UIImage { func toBase64() -> String? { let imageData = UIImagePNGRepresentation(self) return imageData?.base64EncodedStringWithOptions(NSDataBase64EncodingOptions.Encoding64CharacterLineLength) } }
В Swift 3.0
func decodeBase64(toImage strEncodeData: String) -> UIImage { let dataDecoded = NSData(base64Encoded: strEncodeData, options: NSData.Base64DecodingOptions.ignoreUnknownCharacters)! let image = UIImage(data: dataDecoded as Data) return image! }
для iOS 7+, Objective-C, вот как сделать преобразование, начиная с URL-адреса изображения:
NSURL *url = [NSURL URLWithString:self.groove.thumbnailURL]; UIImage *image = [UIImage imageWithData:[NSData dataWithContentsOfURL:url]]; NSString *base64String = [UIImagePNGRepresentation(image) base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength];
Swift 3.0 и Xcode 8.0
let imageData = UIImageJPEGRepresentation(imageView.image!, 1) let base64String = (imageData! as Data).base64EncodedString(options: NSData.Base64EncodingOptions(rawValue: 0)) print(base64String)
Я пробовал все решения, ни один не работал для меня (используя Swift 4), это решение, которое работало для меня, если кто-то в будущем сталкивается с той же проблемой.
let temp = base64String.components(separatedBy: ",") let dataDecoded : Data = Data(base64Encoded: temp[1], options: .ignoreUnknownCharacters)! let decodedimage = UIImage(data: dataDecoded) yourImage.image = decodedimage