簡體   English   中英

將UIImage轉換為NSData

[英]convert UIImage to NSData

我在我的應用程序中使用此代碼,這將幫助我發送圖像。

但是,我有一個帶圖像的圖像視圖。 我沒有appbundle文件,但我的身邊有圖像。 如何更改以下代碼? 任何人都可以告訴我如何將myimage轉換為NSData

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

請嘗試以下操作之一,具體取決於您的圖像格式:

UIImageJPEGRepresentation

以JPEG格式返回指定圖像的數據。

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

UIImagePNGRepresentation

以PNG格式返回指定圖像的數據

NSData * UIImagePNGRepresentation (
   UIImage *image
);

這里的文檔

編輯:

如果要訪問構成UIImage的原始字節,可以使用以下方法:

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

這將為您提供圖像RGB像素的低級表示。 (如果不使用ARC,則省略CFBridgingRelease位)。

NSData *imageData = UIImagePNGRepresentation(myImage.image);

如果你在UIImageView中有一個圖像,例如“myImageView”,你可以執行以下操作:

使用UIImageJPEGRepresentation()或UIImagePNGRepresentation()轉換圖像,如下所示:

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

您還可以將此代碼放在GCD塊中並在另一個線程中執行,在此過程中顯示UIActivityIndi​​catorView ...

//*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*
    });
});

創建圖像的引用....

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

在圖像視圖中顯示圖像... imagedisplay是imageview的參考:

imagedisplay.image = rainyImage;

通過傳遞UIImage引用將其轉換為NSData ,並以浮點值提供壓縮質量:

NSData *imgData = UIImageJPEGRepresentation(rainyImage, 0.9);

Swift 4中的解決方案

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

使用if-let阻止數據以防止應用程序崩潰和安全執行代碼,因為函數UIImagePNGRepresentation返回一個可選值。

if let img = UIImage(named: "TestImage.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: "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...
     }
}

通過使用擴展名:

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...
     }
}
- (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];
    }

暫無
暫無

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

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