• 相册、图库、拍照功能的访问以及图像角度设置


    在我们需要访问UIImagePickerController的时候,一般为选择图片,此时我们可能需要做如下操作:

    一、访问相册、图库、拍照功能;

    二、图片设置;

    1、需要将选择的图片缩小 (等比例);

    2、设置图片的形状 (比如:希望选择的图片为圆形);

    3、将图片翻转一定的角度 (比如翻转90度、180度等)

    以下是我自己的总结的一些方法:

    一、访问功能

    - (IBAction)changeIconAction:(UITapGestureRecognizer *)sender {
    //    UIActionSheet *actionSheet = [[UIActionSheet alloc]initWithTitle:@"选择头像" delegate:self cancelButtonTitle:@"取消" destructiveButtonTitle:nil otherButtonTitles:@"拍照",@"相册",@"图库", nil];
    //    [actionSheet showInView:[UIApplication sharedApplication].keyWindow];
        
        UIAlertController *alertController = [UIAlertController alertControllerWithTitle:nil message:nil preferredStyle:UIAlertControllerStyleActionSheet];
        [alertController addAction:[UIAlertAction actionWithTitle:@"拍照" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
            dispatch_async(dispatch_get_main_queue(), ^{
                [self makePhoto];
            });
        }]];
        [alertController addAction:[UIAlertAction actionWithTitle:@"相册" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
            dispatch_async(dispatch_get_main_queue(), ^{
                [self choosePicture];
            });
        }]];
        [alertController addAction:[UIAlertAction actionWithTitle:@"图库" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
            dispatch_async(dispatch_get_main_queue(), ^{
                [self pictureLibrary];
            });
        }]];
        
        [alertController addAction:[UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {
        }]];
        
        [self presentViewController:alertController animated:YES completion:nil];
    }
    
    //跳转到imagePicker里
    - (void)makePhoto{
        pickerController = [[UIImagePickerController alloc] init];
        pickerController.allowsEditing = YES;
        pickerController.delegate = self;
        pickerController.sourceType = UIImagePickerControllerSourceTypeCamera;
        [self presentViewController:pickerController animated:YES completion:nil];
    }
    //跳转到相册
    - (void)choosePicture
    {
        pickerController.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum;
        [self presentViewController:pickerController animated:YES completion:nil];
    }
    //跳转图库
    - (void)pictureLibrary
    {
        pickerController.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
        [self presentViewController:pickerController animated:YES completion:nil];
    }
    //用户取消退出picker时候调用
    - (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker
    {
        NSLog(@"%@",picker);
        [pickerController dismissViewControllerAnimated:YES completion:^{
            
        }];
    }
    //用户选中图片之后的回调
    - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
    {
        
        NSLog(@"%s,info == %@",__func__,info);
        
        UIImage *userImage = [self fixOrientation:[info objectForKey:@"UIImagePickerControllerOriginalImage"]];
        
        userImage = [self scaleImage:userImage toScale:0.3];
        
        //保存图片
    //    [self saveImage:userImage name:@"某个特定标示"];
        
        [pickerController dismissViewControllerAnimated:YES completion:^{
            
            
        }];
        [self.headIcon setImage:userImage];
        self.headIcon.contentMode = UIViewContentModeScaleAspectFill;
        self.headIcon.clipsToBounds = YES;
        //照片上传
        [self upDateHeadIcon:userImage];
    }
    View Code

    二、图片设置

    1、图片缩放

     1 /**
     2  *  对图片进行缩放 (宽高缩放)
     3  *
     4  *  @param image     图片原始对象
     5  *  @param scaleSize 缩放的倍数
     6  *
     7  *  @return 缩放后的图片
     8  */
     9 +(UIImage *)scaleImage:(UIImage *)image toScale:(float)scaleSize{
    10     UIGraphicsBeginImageContext(CGSizeMake(image.size.width * scaleSize, image.size.height * scaleSize));
    11     [image drawInRect:CGRectMake(0, 0, image.size.width * scaleSize, image.size.height * scaleSize)];
    12     UIImage *scaledImage = UIGraphicsGetImageFromCurrentImageContext();
    13     UIGraphicsEndImageContext();
    14     return scaledImage;
    15 }
    16 /**
    17  *  对图片进行缩放 (容量大小缩至100k以内)
    18  *
    19  *  @param image 图片对象
    20  *  @param scope 图像范围 (scope kb范围内)
    21  *
    22  *  @return 处理后的图片对象
    23  */
    24 +(UIImage *)originImage:(UIImage *)image withInScope:(int)scope{
    25     //头像 20k   广告 200k
    26     
    27     NSData *data = UIImageJPEGRepresentation(image, 1.0);
    28     if (data.length > scope*1024) {
    29         if (data.length > 1024*1024) {  //1M以上
    30             data = UIImageJPEGRepresentation(image, 0.1);
    31         }
    32         else if (data.length > 512*1024) {  //500kb - 1000kb
    33             data = UIImageJPEGRepresentation(image, 0.5);
    34         }
    35         else if (data.length > 200*1024) {  //0.25M - 0.5M
    36             data = UIImageJPEGRepresentation(image, 0.9);
    37         }
    38     }
    39     return [UIImage imageWithData:data];
    40 }
    图片缩放

    2、显示设置

      2.1、图片合成(两张图片合成一张)

      2.2、缩略图

    3、设置水平方向转动角度

     1 //修正照片方向(手机转90度方向拍照)
     2 - (UIImage *)fixOrientation:(UIImage *)aImage {
     3     
     4     // No-op if the orientation is already correct
     5     if (aImage.imageOrientation == UIImageOrientationUp)
     6         return aImage;
     7     
     8     // We need to calculate the proper transformation to make the image upright.
     9     // We do it in 2 steps: Rotate if Left/Right/Down, and then flip if Mirrored.
    10     CGAffineTransform transform = CGAffineTransformIdentity;
    11     
    12     switch (aImage.imageOrientation) {
    13         case UIImageOrientationDown:
    14         case UIImageOrientationDownMirrored:
    15             transform = CGAffineTransformTranslate(transform, aImage.size.width, aImage.size.height);
    16             transform = CGAffineTransformRotate(transform, M_PI);
    17             break;
    18             
    19         case UIImageOrientationLeft:
    20         case UIImageOrientationLeftMirrored:
    21             transform = CGAffineTransformTranslate(transform, aImage.size.width, 0);
    22             transform = CGAffineTransformRotate(transform, M_PI_2);
    23             break;
    24             
    25         case UIImageOrientationRight:
    26         case UIImageOrientationRightMirrored:
    27             transform = CGAffineTransformTranslate(transform, 0, aImage.size.height);
    28             transform = CGAffineTransformRotate(transform, -M_PI_2);
    29             break;
    30         default:
    31             break;
    32     }
    33     
    34     switch (aImage.imageOrientation) {
    35         case UIImageOrientationUpMirrored:
    36         case UIImageOrientationDownMirrored:
    37             transform = CGAffineTransformTranslate(transform, aImage.size.width, 0);
    38             transform = CGAffineTransformScale(transform, -1, 1);
    39             break;
    40             
    41         case UIImageOrientationLeftMirrored:
    42         case UIImageOrientationRightMirrored:
    43             transform = CGAffineTransformTranslate(transform, aImage.size.height, 0);
    44             transform = CGAffineTransformScale(transform, -1, 1);
    45             break;
    46         default:
    47             break;
    48     }
    49     
    50     // Now we draw the underlying CGImage into a new context, applying the transform
    51     // calculated above.
    52     CGContextRef ctx = CGBitmapContextCreate(NULL, aImage.size.width, aImage.size.height,
    53                                              CGImageGetBitsPerComponent(aImage.CGImage), 0,
    54                                              CGImageGetColorSpace(aImage.CGImage),
    55                                              CGImageGetBitmapInfo(aImage.CGImage));
    56     CGContextConcatCTM(ctx, transform);
    57     switch (aImage.imageOrientation) {
    58         case UIImageOrientationLeft:
    59         case UIImageOrientationLeftMirrored:
    60         case UIImageOrientationRight:
    61         case UIImageOrientationRightMirrored:
    62             // Grr...
    63             CGContextDrawImage(ctx, CGRectMake(0,0,aImage.size.height,aImage.size.width), aImage.CGImage);
    64             break;
    65             
    66         default:
    67             CGContextDrawImage(ctx, CGRectMake(0,0,aImage.size.width,aImage.size.height), aImage.CGImage);
    68             break;
    69     }
    70     
    71     // And now we just create a new UIImage from the drawing context
    72     CGImageRef cgimg = CGBitmapContextCreateImage(ctx);
    73     UIImage *img = [UIImage imageWithCGImage:cgimg];
    74     CGContextRelease(ctx);
    75     CGImageRelease(cgimg);
    76     return img;
    77 }
    图片转动角度
  • 相关阅读:
    Tomcat 环境搭建
    Samba 3.6.9 安装、管理
    FTP vsftp 安装、管理
    FTP pure-ftpd 安装、管理
    NFS 安装、管理
    sql
    mysql Encryption and Compression Functions
    jQuery UI Layout Plug-in
    mysql存储过程、函数和触发器的创建 [转]
    bootstrap前端开发框架,未来发展趋势
  • 原文地址:https://www.cnblogs.com/linzhengbo/p/6117351.html
Copyright © 2020-2023  润新知