我正在尝试上传一个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; }
我没有使用任何旋转功能,但仍然旋转.我可以使用像imagerotate这样的PHP GD功能,但不希望出现黑色背景等原因.
如果你可以帮助…你最好的人!
我的猜测是,您上传的图像实际上是旋转的,但正在被更正,因为它的EXIF部分中包含旋转数据. (例如,拍摄照片时相机可能会意识到纵向,并将该信息保存在EXIF数据中;某些观看软件知道旋转数据,并在观看时自动旋转照片.)在这种情况下,根据您用来查看的图像,图像可能只会显示为旋转.
您是否使用相同的软件查看“上传之前”和“上传后”图像?如果您使用相同的网络浏览器来查看它们会发生什么,比如说
如果您尝试不同的图片,最好是从不同的来源,会发生什么?你有没有任何软件可以让你查看图像的EXIF数据?寻找“取向”值;除“1”之外的任何内容都意味着图像的旋转设置(对于一个体面的描述,请参阅this page).
因此,总而言之,我认为JPEG文件中的底层图像处于“错误”方向,而EXIF数据包含用于校正该旋转以显示的信息.这很有可能,如果源是例如,刚刚玩过我的iPhone,似乎以横向方式存储其底层图像数据,但是如果图像实际上被采集,则设置EXIF数据(因此应该被显示) )作为肖像.
修复它的最佳方法几乎肯定是在上传后使用PHP EXIF functions检查文件上的EXIF数据,并在保存自己的副本之前根据需要旋转图像以更正方向.