1

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

4 回答 4

5

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

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

你是:

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

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

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

  • 只发送图像数据而不发送任何额外字符?
    确保您不输出除图像以外的任何其他内容。您的输出流不能有任何额外的字符,包括空格。

于 2009-08-05T15:49:12.473 回答
0

尝试点击刷新!或者清除缓存并重新加载。

这是因为图像保存在浏览器缓存中,浏览器知道它有它,但它不知道它已被更改。技巧之一是使用随机生成的名称将图像保存在服务器端。

于 2009-08-05T15:49:15.593 回答
0

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

于 2009-08-05T15:50:40.707 回答
0

PHP 是服务器端的,所以如果它在一个浏览器上运行,代码运行良好,问题出在浏览器上。我会假设 IE 和歌剧正在缓存图像。如果可能,请设置图像的标题,以免它们被缓存:

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

于 2009-08-05T15:52:17.053 回答