2012-12-16 38 views
5

Tôi hiện đang cố gắng tạo một thư viện đơn giản để truy cập siêu dữ liệu hình ảnh theo cách hướng đối tượng (không còn từ điển). Tôi gặp rất nhiều lỗi lạ:iPhone ImageIO không trả về tất cả siêu dữ liệu của hình ảnh

  1. Thậm chí nếu kCGImagePropertyMakerMinoltaDictionary, kCGImagePropertyMakerFujiDictionary, kCGImagePropertyMakerOlympusDictionary, kCGImagePropertyMakerPentaxDictionary phím được định nghĩa, tôi nhận được một thông báo lỗi khi biên dịch dự án của tôi nói rằng họ đang không xác định:

    ký Không xác định cho kiến ​​trúc ARMv7 : "_kCGImagePropertyMakerMinoltaDictionary", tham chiếu từ: - [SYMetadata metadataMakerMinolta] trong SYMetadata.o ld: biểu tượng (s) không tìm thấy cho kiến ​​trúc ARMv7

  2. kCGImagePropertyExifBodySerialNumber là chìa khóa định nghĩa quá từ ImageIO/CGImageProperties.h nhưng khi tải dự án trong iOS 5.1.1 tôi nhận được một lỗi nói rằng nó không phải là có sẵn:

    dyld: Symbol không tìm thấy: _kCGImagePropertyExifBodySerialNumber tham chiếu từ:/var/mobile/Applications /0D8144E6-6313-4347-B503-247F5ACC0A11/ConnectTIG.app/ConnectTIG Dự kiến ​​trong: /System/Library/Frameworks/ImageIO.framework/ImageIO trong/var/mobile/Applications/0D8144E6-6313-4347-B503-247F5ACC0A11 /ConnectTIG.app/ConnectTIG

  3. Apple có rất nhiều khóa từ điển siêu dữ liệu khả dụng, ví dụ: kCGImagePropertyMakerNikonDictionary, exis nhưng không hoạt động. Ví dụ tôi có một bức ảnh chụp bằng Nikon D3100: khi tôi mở nó bằng ứng dụng Xem trước trên máy Mac, tôi có thể truy cập siêu dữ liệu của Nikon, nhưng khi tôi nhận được tất cả các khóa và giá trị trên iPhone, tôi không có thông tin này.

Tôi đang chạy XCode 4.5.2 (xây dựng ổn định cuối cùng AFAIK) trên Moutain Lion 10.8.2. Tôi đã thử biên dịch/chạy trên thiết bị và trình mô phỏng, cùng một kết quả.

Vì đây sẽ là một thư viện công cộng Tôi đã có tất cả trên repo github của tôi: https://github.com/dvkch/SYPictureMetadata

Những sẵn sàng để khám phá nơi những lỗi xuất phát từ được hoan nghênh để chơi xung quanh với mã trình đẩy yêu cầu bất cứ lúc nào.

Nếu bạn có bất kỳ ý tưởng nào, nó sẽ được đánh giá rất cao!

Stan

+0

Vì vậy, tôi là một chút nhầm lẫn bởi câu hỏi của bạn như bằng văn bản. Bạn có đang di chuyển các tập tin được chụp bằng Nikon D3100 sang iPhone của mình không? Ý tôi là, không có lý do gì mà chiếc chìa khóa này sẽ nằm trong một bức ảnh chụp bên phải iPhone - nó không phải là một chiếc Nikon. ?? – Dad

+0

xin lỗi, tôi đã cố chuyển nó qua thư và cũng đã sử dụng thẻ EyeFi. Không ai trong số những người làm việc, trừ khi tôi sử dụng định dạng NEF. – dvkch

+0

thú vị ..... – Dad

Trả lời

1

Tôi khá chắc chắn có lỗi trong SDK. Lỗi bạn nhận được là biểu tượng được xác định trong SDK nhưng thực sự không tồn tại. Tôi đã kiểm tra dự án của bạn và bạn đã bao gồm ImageIO.framework nơi chúng được định nghĩa, và tất cả các phím khác hoạt động tốt. kCGImagePropertyMakerNikonCameraSerialNumber hoạt động nhưng kCGImagePropertyMakerMinoltaDictionary thì không.

Nếu bạn có một cái nhìn ở đầu tài liệu cho CGImageProperties, nó nói khung là "ApplicationServices/ImageIO". Điều này là không thể, ApplicationServices không tồn tại trên iOS. Đã có ít nhất một lỗi trong tài liệu này. Rõ ràng là họ đã sao chép nguyên văn tài liệu OSX.

Tôi chắc chắn sẽ gửi báo cáo lỗi về sự cố này và tài liệu.

FWIW trên OSX những phím (có khả năng tương tự trên iOS) như sau:

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

Cảm ơn đó là những gì tôi nghĩ. Bạn có ý kiến ​​gì về điểm 2 không? Đó có phải là vấn đề tương tự không? Còn về 3 thì sao? – dvkch

+0

Oh và nếu bạn có bất kỳ cách nào trong đầu để biên dịch mã có hoặc không sử dụng 'kCGImagePropertyExifBodySerialNumber' chẳng hạn, tôi rất muốn có các phương thức của tôi hoạt động trong iOS 5.0 và trả về luôn nil và thực sự sử dụng khóa cho các phiên bản cao hơn 6.0. – dvkch

+0

báo cáo lỗi đầy, tôi hy vọng họ sẽ có câu trả lời. Tôi đã điền một lỗi về việc không làm việc giả lập iOS trên phiên bản 5.1 và không bao giờ có một câu trả lời – dvkch

Các vấn đề liên quan