UIImage और Base64 स्ट्रिंग के बीच कनवर्ट करें


224

किसी को पता है कि कैसे UIImageएक base64 स्ट्रिंग में परिवर्तित करने के लिए, और फिर इसे रिवर्स?

मेरे पास नीचे का कोड है; एन्कोडिंग से पहले मूल छवि अच्छी है, लेकिन मैं केवल एक खाली छवि प्राप्त करता हूं, जिसे मैं एन्कोड और डीकोड करता हूं।

NSData *imageData = UIImagePNGRepresentation(viewImage);

NSString *b64EncStr = [self encode: imageData];

NSString *base64String = [self encodeBase64:imageData];

इसे आज़माएँ: github.com/l4u/NSData-Base64

क्या कोई इस सवाल का जवाब दे सकता है: stackoverflow.com/questions/39657434/…
user3011809

जवाबों:


575

तीव्र

पहले हमें इमेज की 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)!

स्विफ्ट 2.0> एन्कोडिंग

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

स्विफ्ट 2.0> डिकोडिंग

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

स्विफ्ट 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

स्विफ्ट 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 का उपयोग करेंencodingdecoding



1
@Safecase मैं वह व्यक्ति नहीं था जिसने आपको वोट दिया था, लेकिन संभवतः डबल पोस्ट अपराध है?
टॉमी

1
ऐसा नहीं है, लेकिन मैं इस सवाल का सही जवाब देना चाहता था
परेश नवदिया

2
Base64कक्षा हमेशा के लिए सोती है, मैं हमेशा काफी एक्सकोड को मजबूर करता हूं अगर मैं छवि गुणवत्ता को 0.001f करने के बाद भी इसका उपयोग करता हूं
shebelaw

6
महत्वपूर्ण नोट: सुनिश्चित करें कि आपके बेस 64 स्ट्रिंग में प्रदर्शित करने के लिए ब्राउज़र पर आवश्यक उपसर्ग शामिल नहीं है, जैसेdata:image/jpeg;base64,
टायलर शीफ़र

2
@TylerSheaffer मुझे लगता है कि यह एक महत्वपूर्ण संदेश है, जिसे उत्तर में शामिल किया जाना चाहिए।
टाइमलेस

33

स्विफ्ट 4.2 एक्सटेंशन विधि

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

XCode 9.1 और स्विफ्ट 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)!
}

19

स्विफ्ट 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

आशा है कि यह मदद करता है धन्यवाद।


19

स्विफ्ट 5

एन्कोडिंग

func convertImageToBase64String (img: UIImage) -> String {
    return img.jpegData(compressionQuality: 1)?.base64EncodedString() ?? ""
}

डिकोडिंग

func convertBase64StringToImage (imageBase64String:String) -> UIImage {
    let imageData = Data.init(base64Encoded: imageBase64String, options: .init(rawValue: 0))
    let image = UIImage(data: imageData!)
    return image!
}

नोट: Xcode 10.2 में परीक्षण किया गया

स्विफ्ट 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 में परीक्षण किया गया


मेरे उत्तर पर टिप्पणी के लिए धन्यवाद, क्या आप कृपया मेरे उत्तर को वोट कर सकते हैं, यह मेरे लिए बहुत उपयोगी है।
विवेक

11

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

8

स्विफ्ट 3.0

छवि को बेस 64 स्ट्रिंग में बदलने के लिए

खेल के मैदान में परीक्षा दी

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

7
@implementation UIImage (Extended)

- (NSString *)base64String {
    NSData * data = [UIImagePNGRepresentation(self) base64EncodedDataWithOptions:NSDataBase64Encoding64CharacterLineLength];
    return [NSString stringWithUTF8String:[data bytes]];
}

@end

1
सरल और सुरुचिपूर्ण। इसे प्यार करना!
मीकैसिक

7

तेजी से 2.0 में इस विस्तार का उपयोग करें (जोनास फ्रांज के लिए क्रेडिट)

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

5

स्विफ्ट 3.0 और एक्सकोड 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

4

स्विफ्ट एक्सटेंशन:

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

2.2 के लिए, .allZeros संकलन नहीं किया। इसलिए मैंने रिटर्न इमेज का उपयोग किया। Dase.base64EncodedStringWithOptions (NSDataBase64EncodingOptions (rawValue: 0))
कार्ल स्मिथ

AllZero के बजाय Encoding64CharacterLineLength का उपयोग करें
जोनास फ्रांज

1
im switft3 का उपयोग कर, सर्वर पर भेजने में असमर्थ:let imageData = UIImagePNGRepresentation(ImageView.image!); let strBase64:String = imageData!.base64EncodedString()
Cmag

@ मुझे पता है कि आपकी टिप्पणी 2 साल पुरानी है लेकिन क्या आपने इसे ठीक करने का प्रबंधन किया है?
ज़ून

@ZUNJAE मैं डरता हूँ मुझे याद नहीं है कि मैंने इसे कैसे तय किया है, समाधान तक पहुँच नहीं है
Cmag

3

स्विफ्ट 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)
    }
}

3

स्विफ्ट 5।

class ImageConverter {

    func base64ToImage(_ base64String: String) -> UIImage? {
        guard let imageData = Data(base64Encoded: base64String) else { return nil }
        return UIImage(data: imageData)
    }

    func imageToBase64(_ image: UIImage) -> String? {
        return image.jpegData(compressionQuality: 1)?.base64EncodedString()
    }

}

2

स्विफ्ट संस्करण - छवि के लिए बेस 64 बनाएं

मेरी राय में, अनप्लग किए गए मामले में वैकल्पिक वैकल्पिक UIImagePNGRepresenatation()सुरक्षित नहीं है, इसलिए मैं नीचे दिए गए एक्सटेंशन का उपयोग करने की सलाह देता हूं:

extension UIImage {

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

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)
    }
}

1

स्विफ्ट 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!

}

1

मैंने सभी समाधानों की कोशिश की, किसी ने भी मेरे लिए काम नहीं किया (स्विफ्ट 4 का उपयोग करके), यह समाधान है जो मेरे लिए काम करता है, अगर भविष्य में कोई भी उसी समस्या का सामना करता है।

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

yourImage.image = decodedimage

मैंने कई समाधानों के लिए भी प्रयास किया, यह समाधान मेरे अगले कई घंटों को बचाता है
अहमद

1

स्विफ्ट 4.2 | Xcode 10

extension UIImage {

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


1
//convert Image to Base64 (Encoding)

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

print(strBase64)

// convert Base64 to Image (Decoding)

let dataDecoded:NSData = NSData(base64EncodedString: strBase64, options: NSDataBase64DecodingOptions(rawValue: 0))!

let decodedimage:UIImage = UIImage(data: dataDecoded)!

print(decodedimage)

yourImageView.image = decodedimage

0

IOS 7+ के लिए, ऑब्जेक्टिव-सी, यहां बताया गया है कि इमेज URL से रूपांतरण कैसे शुरू करें:

NSURL *url = [NSURL URLWithString:self.groove.thumbnailURL];

UIImage *image = [UIImage imageWithData:[NSData dataWithContentsOfURL:url]];

NSString *base64String = [UIImagePNGRepresentation(image)
base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength];

0

स्विफ्ट 3.0 और एक्सकोड 8.0

let imageData = UIImageJPEGRepresentation(imageView.image!, 1)

    let base64String = (imageData! as Data).base64EncodedString(options: NSData.Base64EncodingOptions(rawValue: 0))
    print(base64String)

0

Base64 कोड के लिए जैसे:

"डेटा: image / जेपीजी, बेस 64, iVBORw0KGgoAAAANSUhEUgAAAMgAAADIAQAAAACFI5MzAAAB9klEQVR42u2YQYorMQxEBbqWQFc36FoG / 6pyOpNZ / J20mGGaTiftF2hbLpWU2PnfYX / k55Jl5vhUVTu8luUdaCeFcydejjdwDUyQ5XV2JOcSZnkHZgiejusK51QGycrl2yIR1BwjjKivSFz8YC7fY91GKIj6PL5pp4 / wWL54t3MHt / AjFxoJwmkYwosbh6 / UEHE817hvi / vGex8gEkTdVRo1 / 55BM7kjUIgpoMW1DxB6kD + GtCX4PUFws40OwcUm0 / lRYjOB3pG9YcguBFQuO0ISJ9UIrUP5CKy / MriXHDkETYmLDax1 + RkgWBglQgUyq6T / HCAHBq7iJHd9KWWAlIKoGpiLc6HNDhDkETNYwqeVhym72snKKxA6BJL4UPM5QPYtgGwZeNZ5O0UvgSb0VGdcmVfJCQwQrM + pRiGnYJ497SUlv2NOYfOCX3qU2Equ7W3JAslsN7oDBDWWojcZq + KbEwQRdRYl1wD3ML52rpGc6w24qCXaKh4DRHWJbUPemqtEGyBMKC4Q / QmWiDWzRxkgO1UtSLh3svMaILeDpEGwrwvZ4Bkg9LynK1Y1LJWQdqKGnm3K7VTCz7vS9hIuUyYRd / xKcYRIHGqAViisQ4S / Uozmqo41Pn6bNRI1xS / fk2fMEKpDZYkpjP6B1T0HyN9 / नायब + M / AORXDdE4Lb / mQAAAABJRU5ErkJggg == "

Swift5.0 कोड का उपयोग करें:

func qrcodeImage(_ base64: String) -> UIImage? {
    if let url = URL(string: base64) {
        if let data = try? Data(contentsOf: url) {
            return UIImage(data: data)
        }
    }
    return nil
}

0

यह समझने के लिए बहुत अच्छा है कि आप उपसर्ग पास करें जैसा कि टायलर शेफ़र ने बताया था। लेकिन किसी कारण से आपको इस उपसर्ग की आवश्यकता हो सकती है जो बेस 64 स्ट्रिंग की शुरुआत में माइम-प्रकार का वर्णन करता है, इसलिए मैं कोड के इस टुकड़े को एन्कोडिंग से पहले कुछ विकल्प पारित करने का सुझाव देता हूं ( स्विफ्ट 5 ):

extension UIImage {

    enum Format: String {
        case png = "png"
        case jpeg = "jpeg"
    }

    func toBase64(type: Format = .jpeg, quality: CGFloat = 1, addMimePrefix: Bool = false) -> String? {
        let imageData: Data?
        switch type {
        case .jpeg: imageData = jpegData(compressionQuality: quality)
        case .png:  imageData = pngData()
        }
        guard let data = imageData else { return nil }

        let base64 = data.base64EncodedString(options: Data.Base64EncodingOptions.lineLength64Characters)

        var result = base64
        if addMimePrefix {
            let prefix = "data:image/\(type.rawValue);base64,"
            result = prefix + base64
        }
        return result
    }
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.