답변:
NSData *imageData = UIImageJPEGRepresentation(image, 0.7); // 0.7 is JPG quality
또는
NSData *imageData = UIImagePNGRepresentation(image);
데이터를 PNG 형식 또는 JPG 형식으로 원하는지 여부에 따라 다릅니다.
초기화하는 경우 UIImage
와 물체 init(data: originalData)
, originalData
내부 포맷 일종의 원 데이터 (raw data)로 변환 될 것이다. 이러한 데이터는 나중에 검색 할 수 있습니다.
let rawData = myImage.cgImage?.dataProvider?.data as Data?
그러나 rawData
는 원시 이기 때문에 를 사용할 때보 다 훨씬 더 커질 것 UIImagePNGRepresentation
입니다.
UIImage는 표시 용으로 형식이 지정된 개체이므로 원본 데이터 (아마도 PNG 또는 JPEG 형식)를 사용하지 않지만 픽셀 배열 또는 기타 내부 형식 일 가능성이 높습니다. 즉, UIImage(data: foo)
은 유지되지 않습니다 foo
.
프로그램의 다른 곳에서 사용하고 싶다면 원래 UIImage가 잘 작동합니다 (실제로는 그렇지 않다고 가정합니다)
직렬화하려는 경우 UIImagePNGRepresentation(...)
작동하지만 원본이 JPEG이면 크기가 커집니다. UIImageJPEGRepresentation(...)
종종 약간 큰 데이터가 생성되며 원본이 PNG 인 경우 약간 손실됩니다. 이미지가 표시되는 방식과 제공 될 것으로 예상되는 형식에 따라 하나를 선택하는 것이 좋습니다. PNG를 사용 중이고 PNG를 내보내려면 좋은 파일 크기와 거의 동일한 데이터, 특수 PNG 청크는 제쳐두고 있어야합니다.
원본 데이터의 정확한 사본을 얻으려면 (예 : 축소판으로 파일을 저장하거나 SHA1에 저장) 별도로 보관해야합니다. 다음과 같이 할 수 있습니다.
var image:UIImage
var imageData:NSData {
didSet {
image = UIImage(data: imageData)
}
}
스위프트 4.2
let dataPng = image.pngData() // return image as PNG. May return nil if image has no CGImageRef or invalid bitmap format
let dataJpg = image.jpegData(compressionQuality: 1) // return image as JPEG. May return nil if image has no CGImageRef or invalid bitmap format. compression is 0(most)..1(least)
CipherCom의 우려를 공유하기 때문에 여전히 찾고있는 사람들을 위해 위의 답변이 제공된 이후 상황이 변경되었습니다 .iOS 5는 CIImage 속성을 추가 했습니다 .
CIImage
은로 초기화 된 경우에만 설정됩니다 imageWithCIImage:
. 또한 이것은 직접 사용되는 데이터가 아니라 다른 이미지 표현 객체입니다.
UIImageJPEGRepresentation
또는UIImagePNGRepresentation
것입니다 데이터를 변경하고 재 변환을한다. 요청한 것을 실제로 달성 할 수있는 방법이 있습니까?