iphone中的图片通常存放在4个地法规,相册,应用程序包,沙盒,Internet,通过这四个地方我们可以处理应用图片
相册,
iphone的相册包括摄影头交卷+用户计算机同步的部分照片,用户可以通过UIImagePickerController提供的交互对话框从相册中选择图像,但是,注意:相册中的图片机器路径,无法直接从应用程序中访问,只能用户去选择和使用相册图片
应用程序包
应用程序包可能会将图像与可执行程序,info.plist文件和其他资源一同存储,我们可以读取这些基于包的图像,并在应用程序中显示他们
沙盒
借助沙盒,我们可以把图片存储在Documents,Library,tmp文件夹中,这些文件均有可以应用程序进行读取,通过文件路径进行创建头像,。尽管沙盒外的部分从技术上说是可行的,但是apple表明这些部分不在appstore应用程序允许访问的范围之内。
Internet
应用程序可以通过图片的URL来访问Internet上的资源。
使用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];//t推出图片相册
}
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];//推出相册
}
在和用户进行交互以后,用户选择好图片以后,会回调选择结束的方法,结果如下
- (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;
}
存储图像,
在上面中,我们获取了图片,并进行了压缩,通过上面的小知识,我们知道,将需要的一些u 图片存入七牛是一个不错的选择,而且应用程序可以直接通过路径去方法沙盒中的图片,
View Code
代码如下
#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目录的路径。
View Code
代码如下
#pragma mark 从文档目录下获取Documents路径
- (NSString *)documentFolderPath
{
return [NSHomeDirectory() stringByAppendingPathComponent:@”Documents”];
}
然后,我们便可以通过文件名,去访问获取资源了。
View Code
上传图片
项目中我们使用了ASIFormHttpRequest的开源框架,http请求的部分代码如下,http返回以及相关回调方法略去。
View Code
代码如下
- (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];
}
iOS开发中的一些图片上传压缩处理
最新推荐文章于 2021-04-22 20:40:17 发布