Как изменить данные EXIF без сжатия изображения в Cocoa?

#cocoa #core-graphics

#cocoa #core-graphics

Вопрос:

Я успешно использую CGImageSource для чтения изображения (в основном в формате JPEG) и CGImageDestination для его обратной записи. Это работает, но мое изображение получается намного меньше, чем было раньше (изображение размером 3,9 Мб станет изображением размером 2,1 Мб).

Я играл с kCGImageDestinationLossyCompressionQuality, и хотя это влияет на размер файла, я не понимаю, какой масштаб он использует.

Например, тот же файл размером 3,7 Мб изменит свой размер на:

  • 1,9 Мб при качестве сжатия 0,7

  • 2,4 Мб с качеством сжатия 0,8

  • 3,0 Мб с качеством сжатия 0,9

  • 7,4 Мб с качеством сжатия 1,0

Я перепробовал все (перейдя к 6 десятичным знакам, используя дихотомию), чтобы найти подходящее место, чтобы вернуться к этим волшебным 3,9 Мб, но оно увеличивается с 3,3 Мб до 7,4 Мб, и, по-видимому, нет способа заставить его оставаться между этими 2 числами.

Есть ли какая-либо другая библиотека Objective-C, которую я могу использовать для изменения данных EXIF, которая оставляет сжатие (и, следовательно, размер файла) в покое?

Ответ №1:

Используя CGImageDestination, вы создаете новое изображение, и очень сложно, чтобы размер вновь созданного изображения соответствовал исходному. (зависит от уровня сжатия).

Если вам нужно просто изменить метаданные в исходном изображении, не изменяя информацию об изображении, вам следует использовать другую библиотеку. Я знаю два из них, которые можно использовать в приложении cocoa:

  • библиотека libexif C . Поддерживает запись JPG. Лицензия LGPL.
  • exiv2 C . Поддерживает запись во множество форматов. Но для этого требуется платная лицензия, если вы используете ее в коммерческом приложении.

Другой вариант — использовать exiftool. Это скрипты perl, которые стали стандартом де-факто для изменения информации метаданных. Вы могли бы включить его в папку ресурсов вашего приложения и вызвать его с помощью NSTask для изменения метаданных изображений. Довольно легко сделать и, безусловно, лучший инструмент из трех. (Только для Mac, не уверен, что вы ориентируетесь на iphone или Mac)