• iOS图片上传及处理


    从摄像头或者是从相册中读取图片,需要通过UIImagePickerController类来实现,在使用UIImagePickerController时,需要是实现下面两个协议

     

     

    1
    <uinavigationcontrollerdelegate,uiimagepickercontrollerdelegate></uinavigationcontrollerdelegate,uiimagepickercontrollerdelegate>

     

     

    1、从相册中读取图片

    首先要实例化UIImagePickerController对象imagePicker,设置imagePicker的图片来源为UIImagePickerControllerSourceTypePhotoLibrary,表明当前图片的来源为用户的相册。以及设置图片是否可被编辑allowsEditing。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #pragma mark - 从用户相册获取图片
    - (void)pickImageFromAlbum
    {
        imagePicker = [[UIImagePickerController alloc] init];
        imagePicker.delegate =self;
        imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
        imagePicker.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
        imagePicker.allowsEditing =YES;
         
        [self presentModalViewController:imagePicker animated:YES];
    }


    2、从相册中读取图片

     

     

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    #pragma mark - 从摄像头获取图片
    - (void)pickImageFromCamera
    {
        imagePicker = [[UIImagePickerController alloc] init];
        imagePicker.delegate =self;
        imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera;
        imagePicker.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
        imagePicker.allowsEditing =YES;
         
        [self presentModalViewController:imagePicker animated:YES];
    }
    //打开相机
    - (IBAction)touch_photo:(id)sender {
        // for iphone
        UIImagePickerController *pickerImage = [[UIImagePickerController alloc] init];
       if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {
            pickerImage.sourceType = UIImagePickerControllerSourceTypeCamera;
            pickerImage.mediaTypes = [UIImagePickerController availableMediaTypesForSourceType:pickerImage.sourceType];
             
        }
        pickerImage.delegate =self;
        pickerImage.allowsEditing =YES;//自定义照片样式
        [self presentViewController:pickerImage animated:YES completion:nil];
    }


    在用户现则好图片后,会回调选择结束的方法

     

     

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    -(void)imagePickerController:(UIImagePickerController*)picker didFinishPickingMediaWithInfo:(NSDictionary*)info
    {
        //初始化imageNew为从相机中获得的--
        UIImage *imageNew = [info objectForKey:@UIImagePickerControllerOriginalImage];
        //设置image的尺寸
        CGSize imagesize = imageNew.size;
        imageSize.height =626;
        imageSize.width =413;
        //对图片大小进行压缩--
        imageNew = [self imageWithImage:imageNew scaledToSize:imageSize];
        NSData *imageData = UIImageJPEGRepresentation(imageNew,0.00001);
       if(m_selectImage==nil)
        {
            m_selectImage = [UIImage imageWithData:imageData];
            NSLog(@m_selectImage:%@,m_selectImage);
            [self.takePhotoButton setImage:m_selectImage forState:UIControlStateNormal];
            [picker dismissModalViewControllerAnimated:YES];
           return ;
        }
    }


    对图片进行压缩

     

     

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    -(UIImage*)imageWithImage:(UIImage*)image scaledToSize:(CGSize)newSize
    {
        // Create a graphics image context
        UIGraphicsBeginImageContext(newSize);
         
        // Tell the old image to draw in this new context, with the desired
        // new size
        [image drawInRect:CGRectMake(0,0,newSize.width,newSize.height)];
         
        // Get the new image from the context
        UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();
         
        // End the context
        UIGraphicsEndImageContext();
         
        // Return the new image.
       return newImage;
    }


    将图片保存到Documents目录及PNG、JPEG格式相互转换

     

     

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary*)info {
        NSString *mediaType = [info objectForKey:UIImagePickerControllerMediaType];
        if ([mediaType isEqualToString:@public.image]){
            image = [info objectForKey:@UIImagePickerControllerOriginalImage];
            NSData *data;
            if (UIImagePNGRepresentation(image) == nil) {
                data = UIImageJPEGRepresentation(image, 1);
            } else {
                data = UIImagePNGRepresentation(image);
            }
             
            NSFileManager *fileManager = [NSFileManager defaultManager];
            NSString *filePath = [NSString stringWithString:[self getPath:@image1]];         //将图片存储到本地documents
             [fileManager createDirectoryAtPath:filePath withIntermediateDirectories:YES attributes:nil error:nil];
             [fileManager createFileAtPath:[filePath stringByAppendingString:@/image.png] contents:dataAttributes:nil];
             
            UIImage *editedImage = [[UIImage alloc] init];
            editedImage = image;
            CGRect rect = CGRectMake(0, 0, 64, 96);
            UIGraphicsBeginImageContext(rect.size);
            [editedImage drawInRect:rect];
            editedImage = UIGraphicsGetImageFromCurrentImageContext();
             
            UIButton *imageButton = [UIButton buttonWithType:UIButtonTypeCustom];
            imageButton.frame = CGRectMake(10, 10, 64, 96);
            [imageButton setImage:editedImage forState:UIControlStateNormal];
            [self.view addSubview:imageButton];
            [imageButton addTarget:self action:@selector(imageAction:)forControlEvents:UIControlEventTouchUpInside];
            [self dismissModalViewControllerAnimated:YES];
        } else {
            NSLog(@Media);
        }


    在上面的方法中不能得到图片的名称及格式,所以需要将其转换成NSData二进制存储

     

     

    1
    2
    3
    4
    5
    6
    7
    image = [info objectForKey:@UIImagePickerControllerOriginalImage];
    NSData *data;
            if (UIImagePNGRepresentation(image) == nil) {
                data = UIImageJPEGRepresentation(image, 1);
            } else {
                data = UIImagePNGRepresentation(image);
            }
    1
    2
    [fileManager createFileAtPath:[filePath stringByAppendingString:@/image.png] contents:data attributes:nil];  //将图片保存为PNG格式
     [fileManager createFileAtPath:[filePath stringByAppendingString:@/image.jpg
  • 相关阅读:
    [Swift]LeetCode241. 为运算表达式设计优先级 | Different Ways to Add Parentheses
    [Swift]LeetCode240. 搜索二维矩阵 II | Search a 2D Matrix II
    使用ADO.NET对SQL Server数据库进行訪问
    JavaScript中面向对象那点事
    总结文件操作函数(二)-C语言
    UVa
    深入研究java.lang.Object类
    TCP/IP具体解释--TCP/IP可靠的原理 滑动窗体 拥塞窗体
    W5500EVB UDP模式的測试与理解
    仿新浪首页、主题、详情页,纯html静态页面
  • 原文地址:https://www.cnblogs.com/LiLihongqiang/p/5597371.html
Copyright © 2020-2023  润新知