2013-05-12 2 views
1

UIImageView가있는보기가 있습니다. jpg 또는 png 이미지 형식으로로드되었습니다. jpg 이미지 버전의 데이터 크기가 100k입니다. 그런 다음 NSKeyedArchiver를 사용하여 내 뷰를 파일에 저장했습니다. 파일 크기는 약 3MB가됩니다. 이미지의 png 버전을 사용하면 아카이브 된 파일은 여전히 ​​약 3MB입니다.로드 된 이미지가 포함 된 UIImageView가 포함 된 NSKeyedArchiver 파일 압축하기

그런 다음 zlib을 사용하여 아카이브 된 파일을 압축했습니다. 그러나 많은 효과가있는 것 같지 않습니다.

가능한 한 100k 영역을 닫으려고 다시 할 수있는 것은 무엇입니까?

BTW : UIWebView를 사용하여 이미지를로드 한 다음 이미지의 jpg 버전을 사용하면 보관 된 파일이 원본 jpg에 매우 가깝게 표시됩니다.

편집 : 매트의 대답은 나에게 아이디어를 준, 그래서 이것은 내가하고 결국 무엇 이었는가 :

참고 : 내 나는 arleady에 대한 NSData을 유지하기 위해 바르 만들기 UIImageView에

  1. 의 서브 클래스를 사용 이미지
  2. encodeWithCoder에 전화하기 전에 [super encodeWithCoder...]으로 전화하십시오. self.image = nil; 이미지를 복원 할 NSData 바르를 사용하여 initWithCoder 1.

에서 확인 인코딩에게 NSData IVAR을 1

  • 에 다시 저장 NSData를 사용하여 이미지 데이터에 self.image를 설정합니다.

  • +0

    3MB 이유는 압축되지 않은 *이기 때문에 의심의 여지가 없습니다. 소스 파일이 무엇인지는 중요하지 않습니다. 'UIImage'는 비트 맵 만 이해할 수 있으므로 저장하게됩니다. 매트가 말했듯이, 왜 이것을해야합니까? – borrrden

    +0

    이 경우 NSKeyedArchiver를 사용해야합니다. 하지만 내 편집을 참조하십시오. – user523234

    답변

    1

    키잉 아카이버가 필요하지 않습니다.

    이미지가 앱 내부에서 온 경우 이미지 파일이 이미 있으므로 저장하지 않아도됩니다. 이미지 이름을 보관하십시오.

    인터넷에서 가져온 이미지의 경우 원본 이미지를 파일로 저장하고 나중에 파일을 복구 할 수 있도록 파일에 경로를 보관할 수 있습니다. . 어떤 시점에서 100K였던 JPG 이미지가 있었으므로 캡처했을 때 그 순간에 캡처하지 않는 이유는 무엇입니까? 그것이 NSData로 도착했다면, 당신의 데이터가 있습니다. 그렇지 않은 경우 UIImageJPEGRepresentation으로 JPEG 데이터로 변환 할 수 있습니다. 어느 쪽이든 NSData는 파일에 직접 저장할 수 있습니다.

    이미지 데이터를 저장하고 나중에 읽을 수있는 유연하고 강력한 방법은 ImageIO 프레임 워크를 사용하는 것입니다.

    +0

    글쎄,이 경우 키잉 아카이버를 사용해야합니다 ...하지만 당신의 대답은 나에게 뭔가를 상기시켜주었습니다 ... NSData 그래서 나는 그것에 기초한 실행 가능한 해결책을 발견했습니다. 감사. 관심이 있다면 제 편집을보십시오. – user523234