Получение правильной метки времени для изображения в Aperture - PullRequest
2 голосов
/ 27 июля 2011

Вопрос для разработчиков Aperture и Cocoa…

Я использую плагин Aperture и @Fraser Speirs 'FlickrExport, чтобы управлять моими фотографиями и загружать их в Flickr.FlickrExport устанавливает пользовательские теги в Aperture с идентификатором фотографии Flickr (среди прочего), чтобы вы могли видеть, какие изображения были экспортированы.Я также выкладываю фотографии непосредственно на Flickr со своего iPhone по электронной почте (я нашел единственный способ сохранить данные EXIF ​​нетронутыми).

Я пытаюсь создать сценарий Python, который будет опрашивать мой поток Flickrи идентифицировать изображения, которые существуют в обоих пространствах, но не имеют пользовательских тегов Aperture, которые указывают, что фотография также была загружена на Flickr.Обычно он работал хорошо, пока я не обновился до Lion, и теперь я нахожу некоторые дыры.

Flickr и Aperture имеют ужасную / несуществующую обработку часовых поясов, а временные метки EXIF ​​не захватывают часовой пояс.Временная метка изображения просто говорит: «14 июля в 10:03».Если системный часовой пояс моего компьютера установлен на Бостон (США / Восток), когда я импортирую изображение в Aperture, Aperture отобразит его как 7/14/11 10:03:00 AM EDT.Если я снова импортирую то же самое изображение, но для моего системного часового пояса будет выбран Лос-Анджелес (США / Тихий океан), дата изображения будет отображаться как 7/14/11 10:03:00 AM PDT.Хорошо, это сбивает с толку и неправильно (если часовой пояс не выражен, ни один не должен подразумеваться).

Теперь давайте переключим домены.Я использую ScriptingBridge для взаимодействия с Aperture через Python.NSDate, возвращаемое при извлечении значения для тега ImageDate EXIF, корректируется с учетом текущего часового пояса системы (в моем случае - США / Восток).

Для изображения, импортированного, когда для моего системного часового пояса было установлено значение США / Восток:

>>> aperture = ScriptingBridge.SBApplication.applicationWithBundleIdentifier_("com.apple.Aperture")
>>> aperture.selection()[0].EXIFTags().objectWithName_("ImageDate").value().get()
2011-07-14 10:43:37 −0400

Для изображения, импортированного, когда системный часовой пояс был установлен в США / Тихоокеанский регион:

>>> aperture.selection()[0].EXIFTags().objectWithName_("ImageDate").value().get()
2011-07-14 13:43:37 −0400

Таким образом, Aperture, кажется, думает, что знает часовой пояс изображения (даже еслибыло предоставлено), но, похоже, нет способа вернуть это через ScriptingBridge.Итак, учитывая объект NSDate, могу ли я найти дату и время в их исходном часовом поясе, даже если я не знаю, что это за часовой пояс?Возможно ли это вместо этого через API подключаемого модуля Aperture?

Обратите внимание, что если я использую команду «Пакетное изменение», чтобы выполнить настройку времени и установить часовой пояс, или сделать ту же настройку через панель импорта, два пользовательских тегадобавлено: pictureTimeZoneName и cameraTimeZoneName.Если существует pictureTimeZoneName, я смогу извлечь временную метку без каких-либо «исправлений».Но я ищу решение, которое не требует такого большого вмешательства пользователя.

...