2011-06-30 5 views
8

W aplikacji na iOS muszę wyświetlać filtry obrazu w zależności od ich rozmiaru (szerokości/wysokości), w wyszukiwaniu w wyszukiwarce Google myśleć o czymś podobnym do "Duży, Średni, Mały" . Otwarcie każdego obrazu i odczytanie jego wymiarów podczas tworzenia listy będzie wymagało dużych nakładów. Czy istnieje sposób uzyskania tych informacji bez otwierania samego obrazu?iOS: jak uzyskać wymiary obrazu bez jego otwierania?

Damien DeVille odpowiedział na poniższe pytanie, w oparciu o jego sugestią, jestem teraz za pomocą następującego kodu:

NSURL *imageURL = [NSURL fileURLWithPath:imagePath]; 
if (imageURL == nil) 
    return; 

CGImageSourceRef imageSourceRef = CGImageSourceCreateWithURL((CFURLRef)imageURL, NULL); 
if(imageSourceRef == NULL) 
    return; 

CFDictionaryRef props = CGImageSourceCopyPropertiesAtIndex(imageSourceRef, 0, NULL);  
CFRelease(imageSourceRef); 

NSLog(@"%@", (NSDictionary *)props); 

CFRelease(props); 
+0

co z głosowaniem w dół? –

+0

Nie mam pojęcia, facet, który pierwotnie udzielił odpowiedzi na pytanie, w ogóle nie rozumiał pytania i był obraźliwy, więc zgłosiłem mu modę. być może on zemścił się na mnie ;-) –

Odpowiedz

9

Można użyć ImageIO do osiągnięcia tego.

Jeśli masz adres URL obrazu (lub ścieżkę do pliku utwórz adres URL z + fileURLWithPath na NSURL), możesz utworzyć źródło obrazu za pomocą CGImageSourceCreateWithURL (będziesz musiał połączyć mostek z adresem URL CFURLRef).

Po uzyskaniu źródła obrazu, można uzyskać CFDictionaryRef właściwości obrazu (można ponownie połączyć przesyłanie do NSDictionary), wywołując CGImageSourceCopyPropertiesAtIndex. Otrzymasz słownik zawierający wiele właściwości o obrazie, w tym pixelHeight i pixelWidth.

Możesz podać 0 jako indeks. Indeks jest taki, że niektóre obrazy mogą zawierać różne osadzone obrazy (na przykład miniaturę lub wiele ramek, jak w gifie).

Należy pamiętać, że przy użyciu źródła obrazu pełny obraz nie musi być załadowany do pamięci, ale nadal będzie można uzyskać dostęp do jego właściwości.

Dokonaj importu i dodaj strukturę do swojego projektu.

+3

dziękuję, działa dobrze, zredagowałem moje pytanie, aby dołączyć kod, którego użyłem, na wszelki wypadek. –

0

tylko jeden Ponadto: jeśli chcesz korzystać z internetowej URL jak http://www.example.com/image.jpg należy użyć wtedy [bibliotece NSURL URLWithString: ImagePath] zamiast [bibliotece NSURL fileURLWithPath: ImagePath].