GD - 旋转图像在IE和Opera中不起作用

时间:2009-08-05 15:44:45

标签: php internet-explorer gd opera

我创建了一个旋转定义图像的函数。它在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 个答案:

答案 0 :(得分:5)

问题绝对不是您正在使用的浏览器,因为轮换是在服务器端完成的。

您可能遇到了缓存问题或用于调用该函数的代码问题。

你是:

  • 使用JavaScript启动重新加载?
    您的JavaScript代码可能是此处的问题。

  • 发送正确的无缓存标头?
    如果没有,您可能会遇到图像缓存在浏览器上的情况,这就是您没有看到更改的原因。要么发送正确的Cache-controlExpires标头,要么将随机标识符添加到图片网址{?_=$x,其中$x = time()将正常工作...标题是首选。)

  • 发送正确的Content-type标题?
    在某些浏览器中,不发送正确的标头可能会导致不稳定的行为。您可能想尝试使用header('Content-type: image/jpeg')

  • 仅发送没有任何额外字符的图像数据?
    确保不输出除图像以外的任何内容。您的输出流不得包含任何额外字符,包括空格。

答案 1 :(得分:0)

尝试点击刷新!或清除缓存和重新加载
这是因为图像保存在浏览器缓存中,浏览器知道它有它,但它不知道它已被更改。其中一个技巧是使用随机生成的名称将图像保存在服务器端。

答案 2 :(得分:0)

我怀疑您没有为图片发送适当的Content-Type标头。或者,图像可能会略有损坏(通常由源代码中的php标记之前/之后的空格引起)。将Firefox中的图像保存在硬盘驱动器上,在文本编辑器(如Editplus)中打开它,检查它是否以空格开头或结尾。

答案 3 :(得分:0)

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