2016-11-06 2 views
0

내가 들어가기를 원하지 않는 여러 가지 이유로 JPG의 데이터를 소스로 인라인하는 것이 매우 편리합니다. 암호.jpg 데이터를 외부 리소스로로드하는 대신 코드에 인라인하는 것이 미치는 영향

그래서보다는 내가 base64로 문자열로 JPG로 변환 한 후로드 싶습니다 같은 [UIImage imageNamed:@"error.jpg"]으로 정규 API를 통해 이미지를로드가 좋아 :

+(NSString *)error_1 { 
    return @"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"; 
} 
+(UIImage *)img_error_1 { 
    NSData *d = [[NSData alloc] initWithBase64EncodedString:[self error_1] options:0]; 
    return [UIImage imageWithData:d]; 
} 

내가이 아마에 끔찍한 일이 이해를 그리고 나는 끔찍한 사람이다. 이것은 코드 냄새 등이다. 그러나 내 SDK의 배포 목적은 매우 간단하다.

나에게 흥미로운 점은 이것이 SDK의 메모리/바이너리 크기에 영향을주고 다른 형식에서 문제가되는 경우입니다.

바이너리 크기를 비교하는 것과 같은 몇 가지 사소한 테스트를 시도했지만 과감한 방식으로 증가시키지 않았습니다. 나는 또한 그것의 기억을 윤곽을 그리는 것을 시도하고 그러나 구체적인 응답 (또한 심상 자료 만 또는 jpg 만 포함하는 빈 프로젝트로)를 얻을 수 없었다

이것에 어떤 논문이 있는가?

+0

이'UIImage' 통해로드 된 이미지를 캐시'imageNamed. – Avi

+0

문제와 관련이 있는지 확실하지 않습니다. 나는 바이너리를 부풀게하는 데 일반적으로 어떤 영향을 미치는지 의미한다. –

답변

0

이것이 좋은지 나쁜지를 무시하면 가능한 크기가 커지는 것이 아닙니다. Well Base64 인코딩은 원시 바이트에 비해 바이트 크기를 33 % 증가시킵니다. Base64 문자를 NSString으로 저장하고 8 비트 문자열로 저장하지 않으므로 추가로 증가합니다. 3 바이트의 이미지 데이터를 모두 고려하면 약 8 바이트가 될 수 있습니다. (식별자를 중지 static를 사용하여 글로벌 수준으로 선언

static Byte imageData[] = { ... }; 

:

사용하는 것입니다 몇 가지 기억을 저장해야합니다 같은 일을하는 다른 방법은 정적 Byte 배열 같은 것을 초기화 현재 편집 단위 외부에서 사용할 수 있음).

는 바이트 채우기 위해 얻을 수있는 ... 당신이 터미널에 hexdump 명령을 사용할 수 있습니다

hexdump -v -e '16/1 "0x%02x, " "\n"' <myImage.jpg >myDump.txt 

이 쉼표, 진수 리터럴 형식으로 한 줄에 16 바이트를 생산 구분. 그런 다음 myDump.txt의 내용을 코드에 붙여 넣을 수 있습니다 (또는 #include). hexdump은 NUL이 덤프를 16의 배수로 채 웁니다. 따라서 myImage.jpg의 크기를 확인하고 끝에 0x0을 삭제해야합니다.

NSData *d = [[NSdata alloc] dataWithBytesNoCopy:imageData 
             length:sizeof(imageData) 
            freeWhenDone:NO]; 

및 그 이전과 계속에서 :

당신은 모든 메모리를 복사없이 에서 NSData를 생성 할 수 있습니다. `,하지만이 출시되지 않습니다 것을 의미하지 않는다 :

HTH

관련 문제