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

    iOS 图片上传处理 图片压缩 图片处理

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

    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:YES completion: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];

  • 相关阅读:
    数学+高精度 ZOJ 2313 Chinese Girls' Amusement
    最短路(Bellman_Ford) POJ 1860 Currency Exchange
    贪心 Gym 100502E Opening Ceremony
    概率 Gym 100502D Dice Game
    判断 Gym 100502K Train Passengers
    BFS POJ 3278 Catch That Cow
    DFS POJ 2362 Square
    DFS ZOJ 1002/HDOJ 1045 Fire Net
    组合数学(全排列)+DFS CSU 1563 Lexicography
    stack UVA 442 Matrix Chain Multiplication
  • 原文地址:https://www.cnblogs.com/wangxiaorui/p/5392094.html
Copyright © 2011-2022 走看看