iOS UİİmagePickerController yükleme sonrası görüntü yönlendirmesi sonucu
İOS 3.1.3 iPhone üzerinde benim iPhone uygulamasını test ediyorum. Bir görüntü UIImagePickerController
kullanarak yakalama/seçme duyuyorum:
UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];
[imagePicker setSourceType:UIImagePickerControllerSourceTypeCamera];
[imagePicker setDelegate:self];
[self.navigationController presentModalViewController:imagePicker animated:YES];
[imagePicker release];
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
self.image = [info objectForKey:UIImagePickerControllerOriginalImage];
imageView.image = self.image;
[self.navigationController dismissModalViewControllerAnimated:YES];
submitButton.enabled = YES;
}
Ben o zaman bir noktada benim web server ASİ sınıfları kullanarak gönderin:
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:[NSURL URLWithString:@"http://example.com/myscript.php"]];
[request setDelegate:self];
[request setStringEncoding:NSUTF8StringEncoding];
[request setShouldContinueWhenAppEntersBackground:YES];
//other post keys/values
[request setFile:UIImageJPEGRepresentation(self.image, 100.0f) withFileName:[NSString stringWithFormat:@"%d.jpg", [[NSDate date] timeIntervalSinceNow]] andContentType:@"image/jpg" forKey:@"imageFile"];
[request startAsynchronous];
sorun: yatay tutarken iphone ile bir resim çektiğinizde, resim sunucuya yükleniyor ve beklediğiniz gibi bakıyordu. bir resim portre elimde telefon çekerken, görüntüyü 90 derece döndürülmüş olduğu gibi yükledi ve görülüyor.
benim uygulama sadece portre modu () upsidedown ve düzenli çalışması için ayarlanır.
Nasıl görüntü her zaman yükledikten sonra doğru yönü göstermek yapabilir miyim?
resmi bir UİİmageView(resim aldıktan sonra doğrudan) gösterilen doğru gibi görünüyor, ama ben sunucu üzerinde görüş aksini söylüyor.
CEVAP
Bir Uİİmage bir özelliği vardır UİİmageView ve diğer Uİİmage tüketiciler raw görüntü verileri döndürmek için yönlendirir imageOrientation
,. Bu bayrak karşıya jpeg görüntü exif verileri kaydediliyor iyi bir şans var, ama bunu görmek için kullandığınız program o bayrağı onurlandıran değildir.
Karşıya görüntülemek için Uİİmage düzgün döndürmek için böyle bir kategori kullanabilirsiniz:
Uİİmage fixOrientation.h
@interface UIImage (fixOrientation)
- (UIImage *)fixOrientation;
@end
Uİİmage fixOrientation.m
@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
Zaman uyumsuz görüntü kaydırma yaparke...
Mu "display:none" yükleme bi...
nuget paket çözüm geri yükleme Kaldır...
Yeniden yükleme farklı uygulama imzala...
'==' olsun aşırı yükleme yap...