GD - вращающееся изображение не работает в IE и Opera - PullRequest
1 голос
/ 05 августа 2009

Я создал функцию, которая вращает определенное изображение. Он прекрасно работает в Firefox, но в IE и Opera ничего не происходит - изображение перезагружается, но не поворачивается. Кто-нибудь знает почему? Вот код:

function rotateImage($direction, $id, $angle) {
    $dir = opendir($direction);
    if ($img = imagecreatefromjpeg($_SESSION['files'][$id]['large'])) {
        $width = imagesx ( $img );
        $height = imagesy ( $img );
        $rotate = imagerotate($img, $angle, 0);
        imagejpeg($rotate, $_SESSION['files'][$id]['large'], 100);
    }
    else {
        echo '<p>Error: image cannot be rotated</p>';
    }
    closedir($dir);
}

Ответы [ 4 ]

5 голосов
/ 05 августа 2009

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

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

Вы:

  • Использование JavaScript для запуска перезагрузки?
    Ваш код JavaScript может быть проблемой здесь.

  • Отправка правильных заголовков без кэширования?
    В противном случае вы можете столкнуться с ситуацией, когда изображение кэшируется в браузере, поэтому вы не видите свои изменения. Либо отправьте соответствующие заголовки Cache-control и Expires, либо добавьте случайный идентификатор к URL-адресу изображения (?_=$x, где $x = time() будет работать нормально ... Заголовки предпочтительны).

  • Отправка правильного заголовка Content-type?
    Неправильная отправка заголовков может вызвать ошибочное поведение в некоторых браузерах. Вы можете попробовать использовать header('Content-type: image/jpeg')

  • Отправка только данных изображения без каких-либо дополнительных символов?
    Убедитесь, что вы не выводите ничего, кроме изображения. Ваш выходной поток не должен содержать никаких дополнительных символов, включая пробелы.

0 голосов
/ 05 августа 2009

PHP на стороне сервера, поэтому, если он работает на одном браузере, код работает нормально, и проблема заключается в браузере Я бы предположил, что IE и Opera кешируют изображение. Если возможно, установите заголовки для изображений, чтобы они не кэшировались:

header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1 header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the past

0 голосов
/ 05 августа 2009

Я подозреваю, что вы не отправляете соответствующий заголовок Content-Type для изображения. Кроме того, изображение может быть слегка повреждено (обычно это происходит из-за пробелов до / после тегов php в вашем исходном коде). Сохраните изображение из Firefox на жестком диске, откройте его в текстовом редакторе (например, Editplus) и убедитесь, что оно не начинается и не заканчивается пробелом.

0 голосов
/ 05 августа 2009

Попробуйте нажать обновить! Или очистить кеш и перезагрузить.

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

...