zoukankan      html  css  js  c++  java
  • iOS图片上传及处理

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

    <UINavigationControllerDelegate,UIImagePickerControllerDelegate>


    1、从相冊中读取图片

    首先要实例化UIImagePickerController对象imagePicker。设置imagePicker的图片来源为UIImagePickerControllerSourceTypePhotoLibrary,表明当前图片的来源为用户的相冊。

    以及设置图片是否可被编辑allowsEditing。

    #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、从相冊中读取图片

    #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];
    }

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

    -(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 ;
        }
    }

    对图片进行压缩

    -(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格式相互转换

    - (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二进制存储

     image = [info objectForKey:@"UIImagePickerControllerOriginalImage"];
    NSData *data;
            if (UIImagePNGRepresentation(image) == nil) {
                data = UIImageJPEGRepresentation(image, 1);
            } else {
                data = UIImagePNGRepresentation(image);
            }
    [fileManager createFileAtPath:[filePath stringByAppendingString:@"/image.png"] contents:data attributes:nil];  //将图片保存为PNG格式
     [fileManager createFileAtPath:[filePath stringByAppendingString:@"/image.jpg"] contents:data attributes:nil]; //将图片保存为JPEG格式

    【參考资料:http://www.open-open.com/】

  • 相关阅读:
    tensorflow初次接触记录,我用python写的tensorflow第一个模型
    java编写service详细笔记
    python聚类算法实战详细笔记 (python3.6+(win10、Linux))
    python kmeans实战
    C语言-apache mod(模块开发)-采用apxs开发实战(centos7.2 linux篇)
    C语言-apache mod(模块开发)-采用VS2017开发实战(windows篇)
    redis集群配置及运行命令(windows和centos)附Python测试范例代码
    centos 7 keepalived故障邮件通知实战(附Python邮件发送脚本)
    mysql互为主从实战设置详解及自动化备份(Centos7.2)
    keepalived安装配置实战心得(实现高可用保证网络服务不间断)
  • 原文地址:https://www.cnblogs.com/jhcelue/p/7294977.html
Copyright © 2011-2022 走看看