UIImagePickerController image size

2019-08-04 07:21发布

I'm using UIImagePickerController in my app to take pictures and I'm using my own controls, which means that the UIImagePickerController showsCameraControls property is set to NO and I have a UIButton inside the overlayView that shoots the pictures. Now, I noticed that the image that I save in the Photo Library is actually showing a bigger area than what shows in the preview view. Has anybody else had the same issue? Any solution to get the picture showing just what was in the preview?

2条回答
太酷不给撩
2楼-- · 2019-08-04 07:39

after getting the image object from picker resize the image then crop

I needed the same thing - in my case, to pick the dimension that fits once scaled, and then crop each end to fit the rest to the width. (I'm working in landscape, so might not have noticed any deficiencies in portrait mode.) Here's my code - it's part of a categeory on UIImage. Target size in my code is always set to the full screen size of the device.

@implementation UIImage (Extras)

#pragma mark -
#pragma mark Scale and crop image

- (UIImage*)imageByScalingAndCroppingForSize:(CGSize)targetSize
{
UIImage *sourceImage = self;
UIImage *newImage = nil;    
CGSize imageSize = sourceImage.size;
CGFloat width = imageSize.width;
CGFloat height = imageSize.height;
CGFloat targetWidth = targetSize.width;
CGFloat targetHeight = targetSize.height;
CGFloat scaleFactor = 0.0;
CGFloat scaledWidth = targetWidth;
CGFloat scaledHeight = targetHeight;
CGPoint thumbnailPoint = CGPointMake(0.0,0.0);

if (CGSizeEqualToSize(imageSize, targetSize) == NO) 
    {
    CGFloat widthFactor = targetWidth / width;
    CGFloat heightFactor = targetHeight / height;

    if (widthFactor > heightFactor) 
        scaleFactor = widthFactor; // scale to fit height
    else
        scaleFactor = heightFactor; // scale to fit width
    scaledWidth  = width * scaleFactor;
    scaledHeight = height * scaleFactor;

    // center the image
    if (widthFactor > heightFactor)
        {
        thumbnailPoint.y = (targetHeight - scaledHeight) * 0.5; 
        }
    else 
        if (widthFactor < heightFactor)
            {
            thumbnailPoint.x = (targetWidth - scaledWidth) * 0.5;
            }
    }   

UIGraphicsBeginImageContext(targetSize); // this will crop

CGRect thumbnailRect = CGRectZero;
thumbnailRect.origin = thumbnailPoint;
thumbnailRect.size.width  = scaledWidth;
thumbnailRect.size.height = scaledHeight;

[sourceImage drawInRect:thumbnailRect];

newImage = UIGraphicsGetImageFromCurrentImageContext();
if(newImage == nil) 
    NSLog(@"could not scale image");

//pop the context to get back to the default
UIGraphicsEndImageContext();
return newImage;
}
查看更多
够拽才男人
3楼-- · 2019-08-04 07:52

By preview I assume, you are talking about image picker interface (and not the Default preview screen that appears after dismissing the image picker interface).

The transforms you apply to image picker interface (using cameraViewTransform) donot reflect on the image taken. For example, if you are trying to zoom (in and out) applying scale, you need to apply the same(transform) on the image obtained in order to keep the image in image picker interface and actual saved image in sync.
Also you will have to consider the image orientation into consideration while applying the transforms.

查看更多
登录 后发表回答