PHP获取图像exif并旋转/调整图像大小
我正在构建一个应用程序,你可以用手机拍照并上传图像,但你拍摄的肖像图像会自动旋转到横向。相信我,我在发帖前做了很多尝试和研究 我没有先进的PHP技能,但我有一个下面的代码,处理调整大小好,但它不做旋转 有人认为它有什么直接的问题吗PHP获取图像exif并旋转/调整图像大小,php,image,rotation,Php,Image,Rotation,我正在构建一个应用程序,你可以用手机拍照并上传图像,但你拍摄的肖像图像会自动旋转到横向。相信我,我在发帖前做了很多尝试和研究 我没有先进的PHP技能,但我有一个下面的代码,处理调整大小好,但它不做旋转 有人认为它有什么直接的问题吗 // resizeImage function loadResize($imageName, $imageWidth, $imageHeight, $resizeType) { list($width, $height, $type, $attr) = getimag
// 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);
}
//调整图像大小
函数loadResize($imageName、$imageWidth、$imageHeight、$resizeType){
列表($width、$height、$type、$attr)=getimagesize($imageName);
如果($resizeType==“纵向”&&$height saveImage($imageName,100);
}
感谢您的帮助!在您的示例中,您没有调用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);
?>
我想从网站用户的角度回答这个问题。 **因为我最近也遇到了同样的问题 首先,我从android设备或PC/MAC上传图像文件(jpg)没有问题。上传后图像的方向是正确的 然而,大部分问题都是iOS设备的问题,尤其是从iPhone上拍摄的照片 我尝试了很多方法,包括上面的建议,并使用代码info(0)和info(1)来获得宽度和高度 问题是iPhone上的图像在拍照后不会自动设置方向。你可以通过手机的默认照片编辑器运行每个图像文件,旋转它,保存它,然后再次旋转到正确的方向并再次保存,问题就解决了 但要求网站用户这样做是不可能的 因为超过90%的问题与来自iOS设备的照片图像有关。 有趣的是,所有的物体都以相同的角度(逆时针90度)转向风景 因此,我的最终解决方案是为“横向”图像添加一个复选框 上传图像文件时,如果是横向格式,用户只需单击横向即可 程序将检查宽度除以高度是否小于1。 如果是这样的话,它会将其旋转到横向(我的例子中使用90)。 *备注:事实上,我对“风景图片”一点问题都没有 然后,如果图像是“protrait”,用户将复选框保留为未选中状态。 现在程序将检查宽度除以高度是否大于1。 如果是这样,它将把它旋转到protrait(在我的例子中使用-90)。 *备注:到目前为止,这已经解决了我所有iPhone照片的问题 所以,对于剩下的10%的问题(如果有),我只要求用户手动使用PC上的照片编辑器再次打开并保存图像文件 这不是太多的工作,问题已经解决了。
*备注:到目前为止,我没有接到任何关于这个问题的电话。我建议您使用PHP中的imageMagic函数进行检查,这些函数非常简单且有用!好的,我会检查它!谢谢!在您的解决方案中,图像的宽度和高度会被翻转,因此图像会被裁剪