2011-08-22 2 views
19

imageNamedUIImage 오브젝트를 사용하여 iOS 버전 4. +에서 참조한 내용을 읽었을 때 파일 확장자가 필요하지 않습니다.JPG 이미지가 UIImage image와 함께로드되지 않습니다.

특별 고려 사항 : UIImage 클래스 참조에서

.

iOS 4 이상에서는 파일 이름을 확장자로 지정하지 않아도됩니다. iOS 4 이전에는 파일 이름을 확장자로 지정해야합니다.

그러나 이것은 PNG 파일에서만 작동하는 것 같습니다.

내 코드 인 경우 : 파일이 test.jpg을의 경우로드되지 않습니다 test.png

  • 이미지입니다

    [UIImage imageNamed:@"test"]; 
    
    • 이미지 만로드합니다. 나는 동적 이미지 로딩 (I로드 할 이미지가 png 또는 jpg 경우 내가 런타임에 모르는)을 유지해야하기 때문에

    는 나에게는 큰 문제입니다.

    제발 도와주세요.
    감사합니다.

  • +0

    답변이 도움이 되었습니까? –

    답변

    0

    이러한 이미지가 앱에 묶여 있다면 확장명을 알아야합니다.

    온라인 소스에서 가져오고 NSData로 가져온 경우 여기에서이 코드를 사용하여 유형을 결정할 수 있습니다.

    + (NSString *)contentTypeForImageData:(NSData *)data { 
        uint8_t c; 
        [data getBytes:&c length:1]; 
    
        switch (c) { 
        case 0xFF: 
         return @"image/jpeg"; 
        case 0x89: 
         return @"image/png"; 
        case 0x47: 
         return @"image/gif"; 
        case 0x49: 
        case 0x4D: 
         return @"image/tiff"; 
        } 
        return nil; 
    } 
    

    상단 대답으로 당 this 질문한다.

    2

    최신 개발자 참조 상태 정보의 누락 된 부분 : 파일이 PNG 형식 인 경우

    특별 고려 사항 아이폰 OS 4에 이상에서는, .PNG 파일 확장명을 지정할 필요가 없습니다. iOS 4 이전에는 파일 이름 확장명을 지정해야합니다.

    라이브러리가 PNG에 특별한 대우를하는 한 가지 가능한 이유는 iOS 하드웨어가 PNG 용으로 최적화되어 있다는 것입니다. 응용 프로그램 번들에 저장된 PNG 이미지는 Xcode에서 최적화되어 PNG 이미지의 바이트 순서를 iPhone 장치의 그래픽 칩과 일치하도록 변경합니다. (이 질문 참조 : Is PNG preferred over JPEG for all image files on iOS?).

    PNG 또는 JPG 만있을 것이라는 점을 알고 있다면 아래의 방법으로 UIImage에서 카테고리를 만드는 것이 좋습니다.

    - (UIImage*) jgcLoadPNGorJPGImageWithName:(NSString*)name { 
        UIImage * value; 
        if (nil != name) { 
         value = [UIImage imageNamed:name]; 
         if (nil == value) { 
          NSString * jpgName = [NSString stringWithFormat:@"%@.jpg", name]; 
          value = [UIImage imageNamed:jpgName]; 
         } 
        } 
        return value; 
    } 
    
    관련 문제