Мы создаем изображения большого пальца на нашем сервере, и я ищу способ сохранить метаданные (текст) в этом изображении. Это возможно?
На данный момент мы используем PHP и создаем образы JPG.
ты прав! обновил мой вопрос
Да. Это не проблема. но ваш вопрос такой же, как этот stackoverflow.com/questions/5384962/writing-exif-data-in-php /….






EXIF или повторно использовать старую концепцию сокрытия данных, Стенография
Да, это возможно.
Вы можете использовать всемогущую утилиту Exiftool perl, которая обрабатывает почти все известные наборы тегов, как стандартные (EXIF, IPTC, Adobe XMP и т. д.), Так и проприетарные.
Ваш вопрос такой же, как запись данных exif в php.
Мой ответ:
Я надеюсь, это поможет вам!
Я изменил класс, который нашел здесь (спасибо дебиторы).
И все ссылки на теги IPTC можно прочитать из этого PDF
Код (PHP> = 5.4):
<?
define("IPTC_OBJECT_NAME", "005");
define("IPTC_EDIT_STATUS", "007");
define("IPTC_PRIORITY", "010");
define("IPTC_CATEGORY", "015");
define("IPTC_SUPPLEMENTAL_CATEGORY", "020");
define("IPTC_FIXTURE_IDENTIFIER", "022");
define("IPTC_KEYWORDS", "025");
define("IPTC_RELEASE_DATE", "030");
define("IPTC_RELEASE_TIME", "035");
define("IPTC_SPECIAL_INSTRUCTIONS", "040");
define("IPTC_REFERENCE_SERVICE", "045");
define("IPTC_REFERENCE_DATE", "047");
define("IPTC_REFERENCE_NUMBER", "050");
define("IPTC_CREATED_DATE", "055");
define("IPTC_CREATED_TIME", "060");
define("IPTC_ORIGINATING_PROGRAM", "065");
define("IPTC_PROGRAM_VERSION", "070");
define("IPTC_OBJECT_CYCLE", "075");
define("IPTC_BYLINE", "080");
define("IPTC_BYLINE_TITLE", "085");
define("IPTC_CITY", "090");
define("IPTC_PROVINCE_STATE", "095");
define("IPTC_COUNTRY_CODE", "100");
define("IPTC_COUNTRY", "101");
define("IPTC_ORIGINAL_TRANSMISSION_REFERENCE", "103");
define("IPTC_HEADLINE", "105");
define("IPTC_CREDIT", "110");
define("IPTC_SOURCE", "115");
define("IPTC_COPYRIGHT_STRING", "116");
define("IPTC_CAPTION", "120");
define("IPTC_LOCAL_CAPTION", "121");
class IPTC
{
var $meta = [];
var $file = null;
function __construct($filename)
{
$info = null;
$size = getimagesize($filename, $info);
if (isset($info["APP13"])) $this->meta = iptcparse($info["APP13"]);
$this->file = $filename;
}
function getValue($tag)
{
return isset($this->meta["2#$tag"]) ? $this->meta["2#$tag"][0] : "";
}
function setValue($tag, $data)
{
$this->meta["2#$tag"] = [$data];
$this->write();
}
private function write()
{
$mode = 0;
$content = iptcembed($this->binary(), $this->file, $mode);
$filename = $this->file;
if (file_exists($this->file)) unlink($this->file);
$fp = fopen($this->file, "w");
fwrite($fp, $content);
fclose($fp);
}
private function binary()
{
$data = "";
foreach(array_keys($this->meta) as $key)
{
$tag = str_replace("2#", "", $key);
$data .= $this->iptc_maketag(2, $tag, $this->meta[$key][0]);
}
return $data;
}
function iptc_maketag($rec, $data, $value)
{
$length = strlen($value);
$retval = chr(0x1C) . chr($rec) . chr($data);
if ($length < 0x8000)
{
$retval .= chr($length >> 8) . chr($length & 0xFF);
}
else
{
$retval .= chr(0x80) .
chr(0x04) .
chr(($length >> 24) & 0xFF) .
chr(($length >> 16) & 0xFF) .
chr(($length >> 8) & 0xFF) .
chr($length & 0xFF);
}
return $retval . $value;
}
function dump()
{
echo "<pre>";
print_r($this->meta);
echo "</pre>";
}
#requires GD library installed
function removeAllTags()
{
$this->meta = [];
$img = imagecreatefromstring(implode(file($this->file)));
if (file_exists($this->file)) unlink($this->file);
imagejpeg($img, $this->file, 100);
}
}
$file = "photo.jpg";
$objIPTC = new IPTC($file);
//set title
$objIPTC->setValue(IPTC_HEADLINE, "A title for this picture");
//set description
$objIPTC->setValue(IPTC_CAPTION, "Some words describing what can be seen in this picture.");
echo $objIPTC->getValue(IPTC_HEADLINE);
?>
Вы должны доверять своему источнику и не утверждать, что это ваш собственный сценарий: php.net/manual/en/function.iptcembed.php#85887
У меня вопрос, как обновить данные EXIF, например, у меня есть этот тег EXIF: 0x9286 и как его реализовать? Можете ли вы мне помочь?
@SenTisso пример кода очень полный. В чем именно твоя проблема?
Например, здесь php.net/manual/en/function.iptcembed.php#example-3862 вы обновляете данные IPTC с помощью тегов, например 2#120, который является заголовком и таким же, как в вашем ответе, но мне нужно обновить комментарии в изображении, которое имеет тег EXIF (sno.phy.queensu.ca/~phil/exiftool/TagNames/EXIF.html), а тег - 0x9286, и мой вопрос: как это сделать Добавляю туда или как обновить комментарии.
Потому что вы не можете обновить комментарии через IPTC (sno.phy.queensu.ca/~phil/exiftool/TagNames/IPTC.html)
Я пробовал это, чтобы определить новый тег, такой как этот define("COMMENTS", "0x9286"), но это дало мне ошибку неправильного форматирования, поэтому я попробовал этот define("COMMENTS", "9286"), и он не вернул никаких ошибок, но ничего не обновил.
@SenTisso Обратите внимание, что данные EXIF не могут быть изменены, это данные, установленные устройством. Вы должны придерживаться формата IPTC, и наиболее близким к комментариям будет IPTC_CAPTION.
О, я этого не знал, но с помощью exiftool вы можете или даже в проводнике Windows
По крайней мере, с PHP это невозможно, по моему опыту. Вот почему я остановился на IPTC
Как вы думаете, что люди должны ответить на этот вопрос? Да нет? Расскажите нам о формате файлов.