2012-12-16 11 views
5

Obecnie próbuję utworzyć prostą bibliotekę, aby uzyskać dostęp do metadanych obrazu w sposób zorientowany na obiekt (brak kolejnych słowników). I napotkał wiele dziwnych bugów:iPhone ImageIO nie zwraca wszystkich metadanych obrazu

  1. Nawet jeśli kCGImagePropertyMakerMinoltaDictionary, kCGImagePropertyMakerFujiDictionary, kCGImagePropertyMakerOlympusDictionary, kCGImagePropertyMakerPentaxDictionary klucze są określone, pojawia się błąd podczas kompilacji mojego projektu, twierdząc, że są niezdefiniowane:

    Nie zdefiniowano symbole architektury ARMv7 : "_kCGImagePropertyMakerMinoltaDictionary" odnosi z: - [SYMetadata metadataMakerMinolta] w SYMetadata.o ld symbol: (i) nie znaleziono architektury ARMv7

  2. kCGImagePropertyExifBodySerialNumber jest zdefiniowany klucz zbyt od ImageIO/CGImageProperties.h ale podczas ładowania projektu w iOS 5.1.1 pojawia się błąd mówiąc, że nie jest dostępna:

    dyld: Symbol nie znaleziono: _kCGImagePropertyExifBodySerialNumber Referenced z/var/mobile/Applications /0D8144E6-6313-4347-B503-247F5ACC0A11/ConnectTIG.app/ConnectTIG Oczekiwano w: /System/Library/Frameworks/ImageIO.framework/ImageIO w/var/mobile/Applications/0D8144E6-6313-4347-B503-247F5ACC0A11 /ConnectTIG.app/ConnectTIG

  3. Apple ma wiele dostępnych kluczy słownika metadanych, na przykład kCGImagePropertyMakerNikonDictionary, które były dostępne t ale nie działają. Na przykład mam zdjęcie zrobione aparatem Nikon D3100: gdy otwieram go za pomocą aplikacji Podgląd na moim komputerze mac, mogę uzyskać dostęp do metadanych Nikona, ale kiedy otrzymam wszystkie klucze i wartości na iPhone'a, nie mam tych informacji.

Używam XCode 4.5.2 (ostatnia stabilna kompilacja AFAIK) na Moutain Lion 10.8.2. Próbowałem kompilować/uruchamiać na urządzeniu i symulatorze, te same wyniki.

Jak to będzie biblioteka publiczna już mam to wszystko na moim github repo: https://github.com/dvkch/SYPictureMetadata

Osoby pragnące dowiedzieć się, gdzie te błędy pochodzą z wita się bawić z kodem i przesłać impuls prosi o każdej porze.

Jeśli masz jakiś pomysł, będzie to bardzo cenne!

Stan

+0

Tak, jestem trochę zdezorientowany przez swoje pytanie, jak napisane. Czy przenosisz pliki zrobione aparatem Nikon D3100 na iPhone'a? Chodzi mi o to, że nie ma powodu, żeby ten klucz był na zdjęciu zrobionym z iPhone'a - nie jest to Nikon. ?? – Dad

+0

Przepraszam, próbowałem przesłać go pocztą, a także skorzystałem z karty EyeFi. Żadne z nich nie działało, chyba że użyłem formatu NEF. – dvkch

+0

ciekawe ..... – Dad

Odpowiedz

1

Jestem prawie pewien, że coś jest nie tak z SDK. Błąd, który otrzymujesz, jest symbolem zdefiniowanym w SDK, ale tak naprawdę nie istnieje. Sprawdziłem twój projekt i umieściłeś ImageIO.framework, gdzie wszystkie są zdefiniowane i rzeczywiście wszystkie inne klawisze działają dobrze. kCGImagePropertyMakerNikonCameraSerialNumber działa, ale kCGImagePropertyMakerMinoltaDictionary nie.

Jeśli zajrzysz do górnej części dokumentacji CGImageProperties, oznacza to, że framework to "ApplicationServices/ImageIO". Jest to niemożliwe, ApplicationServices nie istnieje na iOS. Przynajmniej jeden błąd w tej dokumentacji już. Najwyraźniej skopiowali dokumentację OSX dosłownie.

Zdecydowanie złożyć zgłoszenie błędu dotyczące tego problemu i dokumentacji.

FWIW na OSX te klawisze (prawdopodobnie takie same na iOS) przedstawiają się następująco:

{MakerCanon} 
{MakerNikon} 
{MakerMinolta} 
{MakerFuji} 
{MakerOlympus} 
{MakerPentax} 
+0

Dziękuję, że tak właśnie myślałem. Czy masz jakieś pomysły na temat punktu 2? Czy to ten sam problem? A co z 3? – dvkch

+0

Aha i jeśli masz jakikolwiek inny sposób, aby kod kompilował się z lub bez użycia 'kCGImagePropertyExifBodySerialNumber' na przykład, chciałbym aby moje metody działały pod iOS 5.0 i zawsze zwracały zero, i naprawdę używały klucza dla wersji lepszy niż 6.0. – dvkch

+0

Zgłoszenie błędu wypełnione, mam nadzieję, że będą one miały odpowiedzi. Wypełniłem już błąd dotyczący nie działającego symulatora iOS w wersji 5.1 i nigdy nie otrzymałem odpowiedzi – dvkch

Powiązane problemy