[iOS] 从本地相册读取图片

首先,在需要读取照片的控件的点击触发方法中写如下代码:

// 创建Alert弹窗
UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"更改头像" message:nil preferredStyle:UIAlertControllerStyleAlert];
    
// 判断是否支持相机.
if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {
   
      NSLog(@"支持相机");
} else {
        
      NSLog(@"不支持相机");
}
    
UIAlertAction *action = [UIAlertAction actionWithTitle:@"从相册上传" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
        
      // 获取相册对象.
      self.picker = [[[UIImagePickerController alloc] init] autorelease];
        
      // 选择完成图片或点击取消按钮都是通过代理来操作所需的逻辑过程.
      self.picker.delegate = self;
        
      // 相册对象是否可编辑.
      self.picker.allowsEditing = YES;
        
      // 设置相册呈现的样式(枚举值).
      self.picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;// 相册获取.
        
      // 使用模态推出相册.
      [self presentViewController:self.picker animated:YES completion:nil];
        
    }];
    
UIAlertAction *actionCancel = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
       
    }];
    
[alert addAction:action];
[alert addAction:actionCancel];
    
[self presentViewController:alert animated:YES completion:nil];

选择完照片,系统自动调用此方法

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info {
    
    // 点击取消执行的代码.
    [picker dismissViewControllerAnimated:YES completion:nil];
    
    // 获取照片.
    UIImage *image = [info objectForKey:UIImagePickerControllerEditedImage];
    
    // 设置显示照片.
    [self.buttonForUser setImage:image forState:UIControlStateNormal];
    
    CGSize size = CGSizeMake(WIDTH / 5, WIDTH / 5);
    
    // 调整image 的大小.
    UIGraphicsBeginImageContextWithOptions(size, NO, 0);
    
    CGRect rect = CGRectMake(0, 0, size.width, size.height);
    
    [image drawInRect:rect];
    
    self.buttonForUser.imageView.image = UIGraphicsGetImageFromCurrentImageContext();
    
    UIGraphicsEndImageContext();
    
    // 保存图片到本地, 注意:上传照片到服务器使用(未实现).
    NSData *imageData = UIImageJPEGRepresentation(image, 1);
    
    [[NSUserDefaults standardUserDefaults] setObject:imageData forKey:@"用户头像"];
    
    [[NSUserDefaults standardUserDefaults] synchronize];
    
}

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 164,689评论 24 698
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 8,923评论 4 48
  • 木木今天很不开心,她的微积分考的一塌糊涂,估计下学期还要再重修一遍。经过超市,她无意识的走了进去,瞟到货架上...
    独自微笑阅读 257评论 0 3
  • 执行上下文即为形成一个作用域的代码执行环境。 JavaScript引擎会以函数调用栈的方式来处理它们,栈底永远都是...
    Stago阅读 80评论 0 0
  • 连绵的阴雨下了好几天,雨停的深夜,静极了。下班回家的路上,我能听见水滴掉落池塘的声音,能听到地上的青草生长的声音,...
    崔可阅读 279评论 5 4
  • 可以辛勤地工作到凌晨一点,也可以开心地玩到凌晨一点,这就是风行体育,这就是兄弟姐妹间的创业团队!辛苦地快乐着,一个...
    黄祥阅读 237评论 0 0