2012-05-31 4 views
11

Próbuję utworzyć Progressive JPEG z UIImage obiektu, jest to kod JestemTworzenie Progressive JPEG na iOS z ImageIO produkuje mające postać widocznych kwadratów wyników na urządzeniu

NSMutableData *data = [NSMutableData data]; 

NSString *path = [NSHomeDirectory() stringByAppendingPathComponent: @"Library/Caches/test.jpg"]; 

CFURLRef url = CFURLCreateWithString(NULL, (CFStringRef)[NSString stringWithFormat:@"file://%@", path], NULL); 
CGImageDestinationRef destination = CGImageDestinationCreateWithURL(url, kUTTypeJPEG, 1, NULL); 
CFRelease(url); 

NSDictionary *jfifProperties = [NSDictionary dictionaryWithObjectsAndKeys: 
           (__bridge id)kCFBooleanTrue, kCGImagePropertyJFIFIsProgressive, 
           nil]; 

NSDictionary *properties = [NSDictionary dictionaryWithObjectsAndKeys: 
          [NSNumber numberWithFloat:.7], kCGImageDestinationLossyCompressionQuality, 
          jfifProperties, kCGImagePropertyJFIFDictionary, 
          nil]; 

CGImageDestinationAddImage(destination, ((UIImage*)object).CGImage, (__bridge CFDictionaryRef)properties); 
CGImageDestinationFinalize(destination); 
CFRelease(destination); 

Działa to doskonale, gdy uruchomiony w symulatorze , ale niestety wytwarza grube/mające postać widocznych kwadratów wyników na urządzenie:

chunky/blocky result.

jakieś pomysły na to, co się dzieje? W ostateczności chciałbym użyć wersji UIImageJPEGRepresentation, naprawdę potrzebuję progresywnych plików JPEG.

+0

jaka jest wersja na iOS? – Raptor

+0

@ShivanRaptor to zostało przetestowane z iOS 5.0 - 5.1.1 –

+0

Usiłuję przetestować kody z moim telefonem. Czy możesz także udostępnić plik 'test.jpg', którego używasz? – Raptor

Odpowiedz

0

Dobra wiadomość: Właśnie to przetestowane na iPhone 4, a obraz wygląda świetnie:

NSDictionary *jfifProperties = [NSDictionary dictionaryWithObjectsAndKeys: 
@72, kCGImagePropertyJFIFXDensity, 
@72, kCGImagePropertyJFIFYDensity, 
@1, kCGImagePropertyJFIFDensityUnit, 
nil]; 

(stosując nową składnię dosłowne).

Dobry JFIF reference dla tego, co oznaczają te opcje gęstości.

0

iOS symulatora jest w porządku, jak wspomniane przez Ciebie.

Ale czy testowany na symulatorze IOS z Retina Display. W tym celu wykonaj następujące czynności: 1. Uruchom Symulator 2. Przejdź do "Sprzęt" -> "Urządzenie" 3. Wybierz symulator z wyświetlaczem Retina i sprawdź go ponownie.

Jeśli wystąpi problem w symulatorze iOS siatkówki wtedy masz zaczep.

Spróbuj użyć obrazu o bardzo małej rozdzielczości, a następnie przetestować go w urządzeniu.

Istnieje kilka problemów z wyświetlaniem obrazu o bardzo wysokiej rozdzielczości w UIImageView. Sprawdź link wymienionych poniżej: - High Resolution Image in UIImageView

Powiązane problemy