php - 上传时图像自动旋转

标签 php rotation gd base64

我正在尝试上传 Base64 编码的图像并在解码后保存。图像正在上传并保存,我可以使用 URL 等方式访问它..但是图像逆时针旋转 90 度,我不知道为什么!!

我获取编码数据的地方很好,把它放在<img />中工作正常!

function saveImageData($base64Data) {
    $base64_decoded = base64_decode($base64Data);
    $im = imagecreatefromstring($base64_decoded);
    if ($im !== false) {
        $imagepath = '/public/uploads/' . time() . '.jpg';
        imagejpeg($im, $imagepath);
        chmod($imagepath, 0755);
        imagedestroy($im);
    } else {
        return false;
    }
    return $imagepath;
}

我没有使用任何旋转函数,但它仍然在旋转。我可以使用 PHP GD 函数,例如 imagerotate,但由于黑色背景等原因不想使用。

如果你能帮忙......你就是最棒的人!!

最佳答案

我的猜测是,您上传的图像实际上已旋转,但正在被纠正,因为它的 EXIF 部分中包含旋转数据。 (例如,相机在拍照时可能会识别纵向方向,并将该信息保存在 EXIF 数据中;某些查看软件会识别旋转数据,并在查看照片时自动旋转照片。) ,图像可能只是看起来为您旋转,具体取决于您用来查看它的内容。

您是否使用同一软件查看“上传前”和“上传后”图像?如果您使用同一个网络浏览器查看它们,会发生什么?

如果您尝试不同的图像(最好是来自不同的来源)会发生什么?有没有可以查看图像 EXIF 数据的软件?寻找“方向”值;除“1”之外的任何值都表示图像已设置旋转(有关正确的描述,请参阅 this page。)

因此,总而言之,我想说 JPEG 文件中的基础图像处于“错误”方向,并且 EXIF 数据包含用于纠正显示旋转的信息。如果源是 iPhone(刚刚玩过我的 iPhone),它似乎以横向方式存储其底层图像数据,但如果图像是实际拍摄的(因此应该显示),则设置 EXIF 数据,这很有可能)作为肖像。

解决此问题的最佳方法几乎肯定是在上传后使用 PHP EXIF functions 检查文件上的 EXIF 数据。并根据需要旋转图像以纠正方向,然后再保存您自己的副本。

关于php - 上传时图像自动旋转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5301006/

相关文章:

php - 在 PHP 中启用 GD 的问题

php - 从 PHP 中的图像中裁剪空白

php - 如何使用来自支付网关的重定向链接更新 mysql 数据库?

php - MySQL 查询中的 DATE_FORMAT()

ios - 在容器 View 中均匀分布多个 View

php - 如何使用 PHP 和 GD 保存图像

javascript - 隐藏输入最大值大小

php - 实时比分表最佳实践

assembly - mips汇编代码,使用移位函数的逻辑运算

javascript - 用两个手指旋转谷歌地图javascript中的 map