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

 相册

  iphone的相册包含摄像头胶卷+用户计算机同步的部分照片。用户可以通过UIImagePickerController类提供的交互对话框来从相册中选择图像。但是,注意:相册中的图片机器路径无法直接从应用程序访问,只能通过终端用户去选择和使用相册图片

  应用程序包

  应用程序包可能会将图像与可执行程序、Info.plist文件和其他资源一同存储。我们可以通过本地文件路径来读取这些基于包的图像并在应用程序中显示它们。

  沙盒

  借助沙盒,我们可以把图片存储到Documents、Library、tmp文件夹中。这些文件均可有应用程序读取,且可以通过文件路径创建图像。尽管沙盒外的部分从技术上说是可行的,但是apple表明这些部分不在appstore应用程序允许访问的范围之内。

  Internet

  应用程序可以通过图片的URL来访问Internet上的资源。

  以上为一些小知识,来自《iphone开发秘籍(第二版)》,可以自己去参考此书。

  下面开始切入正题,从摄像头/相册获取图片,压缩图片,上传图片。

  从摄像头/相册获取图片

  刚刚在上面的知识中提到从摄像头/相册获取图片是面向终端用户的,由用户去浏览并选择图片为程序使用。在这里,我们需要过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;

  }

  存储图像

  在上面我们获取到了图片并对图片进行了压缩,通过之前的小知识了解到,将应用需要的一些图片存入沙盒是个不错的选择,而且应用程序可以直接通过路径去方法沙盒中的图片,在这里我们将图片存入沙盒中的Documents目录下。

  

  代码如下

  #pragma mark 保存图片到document

  - (void)saveImage:(UIImage *)tempImage WithName:(NSString *)imageName

  {

  NSData* imageData = UIImagePNGRepresentation(tempImage);

  NSArray* paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

  NSString* documentsDirectory = [paths objectAtIndex:0];

  // Now we get the full path to the file

  NSString* fullPathToFile = [documentsDirectory stringByAppendingPathComponent:imageName];

  // and then we write it out

  [imageData writeToFile:fullPathToFile atomically:NO];

  }

  从Documents目录下获取图片

  要从Documents下面获取图片,我们首先需要获取Documents目录的路径。

  

  代码如下

  #pragma mark 从文档目录下获取Documents路径

  - (NSString *)documentFolderPath

  {

  return [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];

  }

  然后,我们便可以通过文件名,去访问获取资源了。

  

  上传图片

  项目中我们使用了ASIFormHttpRequest的开源框架,http请求的部分代码如下,http返回以及相关回调方法略去。

  

  代码如下

  - (void)upLoadSalesBigImage:(NSString *)bigImage MidImage:(NSString *)midImage SmallImage:(NSString *)smallImage

  {

  NSURL *url = [NSURL URLWithString:UPLOAD_SERVER_URL];

  ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];

  [request setPostValue:@"photo" forKey:@"type"];

  [request setFile:bigImage forKey:@"file_pic_big"];

  [request buildPostBody];

  [request setDelegate:self];

  [request setTimeOutSeconds:TIME_OUT_SECONDS];

  [request startAsynchronous];

  }

从UIWebView中调用iOS相册,并选择图片上传到Linux Web服务器。

 (2012-08-09 17:03:29)

转载▼

标签:

uiwebview

上传到服务器

ios开发

分类: Ios

======首先看以下ios端=======

ViewController.h

//

// ViewController.h

// Xcode_FileUpload

//

// Created by KirSsu Ryu on 12-8-7.

// Copyright (c) 2012年 __JModule__. All rights reserved.

//

#import

//UIWebViewDelegate 代理类:跟javascript相互传值。

//UINavigationControllerDelegate,UIImagePickerControllerDelegate 代理类:打开相册等一系列操作。

@interface ViewController : UIViewController<</SPAN>UIWebViewDelegate,UINavigationControllerDelegate,UIImagePickerControllerDelegate>{

UIWebView *myWebView;

UIImagePickerController *picker_library_;

}

//我的WebView控件

@property (nonatomic, retain) IBOutlet UIWebView *myWebView;

//相册类的变量

@property (nonatomic, retain) IBOutlet UIImagePickerController *picker_library_;

@end

ViewController.m

//

// ViewController.h

// Xcode_FileUpload

//

// Created by KirSsu Ryu on 12-8-7.

// Copyright (c) 2012年 __JModule__. All rights reserved.

//

#import "ViewController.h"

@interface ViewController()

@end

@implementation ViewController

@synthesize myWebView;

@synthesize picker_library_;

- (void)viewDidLoad

{

[super viewDidLoad];

//代理UIWebViewDelegate

myWebView.delegate = self;

//设置要载入的链接

NSURL *url = [NSURL URLWithString:@"http://*****/test/index.php"];

//创建一个请求对象

NSURLRequest *request = [NSURLRequest requestWithURL:url];

//把请求发送到webView里,实现显示内容

[myWebView loadRequest:request];

}

- (void)viewDidUnload

{

[self setMyWebView:nil];

[super viewDidUnload];

// Release any retained subviews of the main view.

}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation

{

return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);

}

//获得从网站得到的值

#pragma mark --

#pragma mark UIWebViewDelegate

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {

//获得请求的URL,第一次是路径,当在web上点击按钮后获得的是web穿过来的路径。

NSString *requestString = [[request URL] absoluteString];

//根据":"拆分字符串,返回数组。

NSArray *components = [requestString componentsSeparatedByString:@":"];

//如果数组内的元素大于1并且第一个元素的值相等

if ([components count] > 1 && [(NSString *)[components objectAtIndex:0] isEqualToString:@"gallery"]) {

if([(NSString *)[components objectAtIndex:1] isEqualToString:@"open"])

{

[self openGallery];

}

return NO;

}

return YES;

}

//打开相册

-(void)openGallery{

//初始化类

picker_library_ = [[UIImagePickerController alloc] init];

//指定几总图片来源

//UIImagePickerControllerSourceTypePhotoLibrary:表示显示所有的照片。

//UIImagePickerControllerSourceTypeCamera:表示从摄像头选取照片。

//UIImagePickerControllerSourceTypeSavedPhotosAlbum:表示仅仅从相册中选取照片。

picker_library_.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;

//表示用户可编辑图片。

picker_library_.allowsEditing = YES;

//代理

picker_library_.delegate = self;

[self presentModalViewController: picker_library_

animated: YES];

}

//3.x 用户选中图片后的回调

- (void)imagePickerController: (UIImagePickerController *)picker

didFinishPickingMediaWithInfo: (NSDictionary *)info

{

NSLog(@"3.x");

//获得编辑过的图片

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

[self dismissModalViewControllerAnimated:YES];

[self imageUpload:image];

}

//2.x 用户选中图片之后的回调

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)image editingInfo:(NSDictionary *)editingInfo

{

NSLog(@"2.x");

NSMutableDictionary * dict= [NSMutableDictionary dictionaryWithDictionary:editingInfo];

[dict setObject:image forKey:@"UIImagePickerControllerEditedImage"];

//直接调用3.x的处理函数

[self imagePickerController:picker didFinishPickingMediaWithInfo:dict];

}

// 用户选择取消

- (void) imagePickerControllerDidCancel: (UIImagePickerController *)picker

{

[self dismissModalViewControllerAnimated:YES];

}

//上传图片方法

- (void) imageUpload:(UIImage *) image{

//把图片转换成imageDate格式

NSData *imageData = UIImageJPEGRepresentation(image, 1.0);

//传送路径

NSString *urlString = @"http://*****/test/upload.php";

//建立请求对象

NSMutableURLRequest * request = [[NSMutableURLRequest alloc] init];

//设置请求路径

[request setURL:[NSURL URLWithString:urlString]];

//请求方式

[request setHTTPMethod:@"POST"];

//一连串上传头标签

NSString *boundary = [NSString stringWithString:@"---------------------------14737809831466499882746641449"];

NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",boundary];

[request addValue:contentType forHTTPHeaderField: @"Content-Type"];

NSMutableData *body = [NSMutableData data];

[body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary]dataUsingEncoding:NSUTF8StringEncoding]];

[body appendData:[[NSString stringWithString:@"Content-Disposition: form-data; name="userfile"; filename="vim_go.jpg"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];

[body appendData:[[NSString stringWithString:@"Content-Type: application/octet-stream\r\n\r\n"]dataUsingEncoding:NSUTF8StringEncoding]];

[body appendData:[NSData dataWithData:imageData]];

[body appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",boundary]dataUsingEncoding:NSUTF8StringEncoding]];

[request setHTTPBody:body];

//上传文件开始

NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];

//获得返回值

NSString *returnString = [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding];

NSLog(@"%@",returnString);

}

@end

======ios端结束,再看下web端=======

index.php

function uploads(){

sendCommand("open");

}

function sendCommand(cmd){

var url = "gallery:"+cmd;

document.location = url;

}

upload.php

 

时间: 2024-12-24 23:50:01

ios中摄像头/相册获取图片,压缩图片,上传服务器方法总结的相关文章

项目分享五:H5图片压缩与上传

一.简介 图片的压缩与上传,是APP里一个很常用的功能.我们来年看 ChiTuStore 是怎样做的.相关文件 App/Module/User/UserInfo.html,App/Module/User/UserInfo.ts 二.HTML布局 HTML 文件中,有如下二句,第一句就是上图所看到的图片,其中的 class 表示该图片以圆形来显示,并且靠右.第二句是一个 Input 控件,其类型为 file ,是用来上传文件的.值得注意的是 style,这的作用是让该控件与图片重叠,并且透明(op

IE8升级新版Flash Player ActiveX14导致的discuz图片附件无法上传 解决方法

之前发的这篇文章被编辑之后丢失了,无奈从百度快照找来重新发布,不知道csdn抽啥风 架不住sb adobe的频繁升级提示,手欠升级到了了flash player 14,结果IE8下所有discuz论坛中都无法看到上传图片的按钮了 没办法,遇到问题就解决吧 刚好在解决IE11遇到编辑器不显示问题的时候看到discuz编辑器文件上传有非flash解决方案 所以这个问题看上去就不难了,把普通上传给打开就行了 编辑discuz文件/template/default/forum/editor_menu_f

前端获取图片压缩后上传给后台

 此前有同事跟我聊过关于移动端用canvas压缩图片后再上传的功能,最近有了点空闲时间,所以就实践了一下.demo效果链接在文章底部贴出. 在做移动端图片上传的时候,用户传的都是手机本地图片,而本地图片一般都相对比较大,拿iphone6来说,平时拍很多图片都是一两M的,如果直接这样上传,那图片就太大了,如果用户用的是移动流量,完全把图片上传显然不是一个好办法. 目前来说,HTML5的各种新API都在移动端的webkit上得到了较好的 实现.根据查看caniuse,本demo里使用到的FileRe

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

(转)Android学习-使用Async-Http实现图片压缩并上传功能 文章转载自:作者:RyaneLee链接:http://www.jianshu.com/p/940fc7ba39e1 让我头疼一个星期的图片批量上传服务器的问题最后受这篇文章的作者启发而解决,自己之前一直执着于通过uri地址找到图片然后上传图片,却没想过直接上传图片本身.感谢作者的博客和启发. 前言 (转载请注明出处,谢谢!) 最近在做一个小项目,项目中要实现上传图片到服务器,而这个例子是实现图片的尺寸压缩,将获取到的压缩图

div中粘贴图片并上传服务器 div中拖拽图片文件并上传服务器

应用简介:此文主要是描述如何在前端div中直接ctrl+v 粘贴图片,并上传到服务器,包括拖拽图片文件到div中 应用场景描述:用QQ或者其它切图软件截图,在指定的div中ctrl+v 粘贴并显示,点击上传按钮,图片上传到服务器.类似实现了此功能的网站有 知乎,强力建议博客园实现此功能,                     写博客时插入图片方便的多. 适用环境:本代码目前适用谷歌浏览器,其它浏览器需要稍微改良一下即可,问题不大. 开发环境:vs2015 mvc 不说废话了,开始吧: 1:首先

js图片压缩并上传?

js: var eleFile = document.querySelector('#file'); // 压缩图片需要的一些元素和对象 var reader = new FileReader(); var imga=document.getElementById('imga'); var img = new Image(); // base64地址图片加载完毕后 img.onload = function() { var originWidth = this.width, //image re

js对图片进行质量压缩后上传服务器

基本的原理就是将图片格式转换成base64格式的,进行压缩,然后再转回固定格式的图片文件,大的形式是以form表单形式进行后台交互的,但里面会new一个form和一个XMLHttpRequest对象,这样可以弥补form表单提交文件没有失败返回的空缺,当限制使用jquery里的AjaxForm的时候,这也是一个很好的选择. var bl = convertBase64UrlToBlob(base64Codes); form.append("fileupload", bl, "

点击上传修改图片(未上传服务器)

<body> <input type="file" name="file" id="file" onClick="$('#file').click();" style="display:block" onChange="var img=getObjectURL(this.files[0]);$('#myimg').attr('src',img)" /> <i

iOS 使用AFN 进行单图和多图上传 摄像头/相册获取图片,压缩图片

图片上传时必要将图片进行压缩,不然会上传失败 首先是同系统相册选择图片和视频.iOS系统自带有UIImagePickerController,可以选择或拍摄图片视频,但是最大的问题是只支持单选,由于项目要求需要支持多选,只能自己自定义.获取系统图库的框架有两个,一个是ALAssetsLibrary,兼容iOS低版本,但是在iOS9中是不建议使用的:另一个是PHAsset,但最低要求iOS8以上.兼容到iOS7,可以选择了ALAssetsLibrary 现在我们先说选择一张图的情况 一.单图多图上