2011-08-22 40 views
19

Tôi đã đọc trên tham chiếu từ phiên bản iOS 4. + với phương thức imageNamed của đối tượng UIImage, không cần phải gia hạn tệp.Hình ảnh JPG không tải với hình ảnh UIImageNamed

Từ UIImage lớp tham khảo:

cân nhắc đặc biệt.

Trên iOS 4 trở lên, tên tệp không bắt buộc phải chỉ định đuôi tệp. Trước iOS 4, bạn phải chỉ định tên tệp là mở rộng .

Nhưng có vẻ như điều này chỉ hoạt động với tệp PNG.

Nếu mã của tôi là:

[UIImage imageNamed:@"test"]; 
  • Các tải hình ảnh chỉ khi tập tin là test.png
  • Những hình ảnh không tải nếu nó test.jpg.

Đối với tôi đó là vấn đề lớn vì tôi cần duy trì tải hình ảnh động (Tôi không biết thời gian chạy nếu hình ảnh tôi muốn tải là png hoặc jpg).

Bạn có thể giúp tôi không?
Cảm ơn.

+0

Có bất kỳ câu trả lời nào giúp bạn không? –

Trả lời

0

Nếu bạn có những hình ảnh này được nhóm trong ứng dụng của mình, bạn NÊN biết các tiện ích của chúng.

Nếu bạn nhận được chúng từ nguồn trực tuyến và bạn có chúng dưới dạng NSData, bạn có thể sử dụng mã này ở đây để xác định loại.

+ (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; 
} 

Theo câu trả lời hàng đầu trong câu hỏi this.

2

Mới nhất tiểu bang tham khảo phát triển các mảnh còn thiếu thông tin:

cân nhắc đặc biệt Trên iOS 4 và sau đó, nếu tập tin ở định dạng PNG, nó không phải là cần thiết để xác định phần mở rộng tên file .PNG. Trước iOS 4, bạn phải chỉ định đuôi tệp.

Một lý do có thể khiến thư viện cho phép xử lý đặc biệt PNG là phần cứng iOS được tối ưu hóa cho PNG. Hình ảnh PNG được lưu trữ trong gói ứng dụng được tối ưu hóa bằng Xcode, thay đổi thứ tự byte của hình ảnh PNG để phù hợp với chip đồ họa của thiết bị iPhone. (xem câu hỏi này: Is PNG preferred over JPEG for all image files on iOS?).

Nếu bạn biết rằng bạn sẽ chỉ có PNG hoặc JPG, giải pháp thay thế là tạo danh mục trên UIImage như dưới đây.

- (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; 
} 
Các vấn đề liên quan