簡體   English   中英

NSData和UIImage

[英]NSData and UIImage

我試圖從NSData加載UIImage對象,示例代碼是NSImage ,我猜他們應該是相同的。 但是剛剛加載圖像,我想知道什么是最好的解決UIImage加載NSData問題。

我之前沒有嘗試過UIImageJPEGRepresentation() ,但UIImagePNGRepresentation對我來說很好, NSDataUIImage之間的轉換很簡單:

NSData *imageData = UIImagePNGRepresentation(image);
UIImage *image=[UIImage imageWithData:imageData];

UIImage有一個 - initWithData:方法。 從文檔:“數據參數中的數據必須格式化,以匹配系統支持的圖像類型之一的文件格式。”

試試這個將圖像轉換為NSdata:

UIImage *img = [UIImage imageNamed:@"image.png"];
NSData *data1 = UIImagePNGRepresentation(img);

theData應該是一個已經包含數據的NSData對象。 在使用之前,您需要將文件加載/下載到NSData對象。 您可以使用Data上的NSLog檢查它,看它是否包含有效數據。

為了安全執行代碼,使用帶有Data的if-let塊,因為函數UIImagePNGRepresentation返回,可選值。

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

注意: 數據是Swift 3類。 在Swift 3中使用Data而不是NSData

通用圖像操作(如png和jpg):

if let img = UIImage(named: "Hello.png") {
        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...
     }
}

通過使用擴展名:

extension UIImage {

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

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

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM