UIImagePickerController - 裁剪图片为圆形

3

如何使用图像选择器裁剪圆形图片?

我在项目中显示的照片是圆形的,代码如下:

 CALayer *image = profileImageView.layer;
        [image  setCornerRadius:50];
        [image  setMasksToBounds:YES];

        [image setBorderColor:[[UIColor whiteColor]CGColor]];
        [image setBorderWidth:5];

到目前为止,我有这段代码可以裁剪图像,但它只能将它们变成正方形。

   - (void)showPhotoLibary
    {
        if (([UIImagePickerController isSourceTypeAvailable:
              UIImagePickerControllerSourceTypeSavedPhotosAlbum] == NO)) {
            return;
        }

        UIImagePickerController *mediaUI = [[UIImagePickerController alloc] init];
        mediaUI.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;

        // Displays saved pictures from the Camera Roll album.
        mediaUI.mediaTypes = @[(NSString*)kUTTypeImage];

        // Hides the controls for moving & scaling pictures
        mediaUI.allowsEditing = YES;


        mediaUI.delegate = self;


        [self presentViewController:mediaUI animated:YES completion:nil];
    }


    - (void) imagePickerController: (
                                     UIImagePickerController *) picker didFinishPickingMediaWithInfo: (NSDictionary *) info {

        UIImage *originalImage = (UIImage *) [info objectForKey:UIImagePickerControllerOriginalImage];
        self.profileImageView.image = originalImage;



        [picker dismissViewControllerAnimated:YES completion:nil];

    }
4个回答

2
在你的.h文件中导入#import <QuartzCore/QuartzCore.h>
   self.profileImageView.layer.cornerRadius = imageView.frame.size.width/2;  //or 20.0
   self.profileImageView.layer.masksToBounds = YES;

1
导入“QuartzCore框架”,即可访问您的UIViewUIImageView的".cornerRadius属性"。请注意,不要删除HTML标签。
#import <QuartzCore/QuartzCore.h>

还需要手动将它添加到项目的框架文件夹中。将此方法添加到您的视图控制器或任何需要它的位置:

-(void)setRoundedView:(UIImageView *)roundedView toDiameter:(float)newSize;
{
    CGPoint saveCenter = roundedView.center;
    CGRect newFrame = CGRectMake(roundedView.frame.origin.x, roundedView.frame.origin.y, newSize, newSize);
    roundedView.frame = newFrame;
    roundedView.layer.cornerRadius = newSize / 2.0;
    roundedView.center = saveCenter;
}

2
谢谢,但我想要一个默认为正方形的实际裁剪器,以显示一个圆形,这样用户就可以将图像自己裁剪成相同尺寸的圆形。这样说清楚了吗? - user3615707
@user3615707:所以您想要一个圆形视图,其尺寸可以由用户更改,并且图像会相应地被裁剪吗? - DipakSonara

0
如果您想要显示圆形UIImageView,可以按照以下步骤进行。
profileImageView.layer.cornerRadius = imageView.frame.size.width/2;

profileImageView.clipsToBounds = YES;

如果您想将原始图像源更改为圆形,则必须进行一些图像绘制处理。


谢谢,但我想要实际的裁剪器显示为一个圆形,这样用户就可以将图像自己裁剪成相同尺寸的圆形。这有意义吗? - user3615707

0

检查您的项目是否已添加QuartzCore框架。 然后您可以像下面这样做: 在.m或.h文件中导入#import <QuartzCore/QuartzCore.h>

- (void)viewDidLoad
 {
   [self.profileImageView.layer setCornerRadius:50];
   [self.profileImageView.layer setMasksToBounds:YES];
   [self.profileImageView.layer setBorderColor:[[UIColor whiteColor]CGColor]];
   [self.profileImageView.layer setBorderWidth:5];
 }

- (void) imagePickerController: (UIImagePickerController *) picker didFinishPickingMediaWithInfo: (NSDictionary *) info 
 {
   UIImage *originalImage = (UIImage *) [info objectForKey:UIImagePickerControllerEditedImage]; //it returns the edited image, 
   self.profileImageView.image = originalImage;
   [picker dismissViewControllerAnimated:YES completion:nil];

 }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接