it-swarm.com.de

konvertieren Sie UIImage in NSData

Ich verwende diesen Code in meiner App, der mir hilft, ein Bild zu senden.

Ich habe jedoch eine Bildansicht mit einem Bild. Ich habe keine Datei in appbundle, aber ich habe das Bild auf meiner Seite. Wie kann ich den Code unten ändern? Kann mir jemand sagen, wie ich myimage in NSData konvertieren kann?

// Attach an image to the email
NSString *path = [[NSBundle mainBundle] pathForResource:@"rainy" ofType:@"jpg"];
NSData *myData = [NSData dataWithContentsOfFile:path];
[picker addAttachmentData:myData mimeType:@"image/jpeg" fileName:@"rainy"];
169
Christina

Probieren Sie je nach Bildformat einen der folgenden Schritte aus:

UIImageJPEGRepräsentation

Gibt die Daten für das angegebene Bild im JPEG-Format zurück.

NSData * UIImageJPEGRepresentation (
   UIImage *image,
   CGFloat compressionQuality
);

UIImagePNGRepräsentation

Gibt die Daten für das angegebene Bild im PNG-Format zurück

NSData * UIImagePNGRepresentation (
   UIImage *image
);

Hier die Dokumente .

BEARBEITEN:

wenn Sie auf die rohen Bytes des UIImage zugreifen möchten, können Sie diesen Ansatz verwenden:

CGDataProviderRef provider = CGImageGetDataProvider(image.CGImage);
NSData* data = (id)CFBridgingRelease(CGDataProviderCopyData(provider));
const uint8_t* bytes = [data bytes];

Dadurch erhalten Sie die Low-Level-Darstellung der RGB-Pixel des Bildes. (Lassen Sie das CFBridgingRelease-Bit aus, wenn Sie nicht ARC verwenden).

286
sergio
NSData *imageData = UIImagePNGRepresentation(myImage.image);
157
Radix

Wenn Sie ein Bild in einer UIImageView haben, z. "myImageView" können Sie Folgendes tun:

Konvertieren Sie Ihr Bild mit UIImageJPEGRepresentation () oder UIImagePNGRepresentation () wie folgt:

NSData *data = UIImagePNGRepresentation(myImageView.image);
//or
NSData *data = UIImageJPEGRepresentation(myImageView.image, 0.8);
//The float param (0.8 in this example) is the compression quality 
//expressed as a value from 0.0 to 1.0, where 1.0 represents 
//the least compression (or best quality).

Sie können diesen Code auch in einen GCD-Block einfügen und in einem anderen Thread ausführen, wobei während des Prozesses ein UIActivityIndicatorView angezeigt wird.

//*code to show a loading view here*

dispatch_queue_t myQueue = dispatch_queue_create("com.my.queue", DISPATCH_QUEUE_SERIAL);

dispatch_async(myQueue, ^{ 

    NSData *data = UIImagePNGRepresentation(myImageView.image);
    //some code....

    dispatch_async( dispatch_get_main_queue(), ^{
        //*code to hide the loading view here*
    });
});
25
FormigaNinja

Erstellen Sie die Referenz des Bildes ....

UIImage *rainyImage = [UIImage imageNamed:@"rainy.jpg"];

anzeige des Bildes in der Bildansicht ... Imagedisplay ist eine Referenz der Bildansicht:

imagedisplay.image = rainyImage;

konvertieren Sie es in NSData, indem Sie UIImage übergeben und geben Sie die Kompressionsqualität in Float-Werten an:

NSData *imgData = UIImageJPEGRepresentation(rainyImage, 0.9);
24
Jemythehigh

Lösung in Swift 4

extension UIImage {
    var data : Data? {
      return cgImage?.dataProvider?.data as Data?
    }
}
2

Verwenden Sie den if-let-Block mit Data, um den Absturz der App und die sichere Ausführung von Code zu verhindern, da die Funktion UIImagePNGRepresentation einen optionalen Wert zurückgibt. 

if let img = UIImage(named: "TestImage.png") {
    if let data:Data = UIImagePNGRepresentation(img) {
       // Handle operations with data here...         
    }
}

Hinweis: Daten ist Swift 3 Klasse. Verwenden Sie Daten anstelle von NSData mit Swift 3

Generische Bildoperationen (wie png & jpg beide):

if let img = UIImage(named: "TestImage.png") {  //UIImage(named: "TestImage.jpg")
        if let data:Data = UIImagePNGRepresentation(img) {
               handleOperationWithData(data: data)     
        } else if let data:Data = UIImageJPEGRepresentation(img, 1.0) {
               handleOperationWithData(data: data)     
        }
}

*******
func handleOperationWithData(data: Data) {
     // Handle operations with data here...
     if let image = UIImage(data: data) {
        // Use image...
     }
}

Mit der Erweiterung:

extension UIImage {

    var pngRepresentationData: Data? {
        return UIImagePNGRepresentation(img)
    }

    var jpegRepresentationData: Data? {
        return UIImageJPEGRepresentation(self, 1.0)
    }
}

*******
if let img = UIImage(named: "TestImage.png") {  //UIImage(named: "TestImage.jpg")
      if let data = img.pngRepresentationData {
              handleOperationWithData(data: data)     
      } else if let data = img.jpegRepresentationData {
              handleOperationWithData(data: data)     
     }
}

*******
func handleOperationWithData(data: Data) {
     // Handle operations with data here...
     if let image = UIImage(data: data) {
        // Use image...
     }
}
1
Krunal
- (void) imageConvert
{
     UIImage *snapshot = self.myImageView.image;
     [self encodeImageToBase64String:snapshot];
}    


call this method for image convert in base 64 
    -(NSString *)encodeImageToBase64String:(UIImage *)image
    {
        return [UIImagePNGRepresentation(image) base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength];
    }
0
jayesh mardiya