저는 iOS에 익숙하지 않습니다. 지난 주에 온라인으로 둘러보기 : Dealing with Exif Images, Resizing images 및 그 외 많은 자습서를 볼 수 있습니다. 더 많은 무작위 질문 StackOverflow 여기에 있습니다. 여기에서 나는 >=iOS 4.0
이라고 생각하고 카메라에서 가져온 모든 이미지에는 EXIF
기반 회전 정보가 포함되어 있습니다. 무엇 작동하지 않습니다iOS : 오버레이로 UIImagePickerController 카메라에서 캡처 한 정지 이미지 자르기
: 모든 나는 또한 어떤 임의의 모서리에서 이미지 자르기하고 끝낼를 다른 이미지 자르기 기법을 시도 후에는, 결과 이미지는 내가 png
이미지를 사용하는 경우에 :(확대 할 것으로 보인다 인터넷에서 (EXIF 데이터가없는) 자르기가 작동하고 있습니다. 임의의 모서리로 말하면 이미지의 오른쪽 상단/왼쪽 상단이 잘리고 확대 된 이미지가 끝납니다.
내가 이루고자하는 바 :
위로부터 이미지 100 px
, 아래에서 100 px
이미지를 자르려고합니다. 본질적으로, 상단에 1 개, 하단에 1 개, 상단에 높이가[100.0 px
]이고 다른 하나는 CGRect(0.0, SCREEN_HEIGHT - 100, SCREEN_WIDTH, 100.0)
[하단에 다른 100 px
높이 스트립]이라는 두 개의 오버레이 스트립을 사용하고 있습니다. 이 두 스트립 사이에 이미지를 가져와야합니다. 이미지 높이가 SCREEN_HEIGHT - 200.0
이라고 가정합니다. EXIF imageOrientation
속성을 기준으로 이미지를 회전
//SCREEN_HEIGHT = 480 and SCREEN_WIDTH = 320
UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];
if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera] == NO)
{
NSLog(@"Camera not available");
return;
}
imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera;
imagePicker.delegate = self;
imagePicker.allowsEditing = NO;
// Hide the controls
imagePicker.showsCameraControls = NO;
imagePicker.navigationBarHidden = YES;
// Make camera view full screen
imagePicker.wantsFullScreenLayout = YES;
//imagePicker.cameraViewTransform = CGAffineTransformScale(imagePicker.cameraViewTransform, CAMERA_TRANSFORM_X, CAMERA_TRANSFORM_Y);
//Overlay
//OverlayView is a plain UIView with the CGRects mentioned in the question.
OverlayView *overlay = [[OverlayView alloc] initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT)];
[overlay initOverlay:self];
imagePicker.cameraOverlayView = overlay;
[self presentModalViewController:imagePicker animated:YES];
코드 및 그것에게 cropImage
방법은 다운로드 한 이미지를 작동하는 것 같다
- (UIImage *) cropImage: (UIImage *) originalImage
{
CGRect cropRect = CGRectMake(0, 100.0, SCREEN_WIDTH, SCREEN_HEIGHT - 100);
CGRect transformedRect = [self TransformCGRectForUIImageOrientation:cropRect :originalImage.imageOrientation :originalImage.size];
CGImageRef resultImageRef = CGImageCreateWithImageInRect(originalImage.CGImage, transformedRect);
UIImage *newImage = [[[UIImage alloc] initWithCGImage:resultImageRef scale:1.0 orientation:originalImage.imageOrientation] autorelease];
return newImage;
}
- (CGRect) TransformCGRectForUIImageOrientation: (CGRect) source: (UIImageOrientation) orientation: (CGSize) imageSize {
switch (orientation) {
case UIImageOrientationLeft: { // EXIF #8
CGAffineTransform txTranslate = CGAffineTransformMakeTranslation(
imageSize.height, 0.0);
CGAffineTransform txCompound = CGAffineTransformRotate(txTranslate,
M_PI_2);
return CGRectApplyAffineTransform(source, txCompound);
}
case UIImageOrientationDown: { // EXIF #3
CGAffineTransform txTranslate = CGAffineTransformMakeTranslation(
imageSize.width, imageSize.height);
CGAffineTransform txCompound = CGAffineTransformRotate(txTranslate,
M_PI);
return CGRectApplyAffineTransform(source, txCompound);
}
case UIImageOrientationRight: { // EXIF #6
CGAffineTransform txTranslate = CGAffineTransformMakeTranslation(
0.0, imageSize.width);
CGAffineTransform txCompound = CGAffineTransformRotate(txTranslate,
M_PI + M_PI_2);
return CGRectApplyAffineTransform(source, txCompound);
}
case UIImageOrientationUp: // EXIF #1 - do nothing
default: // EXIF 2,4,5,7 - ignore
return source;
}
자르기 : 오버레이 카메라 UIImagePickerController를 표시
(방향 정보가 포함되어 있지 않은) 인터넷에서. 옵션이 부족합니다. 누군가 나를 도와 주실 수 있습니까?
읽어 주셔서 감사합니다.
사가르 - 아래의 방법은 앱이 붕괴 발생하지 않았습니까? – Dejell
아래의 방법을 사용하고있는 @Odelya를 추천하고 있습니까? –
매트의 답변입니다. 나는 정확한 문제가있어 이미지를 제대로 자르지 못한 한 달 동안 성공하지 못했습니다. – Dejell