[objective-c] UIImage를 NSData로 변환

내 앱에서이 코드를 사용하여 이미지를 보내는 데 도움이됩니다.

그러나 이미지가있는 이미지보기가 있습니다. appbundle에 파일이 없지만 내 측면에 이미지가 있습니다. 아래 코드를 어떻게 변경합니까? 내가 변환 할 수 있습니다 누군가는 어떻게 말해 줄 수 myimageNSData?

// 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 픽셀의 저수준 표현을 제공합니다. CFBridgingReleaseARC를 사용하지 않는 경우 비트를 생략하십시오 .


답변

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 블록 안에 넣고 다른 스레드에서 실행하여 프로세스 중에 UIActivityIndicatorView를 보여줄 수 있습니다 …

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

참조 NSData를 전달 하여 변환하고 UIImage부동 소수점 값으로 압축 품질을 제공하십시오.

NSData *imgData = UIImageJPEGRepresentation(rainyImage, 0.9);


답변

Swift 4의 솔루션

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


답변

UIImagePNGRepresentation 함수는 선택적 값을 반환하므로 앱 충돌 및 코드의 안전한 실행을 방지하기 위해 데이터와 함께 if-let 블록을 사용하십시오.

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

참고 : 데이터 는 Swift 3 클래스입니다. Swift 3에서 NSData 대신 Data 사용

일반 이미지 작업 (예 : 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];
    }