2016-06-13 9 views
1

Я пытаюсь удалить существующие теги EXIF, а затем применить строку авторского права, используя этот важный код ниже:Добавьте строку авторского права в JPEG с помощью ImageMagick/Imagick в PHP?

$im = new Imagick($file); 
$im->stripImage(); 

// Embed new EXIF data 
$im->setImageProperty('EXIF:ImageDescription', $copy_string); 
$im->setImageProperty('EXIF:Copyright', $copy_string); 
//$im->setImageProperty('Exif:ImageDescription', $copy_string); 
//$im->setImageProperty('Exif:Copyright', $copy_string); 
//$im->setImageProperty('ImageDescription', $copy_string); 
//$im->setImageProperty('Copyright', $copy_string); 

$im->writeImage($file); 
$im->clear(); 
$im->destroy(); 

У меня возникли проблемы с поиском пример использования. Руководство содержит строки свойств CLI here. Ни одна из строк в разделе «Вставить» не имеет никакого эффекта. Мы собираемся остаться с Imagick для этого решения. Благодарю.

+0

ли вы попробовать 'Exif: Copyright'? Это похоже на документы (не все в верхнем регистре). –

+0

@CharlotteDunois Просто попробовал это сейчас. Нет. Спасибо, в любом случае. – Drakes

+1

Я не верю, что IM может _write_ EXIF ​​профилировать информацию. – emcconville

ответ

2

Как уже упоминалось, Imagemagick не позволяет вам записывать данные EXIF, поэтому нет «правильный» ответ. Вы можете или, возможно, не понравитесь идее, о которой я упомянул here как обход. По существу, вы могли бы создать одноразовое изображение в качестве шаблона «» для данных EXIF, которые вы хотите поместить в свои изображения (я объясню, как позже), а затем использовать это как основу для ваших реальных изображений и композитных ваши данные изображения поверх изображения с правильными данными EXIF, и, как говорит Данак, ImageMagick будет сохранять данные EXIF.

Так, в конкретные сроки:

// Open the copyright image with the correct EXIF data 
    $cr = new Imagick('copyright.jpg'); 

    // Open the image to alter and get its size 
    $file = 'test.jpg'; 
    $im = new Imagick($file); 
    $d = $im->getImageGeometry(); 
    $w = $d['width']; 
    $h = $d['height']; 

    // Resize the copyright and composite the image over the top 
    $cr->resizeImage($w,$h,imagick::FILTER_POINT,0,0); 
    $cr->compositeImage($im,imagick::COMPOSITE_SRCOVER ,0,0); 
    $cr->writeImage($file); 

Итак, я сделал изображение авторских прав с данными EXIF, я хочу как разовый операции - хотя и с использованием exiftool, но вам нужно только создать этот образ один раз - Вам не нужно продолжать использовать exiftool или иметь его как часть вашего набора инструментов, а вы просто сохранить шаблон она производит:

# Make template copyright file 
convert -size 1x1 xc:black copyright.jpg 

# Put some EXIOF data in the template 
exiftool -copyright="2015 Copyright Captain Hackalot" copyright.jpg 
+0

Я попробовал и частично работал. С очень маленьким изображением jpeg размером 1x1 с требуемой информацией об авторских правах это изображение «copyright.jpg» получилось примерно до 3 тысяч, что отлично. Когда я использовал вышеуказанный код, записанные файлы намного больше. (e, g, 164kB -> 192kB, 26kB -> 49kB). Как можно добавлять данные Exif с минимальным увеличением размера файла (для метаданных), а не изменять сжатие или фильтры? – Drakes

+0

Попробуйте 'getImageCompressionQuality()' вашего исходного изображения, а затем установите одинаковое качество для выходного изображения с помощью 'setImageCompressionQuality()' –

+0

Это сделало трюк. Благодарю. – Drakes