img标签中的图像旋转不正确

时间:2014-11-02 07:59:40

标签: php html image image-processing exif

我使用标准的php表单上传一些图片。

问题在于,当我使用img标签显示一些图像时

<img src="http://www.example.com/image.jpg" alt="">

我得到错误的旋转,有时图像是颠倒的,有时旋转45度。

如果我通过访问

直接在浏览器中加载图像
http://www.example.com/image.jpg

图像显示正确。

什么似乎是问题,我该如何解决这个问题?

1 个答案:

答案 0 :(得分:3)

我发现了问题。没有正确显示的图像是从三星和iPhone等移动设备上传的。所以EXIF方向是移动的方向。

要查看图片的确切exif,您可以在http://regex.info/exif.cgi进行测试。即使您直接在Chrome或Firefox等浏览器中打开图像,也会看到图像的方向正确,但如果使用html img标记加载图像,则会显示exif方向。

因此,最好的解决方案是在上传图像之前检查exif方向,然后使用php函数将其转换为正确的方向。

function image_fix_orientation($path)
{
    $image = imagecreatefromjpeg($path);
    $exif = exif_read_data($path);

    if (empty($exif['Orientation']))
    {
        return false;
    }

    switch ($exif['Orientation'])
    {
        case 3:
            $image = imagerotate($image, 180, 0);
            break;
        case 6:
            $image = imagerotate($image, - 90, 0);
            break;
        case 8:
            $image = imagerotate($image, 90, 0);
            break;
    }

    imagejpeg($image, $path);

    return true;
}

// For JPEG image only
image_fix_orientation('/path/to/image.jpg');