图像在上传时自动旋转

det*_*etj 13 php base64 gd rotation

我正在尝试上传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;
}
Run Code Online (Sandbox Code Playgroud)

我没有使用任何旋转功能,但它仍在旋转.我可以使用像Imagerotate这样的PHP GD函数,但不希望出于黑色背景等原因.

如果你可以帮助......你是最棒的人!!

Mat*_*son 15

我的猜测是你上传的图像实际上是旋转的,但正在被修正,因为它在EXIF部分包含旋转数据.(例如,相机在拍照时可能会发现纵向方向,并将该信息保存在EXIF数据中;某些查看软件会识别旋转数据,并在查看时自动旋转照片.)在这种情况下,图像可能只是出现为你转动,这取决于你使用的查看它的内容.

您是否正在使用相同的软件查看"上传前"和"上传后"图片?如果你使用相同的网络浏览器查看它们会发生什么呢?

如果你尝试不同的图像,最好是从不同的来源,会发生什么?您是否有任何软件可以查看图像的EXIF数据?寻找"定位"值; "1"以外的任何内容表示图像的旋转设置(请参阅此页面以获得合适的描述.)

因此,总而言之,我会说JPEG文件中的基础图像处于"错误"方向,而EXIF数据包含用于校正该旋转以供显示的信息.如果源是例如刚刚与我玩过的iPhone,它很可能是以横向方式存储其底层图像数据,但如果实际拍摄了图像则设置EXIF数据(因此应该显示) )作为肖像.

修复它的最佳方法几乎可以肯定是在上传后检查文件上的EXIF数据,使用PHP EXIF函数并在保存自己的副本之前根据需要旋转图像以更正方向.