Как добавить exif-данные к изображению?

На нашем сайте мы получаем большое количество фотографий, загруженных из разных источников.

Чтобы сохранить размеры файлов, мы удаляем все exif-данные из источника, используя mogrify :

mogrify -strip image.jpg 

То, что мы хотели бы сделать, это вставить некоторые базовые данные exif (Copyright Initrode и т. Д.) Обратно на это новое «чистое» изображение, но я не могу найти ничего в документах, которые достигнут этого.

Есть ли у кого-нибудь опыт в этом?

Если это невозможно сделать через imagemagick, решение на основе PHP станет следующей лучшей!

Благодарю.

Вы можете сэкономить большое пространство, особенно если у вас большое количество изображений.

Добавьте в text.txt следующее (формат тэгов IPTC, взятых отсюда ):

 2#110#Credit="My Company" 2#05#Object Name="THE_OBJECT_NAME" 2#55#Date Created="2011-02-03 12:45" 2#80#By-line="BY-LINE?" 2#110#Credit="The CREDIT" 2#115#Source="SOURCE" 2#116#Copyright Notice="THE COPYRIGHT" 2#118#Contact="THE CONTACT" 2#120#Caption="AKA Title" 

Стрите все существующие данные exif с изображения

 mogrify -strip image.jpg 

Добавьте кредит к своему изображению

 mogrify -profile 8BIMTEXT:text.txt image.jpg 

Exiftool выглядит так, что это будет точное совпадение для вас.

Я не пробовал, но теперь я искушаюсь пойти и исправить все мои фотографии медового месяца, которые отмечены 01/01/2074, потому что я забыл сбросить дату после того, как батареи скончались.

Вот библиотека PHP Exif, которая должна делать то, что вам нужно.

Библиотека PHP Exif (PEL) позволяет полностью управлять данными Exif (Exchangeable Image File Format). Это данные, которые цифровые камеры размещают в своих изображениях, такие как дата и время, скорость затвора, значение ISO и т. Д.

Используя PEL, можно полностью изменить данные Exif, что означает, что он может быть как прочитан, так и написан. Полностью новые данные Exif также могут быть добавлены к изображениям. PEL полностью написан на PHP и не зависит ни от чего, кроме стандартной установки PHP, версии 5. PEL размещается на SourceForge.

на linux есть программа, называемая jhead. Он может добавить минимальный заголовок exif с помощью команды:

jhead -mkexif img.jpg

Я сомневаюсь, что вы получите много места, удалив информацию Exif …

Во всяком случае, я могу ошибаться, но метаданные Exif принадлежат больше для хранения технической (и контекстной) информации. Для таких вещей, как авторское право, вместо этого вы должны использовать IPTC.

Это то, что вы можете сделать, по-видимому, с помощью ImageMagick: записать данные IPTC в Jpeg с помощью ImageMagick .

Вы можете сделать это непосредственно на PHP, используя библиотеку PEL . Вы сделали бы это, просто перезаписав существующие EXIF-заголовки,

 // Load image data $data = new PelDataWindow(file_get_contents('IMAGE PATH')); // Prepare image data $jpeg = $file = new PelJpeg(); $jpeg->load($data); // Create new EXIF-headers, overwriting any existing ones (when writing to disk) $exif = new PelExif(); $jpeg->setExif($exif); $tiff = new PelTiff(); $exif->setTiff($tiff); // Create Ifd-data that will hold EXIF-tags $ifd0 = new PelIfd(PelIfd::IFD0); $tiff->setIfd($ifd0); // Create EXIF-data for copyright $make = new PelEntryAscii(PelTag::COPYRIGHT, '2008-2017 Conroy'); $ifd0->addEntry($make); // Add more EXIF-data... // Save to disk $file->saveFile('IMAGE.jpg'); - // Load image data $data = new PelDataWindow(file_get_contents('IMAGE PATH')); // Prepare image data $jpeg = $file = new PelJpeg(); $jpeg->load($data); // Create new EXIF-headers, overwriting any existing ones (when writing to disk) $exif = new PelExif(); $jpeg->setExif($exif); $tiff = new PelTiff(); $exif->setTiff($tiff); // Create Ifd-data that will hold EXIF-tags $ifd0 = new PelIfd(PelIfd::IFD0); $tiff->setIfd($ifd0); // Create EXIF-data for copyright $make = new PelEntryAscii(PelTag::COPYRIGHT, '2008-2017 Conroy'); $ifd0->addEntry($make); // Add more EXIF-data... // Save to disk $file->saveFile('IMAGE.jpg'); - // Load image data $data = new PelDataWindow(file_get_contents('IMAGE PATH')); // Prepare image data $jpeg = $file = new PelJpeg(); $jpeg->load($data); // Create new EXIF-headers, overwriting any existing ones (when writing to disk) $exif = new PelExif(); $jpeg->setExif($exif); $tiff = new PelTiff(); $exif->setTiff($tiff); // Create Ifd-data that will hold EXIF-tags $ifd0 = new PelIfd(PelIfd::IFD0); $tiff->setIfd($ifd0); // Create EXIF-data for copyright $make = new PelEntryAscii(PelTag::COPYRIGHT, '2008-2017 Conroy'); $ifd0->addEntry($make); // Add more EXIF-data... // Save to disk $file->saveFile('IMAGE.jpg'); - // Load image data $data = new PelDataWindow(file_get_contents('IMAGE PATH')); // Prepare image data $jpeg = $file = new PelJpeg(); $jpeg->load($data); // Create new EXIF-headers, overwriting any existing ones (when writing to disk) $exif = new PelExif(); $jpeg->setExif($exif); $tiff = new PelTiff(); $exif->setTiff($tiff); // Create Ifd-data that will hold EXIF-tags $ifd0 = new PelIfd(PelIfd::IFD0); $tiff->setIfd($ifd0); // Create EXIF-data for copyright $make = new PelEntryAscii(PelTag::COPYRIGHT, '2008-2017 Conroy'); $ifd0->addEntry($make); // Add more EXIF-data... // Save to disk $file->saveFile('IMAGE.jpg'); замкнуты // Load image data $data = new PelDataWindow(file_get_contents('IMAGE PATH')); // Prepare image data $jpeg = $file = new PelJpeg(); $jpeg->load($data); // Create new EXIF-headers, overwriting any existing ones (when writing to disk) $exif = new PelExif(); $jpeg->setExif($exif); $tiff = new PelTiff(); $exif->setTiff($tiff); // Create Ifd-data that will hold EXIF-tags $ifd0 = new PelIfd(PelIfd::IFD0); $tiff->setIfd($ifd0); // Create EXIF-data for copyright $make = new PelEntryAscii(PelTag::COPYRIGHT, '2008-2017 Conroy'); $ifd0->addEntry($make); // Add more EXIF-data... // Save to disk $file->saveFile('IMAGE.jpg'); 

Вы можете найти полный список всех поддерживаемых EXIF-данных (PelTag) в документах PEL .