Брендирование файлов XMP Sidecar с помощью J

Перекрестная публикация из моего блога Анализируйте данные, а не бредни

Во время моей долгой и не очень известной карьеры в сфере информационных технологий я тайно избавлялся от
«раздражителей» с помощью языка программирования J. Раздражитель — это надоедливая проблема программного обеспечения, которая не заслуживает полномасштабного подхода в стиле проекта. Последнее, чего вы хотите, когда имеете дело с раздражителями, — это привлечь к решению проблемы бюрократов от ИТ. Вы знаете, о ком я говорю: о маленьких ворчливых существах, управляющих проектами, которые всегда превращают маленькие проблемы в большие. Помните ли вы «Agile», когда он действительно был Agile? Теперь, когда я, ориентировочно, на пенсии1 я больше не имею дела с бюрократами в сфере ИТ, но раздражителей по-прежнему много, и я все еще использую J для их устранения. В следующих трех постах я покажу J-решения для некоторых раздражителей, которые могут вас раздражать.

Сегодняшний раздражитель связан с моим увлечением фотографией. Я фотографирую с восьми лет. Чтобы вы поняли, насколько я дотошный человек, у меня до сих пор хранятся негативы пленок из детства, а мне уже почти семьдесят! С 2000 года я редактирую и загружаю цифровые снимки. Многие из них вы можете увидеть на моем сайте SmugMug. В процессе редактирования я использую настоящий программный зоопарк. В процессе работы над изображением я перехожу от одной программы к другой. Некоторые программы уважают и поддерживают метаданные изображения, другие — нет. В конце процесса я переименовываю файл изображения во что-то значимое.2 даже если переименование затрудняет последующее возвращение к исходному файлу.

Если вы редактируете изображения, вы знаете, что работа никогда не закончена. Вы всегда можете
«улучшить» изображение или представить его в новом свете. Я сопротивляюсь желанию переделывать старые визуализации, но иногда, возможно, спустя годы, я возвращаюсь к оригиналу, чтобы что-то «исправить». К сожалению, переименовывая файлы, не всегда легко найти оригинальное изображение.

Это распространенная проблема DAM (Digital Asset Management)!

Существуют десятки программ баз данных изображений, и можно подумать, что базы данных изображений генерируют стабильные ключи изображений. Большинство из них так и делают, но их ключи, как правило, полезны только в контексте базы данных. Вам нужен ключ, привязанный к уникальному битовому шаблону исходного файла изображения. Вам нужен правильный хэш.

Как только вы осознаете необходимость правильных хэшей, возникает вопрос: «Где их хранить?». Можно подумать, что метаданные EXIF или ITPC файла будут идеальным местом. Я попробовал этот подход. Используя превосходную программу exiftool, я вставлял хэши в изображения только для того, чтобы потом наблюдать, как различные редакторы удаляют или искажают их. Боковой элемент XMP (e*Xtensible **Metadata **P*latform)3 был создан для решения этой и других проблем. Файл XMP sidecar обеспечивает безопасный дом для метаданных изображения с дополнительным бонусом: вам никогда не придется трогать или изменять исходный файл изображения. Если вы не относитесь к своим оригинальным RAW-файлам как к священным байтам, с вами что-то не так.

Darktable, мой нынешний любимый разработчик RAW, создает и поддерживает XMP, когда вы добавляете изображения в его библиотеку или применяете неразрушающее редактирование. Правки Darktable хранятся в побочных XMP-файлах, оставляя оригиналы нетронутыми. При экспорте обработанного изображения Darktable создает копию оригинала, применяет все правки, сохраненные в файле sidecar, а затем вставляет элементы метаданных Dublin Core в метаданные IPTC копии. Большинство обработчиков изображений оставляют элементы Dublin Core в покое, поэтому они являются отличным домом для хэш-хаков.

Следующий J-глагол изменяет элемент title побочного XMP-файла. Он вставляет оригинальное имя файла и хэш SHA256 связанного с ним файла изображения. Элемент title обычно оставляется редакторами изображений нетронутым. Таким образом, по окончании редактирования вы сохраняете имя исходного файла и его стабильный уникальный хэш.

titbrandxmp=:3 : 0

NB.*titbrandxmp v--  brand xmp  sidecar file  with file name  and
NB. hash of associated image.
NB.
NB. monad:  clXmp =. titbrandxmp blImageXmpFiles
NB.
NB.   xmp=. 'c:/pictures/2022/Idaho/07_jul/d7500/_DSC8496.NEF.xmp'
NB.   ps=. xmp ;~ (-#'.xmp') }. xmp
NB.   titbrandxmp ps
NB.
NB.   ds=. sidecars 'c:/pictures/2022/North Rim Monument Valley/06_jun/d7500'
NB.   xmps=. titbrandxmp&.> <"1 ds

xmp=. read xmp [ 'raw xmp'=. y

NB. single Dubin Core publisher and creator 
NB. elements must exist to safely brand
dcp=. '</dc:publisher>';'</dc:creator>'
if. -.1 1 -: +/"1 dcp E.&> <xmp do. xmp return. end.

NB. file name and sha256 brand
tit=. dlf ('/[~(fhash)~]/',shabrand raw) changestr XMPTITLEFRAG-.CR

NB. replace or insert title element
'idx cxmp'=. (tags 'dc:title') cutnestidx xmp
if. #idx do. ;(<tit) idx} cxmp
else.
  (pt ,~ pt beforestr xmp),LF,tit,pt afterstr xmp [ pt=. ;0{dcp
end.
)
Вход в полноэкранный режим Выход из полноэкранного режима

Подробности использования titbrandxmp смотрите в J-скрипте brandxmp.ijs и связанном с ним документе brandxmp.pdf. Оба этих файла доступны на GitHub. Наслаждайтесь!

Постскриптум: Если у вас уже установлена последняя версия J, вы можете напрямую установить этот скрипт в качестве addon, введя следующую команду в сессии JQt или JHS.

install 'github:bakerjd99/jackshacks'

NB. load script
load '~addons/jacks/brandxmp.ijs'
Войти в полноэкранный режим Выйти из полноэкранного режима

  1. Я надеюсь, что бешеная инфляция (2022) будет проверена, так что мне не
    чтобы мне не пришлось снова выходить на пенсию! 

  2. Каталоги, заполненные сотнями имен типа _DSC8007.NEF и

  3. Файлы Sidecar генерируются и поддерживаются многими программами обработки изображений
    многие программы обработки изображений. Формат XMP представляет собой текстовый файл XML. Он может быть
    легко разбирать и изменять.

Оцените статью
devanswers.ru
Добавить комментарий