首页 文章

在UIImage和Base64字符串之间转换

提问于
浏览
187

有谁知道如何将 UIImage 转换为Base64字符串,然后反转它?

我有以下代码;编码之前的原始图像是好的,但在编码和解码后我只得到一个空白图像 .

NSData *imageData = UIImagePNGRepresentation(viewImage);

NSString *b64EncStr = [self encode: imageData];

NSString *base64String = [self encodeBase64:imageData];

19 回答

  • 19

    斯威夫特 - 扩展:

    extension UIImage{
         func toBase64() -> String{
              var imageData = UIImagePNGRepresentation(self)
              return imageData.base64EncodedStringWithOptions(.allZeros)
         }
    }
    
  • 0

    斯威夫特

    First we need to have image's 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 > Encoding

    let strBase64:String = imageData.base64EncodedStringWithOptions(.Encoding64CharacterLineLength)
    

    Swift 2.0 > Decoding

    let dataDecoded:NSData = NSData(base64EncodedString: strBase64, options: NSDataBase64DecodingOptions.IgnoreUnknownCharacters)!
    

    Swift 3.0 > Decoding

    let dataDecoded : Data = Data(base64Encoded: strBase64, options: .ignoreUnknownCharacters)!
    

    Encoding

    let strBase64 = imageData.base64EncodedString(options: .lineLength64Characters)
    print(strBase64)
    

    Decoding

    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
    

    Objective-C

    iOS7>版本

    你可以使用 NSData's base64EncodedStringWithOptions

    Encoding

    - (NSString *)encodeToBase64String:(UIImage *)image {
     return [UIImagePNGRepresentation(image) base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength];
    }
    

    Decoding

    - (UIImage *)decodeBase64ToImage:(NSString *)strEncodeData {
      NSData *data = [[NSData alloc]initWithBase64EncodedString:strEncodeData options:NSDataBase64DecodingIgnoreUnknownCharacters];
      return [UIImage imageWithData:data];
    }
    

    iOS 6.1和<版本

    First Option :使用this链接到 encodedecode image

    project 中添加Base64类 .

    Encoding

    NSData* data = UIImageJPEGRepresentation(yourImage, 1.0f);
     NSString *strEncoded = [Base64 encode:data];
    

    Decoding

    NSData* data = [Base64 decode:strEncoded ];;
     image.image = [UIImage imageWithData:data];
    

    Another Option :使用QSUtilities表示 encodingdecoding


  • 6

    Swift 4.2 Extension method

    extension UIImage {
        func toBase64() -> String? {
            guard let imageData = self.pngData() else { return nil }
            return imageData.base64EncodedString(options: Data.Base64EncodingOptions.lineLength64Characters)
        }
    }
    

    XCode 9.1 and Swift 4.0

    //
    // Convert UIImage to a base64 representation
    //
    class func convertImageToBase64(image: UIImage) -> String {
        let imageData = UIImagePNGRepresentation(image)!
        return imageData.base64EncodedString(options: Data.Base64EncodingOptions.lineLength64Characters)
    }
    
    //
    // Convert a base64 representation to a UIImage
    //
    class func convertBase64ToImage(imageString: String) -> UIImage {
        let imageData = Data(base64Encoded: imageString, options: Data.Base64DecodingOptions.ignoreUnknownCharacters)!
        return UIImage(data: imageData)!
    }
    
  • 535

    SWIFT 3.0, XCODE 8.0

    用您的URL替换String . 和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
    

    希望它有助于谢谢 .

  • 11

    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
    
  • 1
    @implementation UIImage (Extended)
    
    - (NSString *)base64String {
        NSData * data = [UIImagePNGRepresentation(self) base64EncodedDataWithOptions:NSDataBase64Encoding64CharacterLineLength];
        return [NSString stringWithUTF8String:[data bytes]];
    }
    
    @end
    
  • 0

    Swift 3.0

    将图像转换为base64字符串

    Tested in playground

    var logo = UIImage(named: "image_logo")
        let imageData:Data =  UIImagePNGRepresentation(logo)
        let base64String = imageData.base64EncodedString()
        print(base64String)
    
  • 7

    在swift 2.0中使用此扩展名(致Jonas Franz)

    extension UIImage{
      func toBase64() -> String{
        let imageData = UIImagePNGRepresentation(self)!
        return imageData.base64EncodedStringWithOptions(.Encoding64CharacterLineLength)
      }
    }
    
  • 1

    在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
    
  • 20

    斯威夫特4

    Encoding

    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
    }
    

    Decoding

    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中测试

  • 2

    Swift 4

    enum ImageFormat {
        case png
        case jpeg(CGFloat)
    }
    
    extension UIImage {
        func base64(format: ImageFormat) -> String? {
            var imageData: Data?
    
            switch format {
            case .png: imageData = UIImagePNGRepresentation(self)
            case .jpeg(let compression): imageData = UIImageJPEGRepresentation(self, compression)
            }
    
            return imageData?.base64EncodedString()
        }
    }
    
    extension String {
        func imageFromBase64() -> UIImage? {
            guard let data = Data(base64Encoded: self) else { return nil }
    
            return UIImage(data: data)
        }
    }
    
  • 4
    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)
        }
    }
    
  • 0

    Swift version - create base64 for image

    在我看来,在 UIImagePNGRepresenatation() 的情况下Implicitly Unwrapped可选是不安全的,所以我建议使用如下的扩展名:

    extension UIImage {
    
        func toBase64() -> String? {
            let imageData = UIImagePNGRepresentation(self)
            return imageData?.base64EncodedStringWithOptions(NSDataBase64EncodingOptions.Encoding64CharacterLineLength)
        }
    }
    
  • 1

    In 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!
    
    }
    
  • 7

    Swift 4.2 | Xcode 10

    extension UIImage {
    
        /// EZSE: Returns base64 string
        public var base64: String {
            return self.jpegData(compressionQuality: 1.0)!.base64EncodedString()
        }
    }
    
  • 4

    对于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];
    
  • 1

    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)
    
  • 0

    我尝试了所有的解决方案,没有一个适合我(使用Swift 4),这是适合我的解决方案,如果将来任何人都面临同样的问题 .

    let temp = base64String.components(separatedBy: ",")
    let dataDecoded : Data = Data(base64Encoded: temp[1], options: 
     .ignoreUnknownCharacters)!
    let decodedimage = UIImage(data: dataDecoded)
    
    yourImage.image = decodedimage
    
  • 5

    Swift 4.2, Xcode 10.1

    让imageData = UIImage(命名为:“imagename”) . pngData()?. base64EncodedString(options:.lineLength64Characters)

    打印(为imageData)

相关问题