У меня есть приложение iOS, которое я создаю. Когда я загружаю портретное изображение на сервер, а сервер изменяет размер изображения, изображение поворачивается в альбомное. Это происходит только при загрузке iPhone. Загрузка из настольного приложения работает нормально. Почему это происходит, и как я могу это исправить?Загрузка фотографий из моего приложения iOS поворачивается
0
A
ответ
0
@Andew
Создать одну категорию UIImage .. Написать код в UIImage + FixOrientation.h Файл
#import <UIKit/UIKit.h>
@interface UIImage (FixOrientation)
- (UIImage *)fixOrientation;
@end
И в #import "UIImage + FixOrientation.h" Файл
#import "UIImage+FixOrientation.h"
@implementation UIImage (FixOrientation)
- (UIImage *)fixOrientation {
// No-op if the orientation is already correct
if (self.imageOrientation == UIImageOrientationUp) return self;
// We need to calculate the proper transformation to make the image upright.
// We do it in 2 steps: Rotate if Left/Right/Down, and then flip if Mirrored.
CGAffineTransform transform = CGAffineTransformIdentity;
switch (self.imageOrientation) {
case UIImageOrientationDown:
case UIImageOrientationDownMirrored:
transform = CGAffineTransformTranslate(transform, self.size.width, self.size.height);
transform = CGAffineTransformRotate(transform, M_PI);
break;
case UIImageOrientationLeft:
case UIImageOrientationLeftMirrored:
transform = CGAffineTransformTranslate(transform, self.size.width, 0);
transform = CGAffineTransformRotate(transform, M_PI_2);
break;
case UIImageOrientationRight:
case UIImageOrientationRightMirrored:
transform = CGAffineTransformTranslate(transform, 0, self.size.height);
transform = CGAffineTransformRotate(transform, -M_PI_2);
break;
case UIImageOrientationUp:
case UIImageOrientationUpMirrored:
break;
}
switch (self.imageOrientation) {
case UIImageOrientationUpMirrored:
case UIImageOrientationDownMirrored:
transform = CGAffineTransformTranslate(transform, self.size.width, 0);
transform = CGAffineTransformScale(transform, -1, 1);
break;
case UIImageOrientationLeftMirrored:
case UIImageOrientationRightMirrored:
transform = CGAffineTransformTranslate(transform, self.size.height, 0);
transform = CGAffineTransformScale(transform, -1, 1);
break;
case UIImageOrientationUp:
case UIImageOrientationDown:
case UIImageOrientationLeft:
case UIImageOrientationRight:
break;
}
// Now we draw the underlying CGImage into a new context, applying the transform
// calculated above.
CGContextRef ctx = CGBitmapContextCreate(NULL, self.size.width, self.size.height,
CGImageGetBitsPerComponent(self.CGImage), 0,
CGImageGetColorSpace(self.CGImage),
CGImageGetBitmapInfo(self.CGImage));
CGContextConcatCTM(ctx, transform);
switch (self.imageOrientation) {
case UIImageOrientationLeft:
case UIImageOrientationLeftMirrored:
case UIImageOrientationRight:
case UIImageOrientationRightMirrored:
// Grr...
CGContextDrawImage(ctx, CGRectMake(0,0,self.size.height,self.size.width), self.CGImage);
break;
default:
CGContextDrawImage(ctx, CGRectMake(0,0,self.size.width,self.size.height), self.CGImage);
break;
}
// And now we just create a new UIImage from the drawing context
CGImageRef cgimg = CGBitmapContextCreateImage(ctx);
UIImage *img = [UIImage imageWithCGImage:cgimg];
CGContextRelease(ctx);
CGImageRelease(cgimg);
return img;
}
@end
И в вашем методе делегирования. Используйте [img **fixOrientation**];
Метод
#pragma mark - Camera ImagePickerController Delegates
- (void)imagePickerController:(UIImagePickerController *)picker1 didFinishPickingMediaWithInfo:(NSDictionary *)info
{
[picker1 dismissViewControllerAnimated:YES completion:nil];
NSString *mediaType = info[UIImagePickerControllerMediaType];
if ([mediaType isEqualToString:(NSString *)kUTTypeImage])
{
UIImage *img=info[UIImagePickerControllerEditedImage];
//use this method
[img fixOrientation];
//here you can get perfect Image
[imgUserImage setImage:img];
}
}
Другое решение
// я нашел другое решение, может оказаться полезной для вас
// метод вызова
изображение = [само scaleAndRotateImage: изображение];
- (void)scaleAndRotateImage:(UIImage *)image
{
int kMaxResolution = 320; // Or whatever
CGImageRef imgRef = image.CGImage;
CGFloat width = CGImageGetWidth(imgRef);
CGFloat height = CGImageGetHeight(imgRef);
CGAffineTransform transform = CGAffineTransformIdentity;
CGRect bounds = CGRectMake(0, 0, width, height);
if (width > kMaxResolution || height > kMaxResolution) {
CGFloat ratio = width/height;
if (ratio > 1) {
bounds.size.width = kMaxResolution;
bounds.size.height = bounds.size.width/ratio;
}
else {
bounds.size.height = kMaxResolution;
bounds.size.width = bounds.size.height * ratio;
}
}
CGFloat scaleRatio = bounds.size.width/width;
CGSize imageSize = CGSizeMake(CGImageGetWidth(imgRef), CGImageGetHeight(imgRef));
CGFloat boundHeight;
UIImageOrientation orient = image.imageOrientation;
switch(orient) {
case UIImageOrientationUp: //EXIF = 1
transform = CGAffineTransformIdentity;
break;
case UIImageOrientationUpMirrored: //EXIF = 2
transform = CGAffineTransformMakeTranslation(imageSize.width, 0.0);
transform = CGAffineTransformScale(transform, -1.0, 1.0);
break;
case UIImageOrientationDown: //EXIF = 3
transform = CGAffineTransformMakeTranslation(imageSize.width, imageSize.height);
transform = CGAffineTransformRotate(transform, M_PI);
break;
case UIImageOrientationDownMirrored: //EXIF = 4
transform = CGAffineTransformMakeTranslation(0.0, imageSize.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(imageSize.height, imageSize.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, imageSize.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(imageSize.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();
[self setRotatedImage:imageCopy];
//return imageCopy;
}
Смежные вопросы
- 1. iOS - Фоновая загрузка фотографий
- 2. Загрузка фотографий в Facebook из приложения iphone
- 3. Загрузка фотографий в Instagram с помощью собственного приложения iOS
- 4. iOS: загрузка фотографий в Facebook не всегда
- 5. Загрузка фотографий с использованием Google Map SDK iOS
- 6. Загрузка фотографий
- 7. Загрузка изображения из библиотеки фотографий в ios с использованием AFNetworking?
- 8. Загрузка большого количества фотографий
- 9. Загрузка изображения с помощью ионического приложения из камеры/библиотеки фотографий
- 10. Размер моего приложения IOS
- 11. Как удалить crashlytics из моего приложения iOS?
- 12. Открытие Apple Music из моего приложения iOS
- 13. Загрузка приложения iOS
- 14. SoundCloud API - загрузка треков, загруженных из моего приложения
- 15. Загрузка изображения Только из приложения iOS
- 16. iOS - загрузка в Vimeo из приложения
- 17. Загрузка данных из приложения iOS одновременно
- 18. Загрузка из приложения на сервер в IOS
- 19. Загрузка фотографий, видео и аудио
- 20. Создание iOS моего приложения в определенное время
- 21. Можно ли отправить 360 фотографий на Facebook из приложения iOS?
- 22. Воспроизвести видео из приложения для фотографий в iOS 7
- 23. Загрузка фотографий CodeIgniter
- 24. Извлечь пакет фотографий iOS
- 25. iPhone, магазин фотографий из фотографий?
- 26. Как включить поддержку моего приложения iOS 4?
- 27. Facebook Загрузка фотографий
- 28. Загрузка фотографий и фотографий с несколькими фотографиями
- 29. JQuery Slider Загрузка фотографий
- 30. Загрузка фотографий предотвращает переписывание
Возможный дубликат [Image получать автоматически поворачиваются при загрузке] (http://stackoverflow.com/questions/5301006/image-getting-rotated-automatically-on-upload) –