iPhone 장치에서 압축할 때 libzip으로 인해 PNG 파일이 손상되지만 시뮬레이터에서는 압축되지 않음

StackOverflow https://stackoverflow.com/questions/1866885

  •  18-09-2019
  •  | 
  •  

문제

나는 어느 시점에서 zip 파일을 생성하고 zip에 XML 파일을 추가한 다음 동일한 아카이브에 여러 PNG 파일을 추가하는 프로젝트를 상속했습니다.시뮬레이터에서는 모든 것이 잘 작동하지만 장치 자체에서 동일한 코드를 실행할 때마다 결과 png 파일이 변경되어 Mac에서 열 때 열 수 없습니다.

여전히 png 파일로 보이지만 '손상된' 내보내기 파일은 실제 파일보다 약간 크고 16진수 덤프는 내용이 크게 다르다는 것을 보여줍니다.헤더는 보존되지만 ...

원래의:

00000000  89 50 4e 47 0d 0a 1a 0a  00 00 00 0d 49 48 44 52  |.PNG........IHDR|
00000010  00 00 00 6d 00 00 00 75  08 06 00 00 00 44 7d 6f  |...m...u.....D}o|
00000020  a0 00 00 00 19 74 45 58  74 53 6f 66 74 77 61 72  |?....tEXtSoftwar|
00000030  65 00 41 64 6f 62 65 20  49 6d 61 67 65 52 65 61  |e.Adobe ImageRea|
00000040  64 79 71 c9 65 3c 00 00  38 32 49 44 41 54 78 da  |dyq?e<..82IDATx?|

부정한:

00000000  89 50 4e 47 0d 0a 1a 0a  00 00 00 04 43 67 42 49  |.PNG........CgBI|
00000010  30 00 20 02 10 f3 44 7c  00 00 00 0d 49 48 44 52  |0. ..?D|....IHDR|
00000020  00 00 00 6d 00 00 00 75  08 06 00 00 00 44 7d 6f  |...m...u.....D}o|
00000030  a0 00 00 00 19 74 45 58  74 53 6f 66 74 77 61 72  |?....tEXtSoftwar|
00000040  65 00 41 64 6f 62 65 20  49 6d 61 67 65 52 65 61  |e.Adobe ImageRea|
00000050  64 79 71 c9 65 3c 00 00  38 65 49 44 41 54 ed bd  |dyq?e<..8eIDAT??|

(파일 헤더의 작은 부분이 별로 도움이 되지 않는다는 점은 감사하지만 ZIP 자체가 아니라 PNG 내에서 손상이 발생한다는 것을 보여주기 위한 의도입니다.)

그래서 내가 묻는 것은 누군가가 전에 이런 일을 경험했는지 여부입니다.방금 다음 래퍼를 사용해 보았습니다. http://www.flyblog.info/catprogramming/202.html 동일한 문제가 발생했는데 libzip 자체가 문제를 일으키는 것으로 추측됩니까?

누구나 시도하고 교체할 수 있는 iPod의 zip 파일에 파일을 추가하는 간단하고 시도되고 테스트된 방법이 있습니까?

도움이 된다면 zip을 생성하는 코드는 다음과 같습니다.

ZipArchive* zip = [[ZipArchive alloc] init];

BOOL ret = [zip CreateZipFile2: zipPath];
NSMutableSet *imageNames = [NSMutableSet set];
[curAlbum collectImageNames:imageNames];

for (NSString *imageName in imageNames) {
    NSString *imagePath = [[NSBundle mainBundle] pathForResource:imageName ofType:@""];
    NSLog(imagePath);
    ret = [zip addFileToZip:imagePath newname:@"test.png"];
}



[zip release];

어떤 조언이라도 감사하겠습니다 :-)

도움이 되었습니까?

해결책

Noah의 답변 외에도 Xcode는 PNG 파일도 압축합니다.

Xcode Build Settings

설정할 가치가 있을 수도 있습니다 COMPRESS_PNG_FILES = NO 대상 정보 창에서

다른 팁

Xcode는 장치용 애플리케이션을 빌드할 때 모든 PNG 리소스를 변경하여 BGRA(일반적인 RGBA와 반대)로 변환하고 알파 채널을 미리 곱합니다.내가 아는 프로젝트 설정을 사용하여 이를 방지할 수 있는 방법은 없습니다.앱에 포함된 리소스에 ".png" 이외의 확장명을 부여하여 Xcode가 해당 리소스를 변경 없이 복사하는지 확인할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top