web-dev-qa-db-fra.com

convertir UIImage en NSData et revenir en UIImage

Je dois remplir la cellule de la base de données et les images sont sur le périphérique . Je dois stocker cette image dans imageDataObject, comment convertir cette UIImage en NSData. Suggérez-moi, j'ai essayé plusieurs solutions, mais cela ne convertit pas que NSData à UIImage.

    cell.textLabel.text = [[offlineImageListArray objectAtIndex:indexPath.row] imageName];
    UIImage *thumbnail = [self retrieveImageFromDevice:[[offlineImageListArray objectAtIndex:indexPath.row] imageName]];
    NSData* data = ??????????;
    ImageData *imageDataObject = [[ImageData alloc] initWithImageId:[[offlineImageListArray objectAtIndex:indexPath.row]imageId] 
    imageName:[[offlineImageListArray objectAtIndex:indexPath.row] imageName] imageData:data];
    [imagesArray addObject:imageDataObject];
9
user2769614

Pour convertir UIImage en NSData, utilisez UIImageJPEGRepresentation(UIImage *image, CGFloat compressionQuality) ou UIImagePNGRepresentation(UIImage *image)

Pour convertir NSData en UIImage, utilisez [UIImage imageWithData:imageData]

Donc, votre exemple pourrait ressembler à ceci:

cell.textLabel.text = [[offlineImageListArray objectAtIndex:indexPath.row] imageName];
UIImage *thumbnail = [self retrieveImageFromDevice:[[offlineImageListArray objectAtIndex:indexPath.row] imageName]];
NSData* data = UIImagePNGRepresentation(thumbnail);
ImageData *imageDataObject = [[ImageData alloc] initWithImageId:[[offlineImageListArray objectAtIndex:indexPath.row]imageId] imageName:[[offlineImageListArray objectAtIndex:indexPath.row] imageName] imageData:data];
[imagesArray addObject:imageDataObject];

Références: https://developer.Apple.com/LIBRARY/IOS/documentation/UIKit/Reference/UIKitFunctionReference/Reference/reference.htmlhttps://developer.Apple.com/Library/ ios/documentation/UIKit/Reference/UIImage_Class/Reference/Reference.html

18
James Glenn

Essayez avec ceci:

Utilisez ceci pour convertir UIImage à NSData.

  NSData *imagedata = UIImagePNGRepresentation(thumbnail);

Essayez ceci pour que les données d'image soient reconverties en UIImage

  UIImage *image= [UIImage imageWithData:imagedata];
9
Pradhyuman sinh

en version Swift:

    let imageData = UIImagePNGRepresentation(image!)!
    let imageFromData = UIImage(data: imageData)
3
Bilal Arslan

Utilisez le bloc if-let avec Data pour éviter toute blocage de l'application et une exécution en toute sécurité du code, car la fonction UIImagePNGRepresentation renvoie une valeur facultative. 

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

Remarque: Les données est Swift 3 classe. Utilisez Data au lieu de NSData avec Swift 3

Opérations d'image génériques (comme png et jpg à la fois):

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

En utilisant l'extension:

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...
     }
}
0
Krunal