Удаление данных GPS EXIF ​​с помощью PHP - PullRequest
2 голосов
/ 22 июля 2011

Этим утром меня разбудил звонок от клиента, работающего на веб-сайте Concrete5, который сказал, что любые изображения, загруженные на их веб-сайт, внезапно перестали работать. После часа или двух экспериментов и исследований я понял основную причину проблемы. Пару дней назад у этого клиента появился новый мобильный телефон (Samsung Epic), который записывает данные GPS EXIF ​​для каждого изображения. Она использовала этот мобильный телефон в качестве своей камеры, и по какой-либо причине, если на изображении есть данные GPS, тогда Concrete5 взрывается. Я подозреваю, что это потому, что данные GPS хранятся в виде массива, а не строки.

Я пытался работать над общей функцией удаления любых данных EXIF, если существуют данные GPS EXIF. Вот что у меня есть (это находится в tools/files/importers):

$fileExtension = strtolower(substr($_FILES['Filedata']['name'], strrpos($_FILES['Filedata']['name'], '.')));
if ($fileExtension == ".jpg" || $fileExtension == ".jpeg"){
    /* File is a JPEG */
    if (exif_read_data($_FILES['Filedata']['tmp_name'], 'GPS') !== false){
        /* File contains GPS EXIF data */
        if (extension_loaded('magickwand') && function_exists("NewMagickWand")) {
            /* ImageMagick is installed and working */
            $img = new Imagick($_FILES['Filedata']['tmp_name']);
            $img->stripImage();
            $img->writeImage($_FILES['Filedata']['tmp_name']);
            $img->clear();
        } elseif (extension_loaded('gd') && function_exists('gd_info')) {
            /* GD is installed and working */
            $img = imagecreatefromjpeg($_FILES['Filedata']['tmp_name']);
            imagejpeg ($img, $_FILES['Filedata']['tmp_name']);
        } else {
            /* Neither ImageMagick nor GD are installed */
            die('No appropriate image handler to remove EXIF data');    
        }
    }
}

Даже с этим кодом, когда я загружаю изображение, данные EXIF ​​остаются. Я попытался разместить команды die() по всему коду, чтобы точно определить путь, по которому идет код. На этом конкретном сервере я никогда не вхожу в блок if (extension_loaded('magickwand') && function_exists("NewMagickWand")), однако я вхожу в блок elseif (extension_loaded('gd') && function_exists('gd_info')). Поэтому мой код ImageMagick может быть просто отличным, но похоже, что GD неправильно удаляет данные EXIF.

Кто-нибудь имеет опыт работы с ImageMagick / GD или с данными PHP и EXIF?

1 Ответ

1 голос
/ 22 июля 2011

Я выполнил тест на своем локальном компьютере, пытаясь удалить данные EXIF, следуя вашему методу, и это сработало ~ Он добавил эти данные комментария: СОЗДАТЕЛЬ: gd-jpeg v1.0 (с использованием IJG JPEG v80), качество = 100

Какую версию gd-jpeg вы используете?

Кроме того, вы пытались var_dump позвонить на imagejpeg? Это может быть неудачно ~ Мне никогда не удавалось записать в папку /tmp любого сервера. Возможно, вам следует установить файл назначения где-нибудь под рутом.

...