我正在构建一个应用程序,您可以拍摄照片并使用手机上传图像,但您拍摄的图像会自动旋转到横向。相信我,我已经尝试了很多,并在发布之前进行了研究!
我没有PHP的高级技能,但是我有一个代码来处理调整大小的好处,但它不会轮换。
有没有人看到它的任何直接问题?
// resizeImage
function loadResize($imageName, $imageWidth, $imageHeight, $resizeType) {
list($width, $height, $type, $attr) = getimagesize($imageName);
if($resizeType=="portrait" && $height<=$imageHeight) {
return;
}
if($resizeType=="landscape" && $width<=$imageWidth) {
return;
}
$exif = exif_read_data($imageName);
if (!empty($exif['Orientation'])) {
switch ($exif['Orientation']) {
case 3:
$imageName = imagerotate($imageName, 180, 0);
break;
case 6:
$imageName = imagerotate($imageName, -90, 0);
break;
case 8:
$imageName = imagerotate($imageName, 90, 0);
break;
}
}
// *** 1) Initialise / load image
$resizeObj = new resize($imageName);
// *** 2) Resize image (options: exact, portrait, landscape, auto, crop)
$resizeObj -> resizeImage($imageWidth, $imageHeight, $resizeType);
// *** 3) Save image
$resizeObj -> saveImage($imageName, 100);
}
感谢您的帮助!
答案 0 :(得分:1)
您不要在示例中调用loadResize函数。
使用GD库的解决方案。此解决方案仅查找exif数据以查看是否应旋转图像。它没有考虑实际的宽高比。
<?php
$imageName = "image.jpg";
$exif = exif_read_data($imageName);
if (!empty($exif['Orientation'])) {
switch ($exif['Orientation']) {
case 3:
$angle = 180 ;
break;
case 6:
$angle = -90;
break;
case 8:
$angle = 90;
break;
default:
$angle = 0;
break;
}
}
if (preg_match("/.*\.jpg/i", $imageName))
$source = imagecreatefromjpeg($imageName);
else
$source = imagecreatefrompng($imageName);
$source = imagerotate($source, $angle, 0);
imagejpeg($source, $imageName);
?>
答案 1 :(得分:0)
我想从网站用户的角度回答这个问题。 **因为我最近遇到了同样的问题。
首先,我没有从Android设备或PC / MAC上传图像文件(jpg)的问题。上传后图像的方向是正确的。
然而,大多数问题是iOS设备,尤其是从iPhone拍摄的照片。 (我有一个iPhone 6 Plus 64GB)
我尝试了很多方法,包括上面的建议,并使用代码信息(0)&amp;获取宽度和高度的信息(1)。
问题在于,拍摄照片后,iPhone中的图像不会自动设置方向。可以通过手机的默认照片编辑器运行每个图像文件,旋转,保存,然后再次旋转到正确的方向并再次保存,问题就解决了。
但是要求网站用户这样做是不可能的。
由于超过90%的问题与来自iOS设备的照片图像有关。 而有趣的部分是所有的人像都以同样的角度转向景观。 (逆时针90度)。
因此,我的最终解决方案是包含“横向”图像的复选框。
上传图像文件时,如果是横向格式,用户只需点击横向即可。
程序将检查宽度除以高度是否小于1。 如果是这样,它会将其旋转为横向(我的情况下使用90)。 *评论:实际上,我对“风景图像”没有任何问题。
然后,如果图像是“protrait”,则用户不选中该复选框。 现在程序将检查宽度除以高度是否大于1。 如果是这样,它会将它旋转到protrait(在我的情况下我使用-90)。 *评论:到目前为止,这已经解决了iPhone照片的所有问题。
因此,对于剩余的10%问题(如果有的话),我只是要求用户手动使用PC上的照片编辑器再次打开并保存图像文件。
这不是太多的工作,问题就解决了。 *评论:到目前为止,在此之后我再也没有关于这个问题的电话了。