2011-01-07 3 views
91

[UIImage imageWithdata:] 또는 [UIImage initWithData] 메서드를 사용하여 NSData에서 UIImage를 만들 수 있습니다.UIImage에서 기본 NSData * 가져 오기

기존 UIImage *에서 NSData *를 얻을 수 있을지 궁금합니다.
행의 무언가 NSData* myData = [myImage getData];

이것은 불가능합니까?
는 PNG 형식 또는 JPG 형식의 데이터를 원하는 경우

답변

173
NSData *imageData = UIImageJPEGRepresentation(image, 0.7); // 0.7 is JPG quality 

또는

NSData *imageData = UIImagePNGRepresentation(image); 

따라 감사드립니다.

+62

왜이 답변이 여러 번 투표에 올랐거나 받아 들여지지는 모르겠다. OP는 처음에 제공된 데이터를 검색하도록 요청했습니다.'UIImageJPEGRepresentation' 또는'UIImagePNGRepresentation' **을 사용하면 ** 데이터가 변경되고 재 변환됩니다. 요청한 것을 실제로 달성 할 수있는 방법이 있습니까? – CipherCom

+5

이미 손실 형식 인 경우 이미지 품질이 저하되므로이 대답은 좋지 않습니다. – 1dayitwillmake

+0

@CipherCom 정확한 데이터를 다시 원한다는 말을 듣고 있습니다. 그러나, 나는 질문을 가로 질러 오는 사람들의 대다수를 위해,이 응답은 그들의 필요를 위해 완벽 할 것이다 ... 그러므로 upvotes 생각한다. 원래 데이터를 다시 얻으려는 응답을 발견하면 공유하십시오;) – tybro0103

-2

위와 같은 대답을 한 이후로 변경된 사항은 CipherCom의 우려 사항을 공유했기 때문에 계속 찾고 있습니다. iOS 5에 CIImage property이 추가되었습니다. 나는이 우연히 내가 신속한 좋아 :)

을하기 때문에

+0

CSImage를 사용하여 기본 NSData를 얻는 방법이 보이지 않습니다. 뭔가 빠졌습니까? – tybro0103

+4

이것은 도움이되지 않습니다. ''CIImage'' 속성은''imageWithCIImage :''로 초기화 된 경우에만 설정됩니다. 또한 이것은 사용 된 데이터가 아니라 다른 이미지 표현 객체입니다. – CipherCom

3

여기 Caroiline의 게시물의 빠른 번역입니다.

var imageData = UIImagePNGRepresentation(image) 

또는

var imageData = UIImageJPEGRepresentation(image, 0.7) 
+0

질문이 신속하지 않았습니다. –

4

당신은있는 UIImage가 (PNG 또는 JPEG 형식으로 아마 인)하지만 가능성이 디스플레이 용으로 포맷 된 객체이며, 그래서 원래의 데이터를 사용하지 않을 것을 예상 할 수있다 픽셀 배열 또는 다른 내부 형식. 즉 UIImage(data: foo)foo을 보유하지 않습니다.

  1. 당신은 당신의 프로그램에서 다른 곳을 사용하려는 경우, 원래있는 UIImage가 (내가 그 사실 여기 그렇지 않다 추정) 잘 할 것

  2. 의 경우에는 직렬화하려면, UIImagePNGRepresentation(...)가 작동하지만 원본이 JPEG 인 경우 크기가 커집니다. UIImageJPEGRepresentation(...)은 대개 약간 큰 데이터를 생성하며 원본이 PNG 인 경우 약간 손실이 발생합니다. 이미지가 표시되는 방식과 제공 될 것으로 예상되는 형식에 따라 이미지를 선택해야합니다. PNG를 PNG로 사용하려는 경우 좋은 파일 크기와 거의 동일한 데이터, 특수 PNG 청크를 따로 가져야합니다.

  3. 원본 데이터의 정확한 사본을 얻고 싶다면 (미리보기를 만든 후 파일을 저장하거나 SHA1에 저장하려는 경우) 별도로 보관해야합니다. init(data: originalData)UIImage 객체를 초기화하는 경우 originalData가 내부 형식의 어떤 종류의 원시 데이터로 변환됩니다,

    var image:UIImage 
    var imageData:NSData { 
        didSet { 
         image = UIImage(data: imageData) 
        } 
    } 
    
0

: 당신은 뭔가를 할 수 있습니다. 이러한 데이터는 그러나

let rawData = myImage.cgImage?.dataProvider?.data as Data? 

rawData 원시 유사하므로 UIImagePNGRepresentation를 사용하는 경우보다 크게하려고 나중에 검색 될 수있다.

관련 문제