ios 将 UIImage 转换为 NSData 并返回 UIImage

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/20013144/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-30 22:23:05  来源:igfitidea点击:

convert UIImage to NSData and back to UIImage

iosuiimagensdata

提问by user2769614

I have to populate table cell from database and images are on device. I've to store that image in imageDataObject, how to convert that UIImageto NSData. Please suggest, I tried many solution but it's not converting back that NSDatato UIImage.

我必须从数据库填充表格单元格,图像在设备上。我已经存储在图像imageDataObject,如何将其转换UIImageNSData。请建议,我尝试了许多解决方案,但它不转换回该NSDataUIImage

    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];

回答by James Glenn

To convert UIImageto NSData, use either UIImageJPEGRepresentation(UIImage *image, CGFloat compressionQuality)or UIImagePNGRepresentation(UIImage *image)

要转换UIImageNSData,请使用UIImageJPEGRepresentation(UIImage *image, CGFloat compressionQuality)UIImagePNGRepresentation(UIImage *image)

To convert NSDatato UIImage, use [UIImage imageWithData:imageData]

要转换NSDataUIImage,请使用[UIImage imageWithData:imageData]

So your example could look like this:

所以你的例子可能是这样的:

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];

References: 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

参考资料:https: //developer.apple.com/LIBRARY/IOS/documentation/UIKit/Reference/UIKitFunctionReference/Reference/reference.html https://developer.apple.com/Library/ios/documentation/UIKit/Reference/UIImage_Class /Reference/Reference.html

回答by Pradhyuman sinh

Try With this:

试试这个:

Use this for convert UIImageto NSData.

将此用于转换UIImageNSData.

  NSData *imagedata = UIImagePNGRepresentation(thumbnail);

Try this for image data convert back to UIImage

试试这个图像数据转换回 UIImage

  UIImage *image= [UIImage imageWithData:imagedata];

回答by Bilal Arslan

in Swift version:

在 Swift 版本中:

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

回答by Krunal

Use if-let block with Data to prevent app crash & safe execution of code, as function UIImagePNGRepresentation returns an optional value.

使用带有数据的 if-let 块来防止应用程序崩溃和安全执行代码,因为函数 UIImagePNGRepresentation 返回一个可选值。

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

Note: Datais Swift 3 class. Use Data instead of NSData with Swift 3

注意:数据是 Swift 3 类。在 Swift 3 中使用 Data 而不是 NSData

Generic image operations (like png & jpg both):

通用图像操作(如 png 和 jpg 两者):

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

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

回答by Vicky Prajapati

Convert Data from Image:

从图像转换数据:

Try JPEG or PNG representation depending on your image format:

根据您的图像格式尝试 JPEG 或 PNG 表示:

UIImageJPEGRepresentation

Returns the data for the specified image in JPEG format.

UIImageJPEG 表示

以 JPEG 格式返回指定图像的数据。

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

UIImagePNGRepresentation

Returns the data for the specified image in PNG format

UIImagePNG 表示

以PNG格式返回指定图像的数据

NSData * UIImagePNGRepresentation (
   UIImage *image
);

Example:

例子:

extension UIImage {

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

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

Use:

用:

let data = myImage.jpegRepresentationData
let data1 = myImage.pngRepresentationData

Convert Image from Data:

从数据转换图像:

let image = UIImage(data: data)