+ (UIImage *)rotateImage:(UIImage *)aImage {
CGImageRef imgRef = aImage.CGImage;
CGFloat width = CGImageGetWidth(imgRef);
CGFloat height = CGImageGetHeight(imgRef);
CGAffineTransform transform = CGAffineTransformIdentity;
CGRect bounds = CGRectMake(0, 0, width, height);
CGFloat scaleRatio = 1;
CGFloat boundHeight;
UIImageOrientation orient = aImage.imageOrientation;
switch(orient) {
case UIImageOrientationUp: //EXIF = 1
transform = CGAffineTransformIdentity;
break;
case UIImageOrientationUpMirrored: //EXIF = 2
transform = CGAffineTransformMakeTranslation(width, 0.0);
transform = CGAffineTransformScale(transform, -1.0, 1.0);
break;
case UIImageOrientationDown: //EXIF = 3
transform = CGAffineTransformMakeTranslation(width, height);
transform = CGAffineTransformRotate(transform, M_PI);
break;
case UIImageOrientationDownMirrored: //EXIF = 4
transform = CGAffineTransformMakeTranslation(0.0, height);
transform = CGAffineTransformScale(transform, 1.0, -1.0);
break;
case UIImageOrientationLeftMirrored: //EXIF = 5
boundHeight = bounds.size.height;
bounds.size.height = bounds.size.width;
bounds.size.width = boundHeight;
transform = CGAffineTransformMakeTranslation(height, width);
transform = CGAffineTransformScale(transform, -1.0, 1.0);
transform = CGAffineTransformRotate(transform, 3.0 * M_PI / 2.0);
break;
case UIImageOrientationLeft: //EXIF = 6
boundHeight = bounds.size.height;
bounds.size.height = bounds.size.width;
bounds.size.width = boundHeight;
transform = CGAffineTransformMakeTranslation(0.0, width);
transform = CGAffineTransformRotate(transform, 3.0 * M_PI / 2.0);
break;
case UIImageOrientationRightMirrored: //EXIF = 7
boundHeight = bounds.size.height;
bounds.size.height = bounds.size.width;
bounds.size.width = boundHeight;
transform = CGAffineTransformMakeScale(-1.0, 1.0);
transform = CGAffineTransformRotate(transform, M_PI / 2.0);
break;
case UIImageOrientationRight: //EXIF = 8
boundHeight = bounds.size.height;
bounds.size.height = bounds.size.width;
bounds.size.width = boundHeight;
transform = CGAffineTransformMakeTranslation(height, 0.0);
transform = CGAffineTransformRotate(transform, M_PI / 2.0);
break;
default:
[NSException raise:NSInternalInconsistencyException format:@"Invalid image orientation"];
}
UIGraphicsBeginImageContext(bounds.size);
CGContextRef context = UIGraphicsGetCurrentContext();
if (orient == UIImageOrientationRight || orient == UIImageOrientationLeft) {
CGContextScaleCTM(context, -scaleRatio, scaleRatio);
CGContextTranslateCTM(context, -height, 0);
} else {
CGContextScaleCTM(context, scaleRatio, -scaleRatio);
CGContextTranslateCTM(context, 0, -height);
}
CGContextConcatCTM(context, transform);
CGContextDrawImage(UIGraphicsGetCurrentContext(), CGRectMake(0, 0, width, height), imgRef);
UIImage *imageCopy = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return imageCopy;
}
分享到:
相关推荐
Swift是苹果公司为iOS、macOS、watchOS和tvOS平台推出的一种强大的...通过创建自定义的`UIImage`子类和适当的方法,我们可以轻松地实现对拍照图片方向的自动修复,确保在应用中始终以正确的方式展示用户拍摄的照片。
在iOS设备上,如果用户在横屏或竖屏状态下拍照,Exif信息会记录这一方向,使得图片在读取Exif信息的环境中能够保持正确的展示方向。 当iOS设备的图片被上传到服务器,例如一个基于Java的系统,如果不考虑Exif信息,...
在iOS开发中,实现“ios拍照后按范围裁剪图片demo”涉及到多个关键知识点,主要集中在用户界面(UI)设计、图像处理以及照片权限管理。下面将详细解释这些技术要点。 首先,我们要创建一个自定义的拍照页面。这通常...
总的来说,peasUpload是一个实用的前端图片上传解决方案,它通过JavaScript提供了便捷的图片压缩和方向修正功能,有助于提升用户体验和项目性能。对于任何需要用户上传图片的Web应用,这都是一个值得考虑的工具。
JavaScript(JS)作为Web开发中的主要脚本语言,通常用于处理用户上传的图片,这时就需要对Exif信息进行处理来修正图片的朝向。 Exif是一种扩展的JPEG格式,用于存储图像文件的附加信息,如相机型号、拍摄时间、...
- 图片旋转:由于不同设备的默认旋转角度可能不同,拍照后可能需要修正图片的方向。 以上就是关于"android系统拍照及裁切源码"所涉及的主要知识点。在实际开发中,还需要考虑性能优化、内存管理、兼容性等问题,...
4. 处理完毕后,将修正方向后的图片数据上传到服务器。 ### 具体代码实现 在Vue2.0项目中实现拍照功能的组件模板部分,主要代码包括: - 使用`<input type="file">`控件,设置`accept="image/*"`来限制只允许图片...
当使用`UIImagePickerControllerEditedImage`来获取照片时,系统会自动处理图片的旋转问题,返回的图片`imageOrientation`属性为`UIImageOrientationUp`,表示正常方向,因此后续处理不会导致旋转。 2. **手动修正...
因此,保存前需要检查并修正图片的旋转角度,可以使用ExifInterface类来读取图片的EXIF信息。 以上就是Android拍照保存技术的主要内容。理解并掌握这些知识点,对于开发Android应用尤其是涉及到多媒体处理的应用至...
照片旋转问题通常发生在拍摄后,由于设备的方向传感器信息、相机硬件配置和Android系统对JPEG图片元数据的处理方式不同,导致图片可能以错误的角度显示。例如,当用户横屏拍摄时,实际存储的照片可能会被标记为竖屏...
本文中,使用了Exif库读取图片的Exif信息,特别是 Orientation标签,来了解拍照时的设备方向,然后在画布上重新绘制图片,修正旋转。 7. FileReader API:FileReader接口提供了一种读取文件(比如用户通过元素选择...
iPhone拍照可能会因为设备方向导致照片旋转。这可以通过检测图片的Exif(Exchangeable image file format)信息来解决,特别是Orientation字段。利用JavaScript库如exif-js,可以读取并修正Exif信息,确保图片正常...
市面上有很多图片编辑软件或照片管理工具都支持修正照片的旋转问题。例如,Google相册自动旋转功能就可以在上传照片后自动调整方向。 此外,对于三星设备,有时问题可能源于系统设置。检查手机的相机设置,确保...
- 设想从上方拍摄操场的照片,让学生思考照片中的方向布局。 2. **探究交流** - **活动**:让学生尝试在空白的平面图上标记出操场周围的建筑物(如体育馆、教学楼等),以此来学习如何在图上表示方向。 - **讨论*...
这个问题可能会影响用户的体验,比如在查看照片时需要手动旋转屏幕或者使用第三方应用来修正。 首先,我们需要理解Android系统是如何处理图像的元数据,特别是Exif(Exchangeable Image File Format)信息。Exif...
为解决这个问题,开发者需要在拍照后对图片的Exif信息进行修正,确保图片的旋转角度与实际方向相符。 3. **图片预览与查看**:自定义相机还实现了图片预览功能,这可能基于ImageView组件来显示。在拍摄后,即时更新...
`imgPreview`方法首先使用`Exif.getData`获取图片的Exif信息,包括拍摄方向(Orientation),这将用于修正可能的旋转问题。 接着,如果浏览器支持FileReader,我们将图片转换为Base64格式,并在读取完成后设置预览...
在移动设备上,尤其是使用iOS系统的iPhone,用户在拍照时,设备会记录下拍摄时的方向信息,这被称为EXIF(Exchangeable Image File Format)数据。EXIF信息包含了拍摄时的相机方向,例如横屏或竖屏。当这些图片被...
这种方法虽然简单易懂,但用户体验可能不佳,因为用户需要额外的操作来修正图片方向。 第二种解决方式更加智能,它涉及到读取图片的Exif信息来自动判断图片的旋转角度。Exif信息存储了相机拍摄时的各种参数,包括...