Изменение размера UIImage не работает должным образом

Итак, я уже какое-то время пытаюсь понять, что я делаю не так, и никак не могу понять. Вот что я пытаюсь сделать::

  1. Сделайте снимок с помощьюUIImagePickerController
  2. Возьмите получившуюся фотографию и обрежьте верх и низ так, чтобы она стала квадратной (похожей на Instagram)
  3. Отобразите это изображение вUIButton

По какой-то причине каждый раз, когда я делаю снимок, он искажается в пределах UIButton, и кажется, что обрезка не работает должным образом. Вот что я делаю. В методе didFinishPickingMediaWithInfoу меня есть следующий код:

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
    //Copy the image to the userImage variable
    [picker dismissModalViewControllerAnimated:YES];
    userImage = nil;

    //Rotate & resize image
    userImage = [self resizeAndRotatePhoto:(UIImage *)[info objectForKey:UIImagePickerControllerOriginalImage]];
    NSLog(@"Userimage size, width: %f, height: %f", userImage.size.width, userImage.size.height);

    //Update the image form field with the image and set the image in the controller
    NSLog(@"Button size is height: %f, width: %f", userImageAvatarButton.frame.size.height, userImageAvatarButton.frame.size.width);
   [userImageAvatarButton.layer setMasksToBounds:YES];
   [userImageAvatarButton.layer setCornerRadius:3.0];
   [userImageAvatarButton setImage:userImage forState:UIControlStateNormal];
}

Я на мгновение включу метод resizeAndRotatePhoto, но результат ниже. Кроме того, в приведенном выше коде @property (strong) (UIImage *)userImage;определяется в заголовочном файле ViewController. Вывод журнала также приводит к :

2012-05-07 17:38:07.995 NewApp[10666:707] Userimage size, width: 1936.000000, height: 1936.000000
2012-05-07 17:38:08.000 NewApp[10666:707] Button size is height: 60.000000, width: 60.000000

. Как вы видите на изображении ниже, он оказывается искаженным.
form with button

Что касается метода resizeAndRotate, то вот он.:

- (UIImage *)resizeAndRotatePhoto:(UIImage *)source
{
if( source.imageOrientation == UIImageOrientationRight )
{
    source = [self rotateImage:source byDegrees:90];
}
if( userImage.imageOrientation == UIImageOrientationLeft)
{
    source = [self rotateImage:source byDegrees:-90];
}

CGFloat x,y;
CGFloat size;
if( source.size.width > source.size.height ){
    size = source.size.height;
    x = (source.size.width - source.size.height)/2;
    y = 0;
}
else {
    size = source.size.width;
    x = 0;
    y = (source.size.height - source.size.width)/2;
}


CGImageRef imageRef = CGImageCreateWithImageInRect([source CGImage], CGRectMake(x,y,size,size) );
return [UIImage imageWithCGImage:imageRef];
}

На данный момент я понятия не имею, как сделать так, чтобы это изображение отображалось неискаженным. Похоже, он неправильно обрезает и отображает неправильно, несмотря на то, что система говорит, что изображение действительно квадратное.

8
задан Bhavin Ramani 22 December 2016 в 12:52
поделиться