Как я могу считать данные XMP с JPG с PHP?

Можно перейти непосредственно в Objective C со следующими преимуществами:

  1. Вы изучите "немного" C в пути.
  2. Вы изучите части C, которые важны для Вас.

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

можно всегда совершенствовать знание C позже, если Вы заинтересованы более низким программированием уровня.

15
задан Liam 16 October 2009 в 14:04
поделиться

3 ответа

Данные XMP буквально встроены в файл изображения, поэтому их можно извлечь с помощью строковых функций PHP из самого файла изображения.

Ниже показана эта процедура (я использую SimpleXML , но любой другой XML API или даже простой и умный синтаксический анализ строки может дать вам такие же результаты):

$content = file_get_contents($image);
$xmp_data_start = strpos($content, '<x:xmpmeta');
$xmp_data_end   = strpos($content, '</x:xmpmeta>');
$xmp_length     = $xmp_data_end - $xmp_data_start;
$xmp_data       = substr($content, $xmp_data_start, $xmp_length + 12);
$xmp            = simplexml_load_string($xmp_data);

Всего два замечания:

  • XMP интенсивно использует пространства имен XML, поэтому вам придется следить при анализе данных XMP с помощью некоторых инструментов XML.
  • учитывая возможный размер файлов изображений, вы, возможно, не сможете использовать file_get_contents () , поскольку эта функция загружает все изображение в память . Использование fopen () для открытия ресурса файлового потока и проверка блоков данных на наличие ключевых последовательностей и значительно сократит объем памяти.
22
ответ дан 1 December 2019 в 00:37
поделиться

Я отвечаю на это только спустя столько времени, потому что это лучший результат при поиске в Google того, как анализировать данные XMP. Я несколько раз видел, как этот почти идентичный фрагмент кода использовался в коде, и это ужасная трата памяти. Вот пример метода fopen (), который Стефан упоминает после своего примера.

<?php

function getXmpData($filename, $chunkSize)
{
    if (!is_int($chunkSize)) {
        throw new RuntimeException('Expected integer value for argument #2 (chunkSize)');
    }

    if ($chunkSize < 12) {
        throw new RuntimeException('Chunk size cannot be less than 12 argument #2 (chunkSize)');
    }

    if (($file_pointer = fopen($filename, 'r')) === FALSE) {
        throw new RuntimeException('Could not open file for reading');
    }

    $startTag = '<x:xmpmeta';
    $endTag = '</x:xmpmeta>';
    $buffer = NULL;
    $hasXmp = FALSE;

    while (($chunk = fread($file_pointer, $chunkSize)) !== FALSE) {

        if ($chunk === "") {
            break;
        }

        $buffer .= $chunk;
        $startPosition = strpos($buffer, $startTag);
        $endPosition = strpos($buffer, $endTag);

        if ($startPosition !== FALSE && $endPosition !== FALSE) {
            $buffer = substr($buffer, $startPosition, $endPosition - $startPosition + 12);
            $hasXmp = TRUE;
            break;
        } elseif ($startPosition !== FALSE) {
            $buffer = substr($buffer, $startPosition);
            $hasXmp = TRUE;
        } elseif (strlen($buffer) > (strlen($startTag) * 2)) {
            $buffer = substr($buffer, strlen($startTag));
        }
    }

    fclose($file_pointer);
    return ($hasXmp) ? $buffer : NULL;
}
12
ответ дан 1 December 2019 в 00:37
поделиться

Я разработал расширение Xmp Php Tookit: это расширение php5, основанное на наборе инструментов adobe xmp, который предоставляет основные классы и методы для чтения/записи/разбора метаданных xmp из jpeg, psd, pdf, видео, аудио.... Это расширение работает под лицензией gpl. Скоро выйдет новый релиз для php 5.3 (сейчас совместим только с php 5.2.x) и будет доступен на windows и macosx (сейчас только для freebsd и linux систем). http://xmpphptoolkit.sourceforge.net/

1
ответ дан 1 December 2019 в 00:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: