从摄像头/相册获取图片

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

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

  

  代码如下

  #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,表明当前图片的来源为相册,除此之外还可以设置用户对图片是否可编辑。

  

  代码如下

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

  }

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

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

  

  代码如下

  - (void) imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info

  {

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

  if (picker.sourceType == UIImagePickerControllerSourceTypeCamera)

  {

  // UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil);

  }

  theImage = [UtilMethod imageWithImageSimple:image scaledToSize:CGSizeMake(120.0, 120.0)];

  UIImage *midImage = [UtilMethod imageWithImageSimple:image scaledToSize:CGSizeMake(210.0, 210.0)];

  UIImage *bigImage = [UtilMethod imageWithImageSimple:image scaledToSize:CGSizeMake(440.0, 440.0)];

  [theImage retain];

  [self saveImage:theImage WithName:@"salesImageSmall.jpg"];

  [self saveImage:midImage WithName:@"salesImageMid.jpg"];

  [self saveImage:bigImage WithName:@"salesImageBig.jpg"];

  [self dismissModalViewControllerAnimated:YES];

  [self refreshData];

  [picker release];

  }

  在回调结束的方法中,我们对图片进行了大小的处理,为图片的上传做准备。

  缩放图片

  缩放图片比较简单,就直接放上代码,让大家参考一下。

  

  代码如下

  //压缩图片   带裁剪框

  + (UIImage*)imageWithImageSimple:(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;

  }

iOS  压缩图片   如下

//压缩图片尺寸   不带裁剪框

float  scales = image.size.height / image.size.width;

UIImage *normalImg;

NSData *newData;

//(一)

/*

如果需要改动被压大小,调整scale,而不是kk或aa

*/

if (image.size.width > 1000 || image.size.height > 1000) {//这里的1000就是scale,所有的都要随着改变

if (scales > 1) {

CGSize newSize = CGSizeMake(1000 / scales, 1000);

UIGraphicsBeginImageContext(newSize);

[image drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];

normalImg = UIGraphicsGetImageFromCurrentImageContext();

}else {

CGSize newSize = CGSizeMake(1000 ,1000 * scales);

UIGraphicsBeginImageContext(newSize);

[image drawInRect:CGRectMake(0,0,newSize.width,newSize.height)];

normalImg = UIGraphicsGetImageFromCurrentImageContext();

}

}

else {

normalImg=image;

}

//(二)

CGSize newSize = CGSizeMake(normalImg.size.width, normalImg.size.height);

UIGraphicsBeginImageContext(newSize);

[normalImg drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];

UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext()

//图片压缩系数

float kk = 1.0f;

//图片压缩系数变化步长(可变)

float aa = 0.1f;

//压缩后的大小

int mm;

mm=(int)UIImageJPEGRepresentation(newImage, kk).length;

while (mm/1024 > 100) {

if (kk > aa+aa/10) {

kk -= aa;

mm = (int)UIImageJPEGRepresentation(newImage, kk).length;

}else{

aa /= 10;

}

}

newData = UIImageJPEGRepresentation(newImage, kk);//最后压缩结果

NSLog(@"11111------------===%ld",(long)newData.length/1024);

if (newData.length/1024 > 100) {

return nil;

}else{

UIImage *image = [UIImage imageWithData:newData];

return image;

}

}

ios获取相册图片 压缩图片的更多相关文章

  1. ios中摄像头/相册获取图片压缩图片上传服务器方法总结

    本文章介绍了关于ios中摄像头/相册获取图片,压缩图片,上传服务器方法总结,有需要了解的同学可以参考一下下.     这几天在搞iphone上面一个应用的开发,里面有需要摄像头/相册编程和图片上传的问 ...

  2. iOS获取相册/相机图片-------自定义获取图片小控件

    一.功能简介 1.封装了一个按钮,点击按钮,会提示从何处获取图片:如果设备支持相机,可以从相机获取,同时还可以从手机相册获取图片. 2.选择图片后,有一个block回调,根据需求,将获得的图片拿来使用 ...

  3. iOS遍历相册中的图片

    //获取相册的所有图片 - (void)reloadImagesFromLibrary { self.images = [[NSMutableArray alloc] init]; dispatch_ ...

  4. webpack2使用ch10-处理图片(png jpg svg 等) 限制图片 压缩图片

    1 目录展示 安装依赖 "file-loader": "^0.11.1", "image-webpack-loader": "^3 ...

  5. 异步上传&预览图片-压缩图片

    移动端普及的时代,流量是用户最关心的,手机拍出来的照片基本上都在1~2M以上,这样上传会非常耗流量,影响用户体验,此例能在保证清晰度的情况下,将4.5M的图片压缩为30K <!DOCTYPE h ...

  6. iOS 获取相册中图片的名字 url

    __block NSString *imageFileName; NSURL *imageURL = [info valueForKey:UIImagePickerControllerReferenc ...

  7. IOS 图片上传处理 图片压缩 图片处理

    - (void)initActionSheet { UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:nil dele ...

  8. ply python 图片压缩 图片裁剪 旋转

    http://tech.seety.org/python/python_imaging.html

  9. (转)Android学习-使用Async-Http实现图片压缩并上传功能

    (转)Android学习-使用Async-Http实现图片压缩并上传功能 文章转载自:作者:RyaneLee链接:http://www.jianshu.com/p/940fc7ba39e1 让我头疼一 ...

随机推荐

  1. [ios2]发布时去除NSLog打印

    #if DEBUG #warning NSLogs will be shown #else #define NSLog(...) {} #endif

  2. PHPWAMP开启php_stomp.dll的具体方式,php5.6开启stomp的图解过程

    友情提示:其他版本,方式一样的,大家依样画葫芦即可. 首先下载PHP 扩展php_stomp.dll文件,在php官方网站搜索"Stomp",搜索后,如下图 如下图点击" ...

  3. 多目标遗传算法 ------ NSGA-II (部分源码解析)介绍

    NSGA(非支配排序遗传算法).NSGA-II(带精英策略的快速非支配排序遗传算法),都是基于遗传算法的多目标优化算法,是基于pareto最优解讨论的多目标优化. 在官网: http://www.ii ...

  4. 安装vsftp流程整理

    昨天装个FTP,发现之前写的一篇操作日志太简陋了,重新整理了下记在这儿 # 安装 VSFTP yum -y install vsftpd # 创建FTP日志文件路径 touch /var/log/vs ...

  5. Scheme-CPS

    给出斐波那契数列计算函数,普通版和CPS版 #lang SCHEME (define (fib n) (if (< n 2) n (+ (fib (- n 1)) (fib (- n 2)))) ...

  6. js ajax 调试

    谷歌浏览器 F12->network->()请求ajax)->出现ajax调用的方法名-->点击查看网站请求地址--返回所有的数据(preview面板中) success返回后 ...

  7. ngDialog 设置其宽度大小

    [ngdialog弹窗大小设置(angularjs)] 方法一:添加css样式属性 css: .ngdialog.ngdialog-theme-plain.custom-width-70 .ngdia ...

  8. offsetLeft

    offsetLeft 获取的是相对于父对象的左边距,且返回值为数字: left 获取或设置相对于 具有定位属性(position定义为relative)的父对象 的左边距,且返回值是字符串eg:10p ...

  9. quagga源码分析--通用库thread

    quagga是开源路由器软件,提供的用户界面与思科,华为的路由器的人机接口几乎一致,非常有学习价值,尤其是开源的协议代码,简直亮瞎了我的小眼睛. quagga的介绍,我就不赘述了,有兴趣的可以找度娘或 ...

  10. python连接mysql、oracle小例子

    import  MySQLdbimport  cx_Oracle   as  oraimport  pandas  as  pdfrom    sqlalchemy import create_eng ...