Как получить и обработать EXIF-данные JPEG-файла в 1С:Предприятие

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Работа с изображениями в 1С часто требует не только их отображения, но и анализа метаданных, зашитых в файл. Одним из наиболее частых запросов является получение параметра Orientation, чтобы корректно отображать фотографии, сделанные на мобильные устройства. Давайте разберем, как подступиться к этой задаче, используя различные инструменты.

Использование внешних обработок для чтения EXIF

Самый простой и «родной» для 1С способ — использование специализированных внешних обработок. Такие решения обычно базируются на библиотеках, умеющих парсить структуру JPEG-файла. Рассмотрим, как это реализовать на практике.

Для работы нам потребуется внешняя обработка, предназначенная для чтения метаданных. После подключения такой обработки в конфигурацию, процесс получения данных выглядит следующим образом:


// Инициализация обработки
Чтение = ВнешниеОбработки.Создать(ПутьКФайлуОбработки);
// Чтение данных из целевого файла
Чтение.ПрочитатьФайл(ПутьКФайлу);
// Доступ к конкретному свойству
ОриентацияСнимка = Чтение.Свойства.Orientation;

Этот метод удобен тем, что позволяет получать данные непосредственно в коде 1С без вызова сторонних программ. Однако важно помнить, что большинство подобных обработок созданы для чтения метаданных и могут не обладать встроенным функционалом для их записи или изменения.

Работа с утилитами через командную строку

Если задача стоит шире, например, необходимо не просто узнать ориентацию, но и изменить её, имеет смысл использовать проверенные временем консольные утилиты, такие как exiftool. Мы можем вызывать их прямо из 1С с помощью объекта ЗапускПриложения или КомандаСистемы.

Разберем логику взаимодействия:

  1. Подготавливаем команду для выполнения в cmd.
  2. Передаем путь к файлу в качестве аргумента утилите.
  3. Перехватываем вывод утилиты для анализа или перезаписываем метаданные.

Использование COM-объектов и библиотек Windows

Для более глубокой интеграции в среде Windows можно использовать встроенные компоненты: WIA (Windows Image Acquisition) или WIC (Windows Imaging Component). Это позволяет обращаться к свойствам файла через COM-интерфейс.

Преимущество этого подхода в том, что нам не нужно распространять вместе с конфигурацией дополнительные исполняемые файлы. Однако работа с COM-объектами требует понимания структуры System.Drawing или соответствующих классов .NET, если мы подключаем внешнюю сборку DLL.

Автоматическая трансформация изображений через ImageMagick

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

Рекомендуем использовать библиотеку ImageMagick. Вызов команды mogrify -auto-orient из 1С позволяет:

О чем важно помнить разработчику

При реализации любого из предложенных методов, обратите внимание на следующие технические аспекты:

Права доступа: Если код выполняется на стороне сервера 1С, убедитесь, что учетная запись, от которой запущена служба 1C:Enterprise Server, имеет права на чтение и запись файлов в целевой директории, а также права на запуск внешних исполняемых файлов.

Целостность данных: При изменении метаданных (особенно при перезаписи тегов) всегда делайте резервную копию файла. Некорректная запись заголовка EXIF может привести к повреждению структуры файла JPEG, после чего изображение перестанет открываться.

Особенности отображения: Помните, что изменение метаданных — это не всегда то же самое, что изменение пикселей. Если ваша цель — гарантированное отображение картинки во всех браузерах и приложениях, лучше использовать инструменты для Lossless Rotation, которые выполняют трансформацию без пережатия данных изображения.

Проанализировав все способы, выберите тот, который лучше всего вписывается в архитектуру вашей системы. Для простого чтения достаточно внешней обработки, для полной автоматизации процесса «исправления» фото — вызов ImageMagick будет самым надежным вариантом.

← На главную