【问题标题】:GD - rotating image doesn't work in IE and OperaGD - 旋转图像在 IE 和 Opera 中不起作用
【发布时间】:2009-08-05 15:44:45
【问题描述】:

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

【问题讨论】:

    标签: php internet-explorer gd opera


    【解决方案1】:

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

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

    你是:

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

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

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

          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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2012-11-26
            • 2012-11-08
            • 1970-01-01
            • 2010-10-15
            • 2018-04-07
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多