zoukankan      html  css  js  c++  java
  • iOS图片上传及压缩

    提到从摄像头/相册获取图片是面向终端用户的,由用户去浏览并选择图片为程序使用。在这里,我们需要过UIImagePickerController类来和用户交互。

    使用UIImagePickerController和用户交互,我们需要实现2个协议<UIImagePickerControllerDelegate,UINavigationControllerDelegate>。

    View Code

     

    代码如下 复制代码

     

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

    }

     

    我们来看看上面的从相册获取图片,我们首先要实例化UIImagePickerController对象,然后设置imagePicker对象为当前对象,设置imagePicker的图片来源为UIImagePickerControllerSourceTypePhotoLibrary,表明当前图片的来源为相册,除此之外还可以设置用户对图片是否可编辑。

    View Code

     

    代码如下 复制代码

    #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:YEScompletion:nil];

    }

     

    以上是从摄像头获取图片,和从相册获取图片只是图片来源的设置不一样,摄像头图片的来源为UIImagePickerControllerSourceTypeCamera。

        在和用户交互之后,用户选择好图片后,会回调选择结束的方法。

     

    -(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.TakePhotoBtn setImage:m_selectImage forState:UIControlStateNormal];

            [picker dismissModalViewControllerAnimated:YES];

           return ;

        }

        [picker release];

    }

    //对图片尺寸进行压缩--

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

    }

     

    图片保存到本地document里面--以及图片格式的转换

    IOS开发之保存图片到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];

     

            [ipc dismissModalViewControllerAnimated:YES];

        } else {

            NSLog(@"MEdia");

        }

        

    上面的代码是当从相册里面选取图片之后保存到本地程序沙盒,在上面我们得到的图片中不能够得到图片名字,
    以及不清楚图片格式,所以这个时候我们需要将其转换成NSdata二进制存储,

     image = [info objectForKey:@"UIImagePickerControllerOriginalImage"];

    NSData *data;

            if (UIImagePNGRepresentation(image) == nil) {

                data = UIImageJPEGRepresentation(image, 1);

            } else {

                data = UIImagePNGRepresentation(image);

            }

    UIImagePNGRepresentation转换PNG格式的图片为二进制,如果图片的格式为JPEG则返回nil;

     [fileManager createFileAtPath:[filePath stringByAppendingString:@"/image.png"] contents:data attributes:nil];    将图片保存为PNG格式

     [fileManager createFileAtPath:[filePath stringByAppendingString:@"/image.jpg"] contents:data attributes:nil];   将图片保存为JPEG格式

     

    我们也可以写成下面的格式存储图片

    NSString *pngImage = [filePath stringByAppendingPathComponent:@"Documents/image.png"];

    NSString *jpgImage = [filePath stringByAppendingPathComponent:@"Documents/image.jpg"];

     

    [data writeToFile:pngImage atomically:YES];

    [data writeToFile:jpgImage atomically:YES];

     

  • 相关阅读:
    03 Spring框架 bean的属性以及bean前处理和bean后处理
    02 Spring框架 简单配置和三种bean的创建方式
    01 Spring框架 基本介绍
    Struts2学习---拦截器+struts的工作流程+struts声明式异常处理
    js 正则表达式
    HTTP中GET与POST的区别 (本质上是一样一样的TCP链接)
    微信商户平台的“企业付款到用户” 产品功能被隐藏起来了。。
    软件的安装及下载
    phpstorm 使用技巧
    Socket.io和Redis写Realtime App 之express初试
  • 原文地址:https://www.cnblogs.com/LiLihongqiang/p/5597388.html
Copyright © 2011-2022 走看看