1.對本地相冊庫或相機拍攝下來的圖片進行壓縮處理,傳進來的參數分別有:要壓縮的圖片和壓縮後的大小。app
//壓縮圖片 + (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; }
2.將圖片壓縮轉爲NSData寫入沙盒。壓縮後以NSData上傳圖片。ide
//sdk中提供了方法能夠直接調用 UIImage *img = [UIImage imageNamed:@"some.png"]; NSData *dataObj = UIImageJPEGRepresentation(img, 1.0); //下面是sdk中UIImage.h頭文件中的內容 UIKIT_EXTERN NSData *UIImagePNGRepresentation(UIImage *image); // return image as PNG. May return nil if image has no CGImageRef or invalid bitmap format UIKIT_EXTERN NSData *UIImageJPEGRepresentation(UIImage *image, CGFloat compressionQuality); // return image as JPEG. May return nil if image has no CGImageRef or invalid bitmap format. compression is 0(most)..1(least)
JPEG的轉換方法裏面第二個參數是壓縮係數,能夠有效的減少圖片的大小。UIImagePNGRepresentation(UIImage* image) 要比UIImageJPEGRepresentation(UIImage* image, 1.0) 返回的圖片數據量大不少。項目中作圖片上傳以前,通過測試同一張拍照所得照片png大小在8M,而JPG壓縮係數爲0.75時候,大小隻有1M。並且,將壓縮係數下降對圖片視覺上並無太大的影響。測試
保存圖片到沙盒this
- (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]; }
上傳圖片atom
- (void)putImagewithImage:(UIImage *)image { //上傳圖片 ASIHTTPRequest *requst = [ASIHTTPRequest requestWithURL:[NSURL URLWithString:UPLOADURL]]; [requst setRequestMethod:@"PUT"]; NSData *data = UIImagePNGRepresentation(image); if (data == nil) { data = UIImageJPEGRepresentation(image, 0.1); } [requst appendPostData:data]; [requst startAsynchronous]; [self showLoading:YES]; requst.delegate = self; }
固然也能夠用表單的形式上傳圖片spa
轉自:http://blog.csdn.net/decemberd/article/details/8629996.net
3.生成固定大小的圓形圖片code
//2.保持原來的長寬比,生成一個縮略圖 - (UIImage *)thumbnailWithImageWithoutScale:(UIImage *)image size:(CGSize)asize { UIImage *newimage; if (nil == image) { newimage = nil; } else { CGSize oldsize = image.size; CGRect rect; if (asize.width/asize.height > oldsize.width/oldsize.height) { rect.size.width = asize.height*oldsize.width/oldsize.height; rect.size.height = asize.height; rect.origin.x = (asize.width - rect.size.width)/2; rect.origin.y = 0; } else { rect.size.width = asize.width; rect.size.height = asize.width*oldsize.height/oldsize.width; rect.origin.x = 0; rect.origin.y = (asize.height - rect.size.height)/2; } UIGraphicsBeginImageContext(asize); CGContextRef context = UIGraphicsGetCurrentContext(); CGContextSetFillColorWithColor(context, [[UIColor clearColor] CGColor]); UIRectFill(CGRectMake(0, 0, asize.width, asize.height));//clear background [image drawInRect:rect]; newimage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); } return newimage; }
最後是調用了orm
UIImage *smallImage = [self thumbnailWithImageWithoutScale:image size:CGSizeMake(93, 93)]; [UIImageJPEGRepresentation(smallImage, 1.0f) writeToFile:imageFilePath atomically:YES];//寫入文件 UIImage *selfPhoto = [UIImage imageWithContentsOfFile:imageFilePath];//讀取圖片文件
----------------------------------------------------Demo----------------------------------視頻
#import <MobileCoreServices/MobileCoreServices.h> - (void)viewDidLoad { _tableHeadView = [[UIView alloc]initWithFrame:CGRectMake(0, 0,100,100)]; _headImageView = [[UIImageView alloc]initWithFrame:CGRectMake((250-100)/2,10, 60, 60)]; _headImageView.backgroundColor = [UIColor blackColor]; _headImageView.image = [UIImage imageNamed:@"slide_Login"]; _headImageView.userInteractionEnabled = YES; _headImageView.layer.cornerRadius = 30; _headImageView.layer.masksToBounds = YES; [_tableHeadView addSubview:_headImageView]; [_headImageView release]; UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(changeImageAction:)]; [_headImageView addGestureRecognizer:tap]; [tap release]; } /** * 選擇圖片方法 * * @param sender <#sender description#> */ -(void)changeImageAction:(UITapGestureRecognizer *)sender { UIActionSheet *actionSheet = [[UIActionSheet alloc]initWithTitle:@"選擇文件來源" delegate:self cancelButtonTitle:@"取消" destructiveButtonTitle:nil otherButtonTitles:@"照相機",@"攝像機",@"本地相冊",nil]; [actionSheet showInView:self.view]; } #pragma mark -UIActionSheetDelegate Methods -(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex { switch (buttonIndex) { case 0://照相機 { if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) { UIImagePickerController *imagePicker = [[UIImagePickerController alloc]init]; imagePicker.delegate = self; imagePicker.allowsEditing = self; imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera; [self presentViewController:imagePicker animated:YES completion:^{ }]; } else { UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:@"設備不支持攝像頭" message:nil delegate:nil cancelButtonTitle:@"取消" otherButtonTitles:nil, nil]; [alertView show]; } break; } case 1://攝像機 { if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) { UIImagePickerController *imagePicker = [[UIImagePickerController alloc]init]; imagePicker.delegate = self; imagePicker.allowsEditing = self; imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera; imagePicker.videoQuality = UIImagePickerControllerQualityTypeLow; [self presentViewController:imagePicker animated:YES completion:^{ }]; } else { UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:@"設備不支持攝像頭" message:nil delegate:nil cancelButtonTitle:@"取消" otherButtonTitles:nil, nil]; [alertView show]; } break; } case 2://本地相冊 { UIImagePickerController *imagePicker = [[UIImagePickerController alloc]init]; imagePicker.delegate = self; imagePicker.allowsEditing = self; imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; [self presentViewController:imagePicker animated:YES completion:^{ }]; break; } default: break; } } #pragma mark -UIImagePickerControllerDelegate Method -(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { if ([[info objectForKey:UIImagePickerControllerMediaType] isEqualToString:(__bridge NSString *)kUTTypeImage])//等到圖片 { UIImage *img = [info objectForKey:UIImagePickerControllerEditedImage]; [self performSelector:@selector(saveImage:) withObject:img afterDelay:0.5]; } else if ([[info objectForKey:UIImagePickerControllerMediaType] isEqualToString:(__bridge NSString *)kUTTypeMovie])//獲得視頻的數據 { NSString *videoPath = (__bridge NSString *)[[info objectForKey:UIImagePickerControllerMediaURL] path]; NSData *fileData = [NSData dataWithContentsOfFile:videoPath]; } else{} [picker dismissViewControllerAnimated:YES completion:^{ }]; } -(void)imagePickerControllerDidCancel:(UIImagePickerController *)picker { [picker dismissViewControllerAnimated:YES completion:^{ }]; } /** * 保存圖片 * * @param img <#img description#> */ -(void)saveImage:(UIImage *)image { NSString *imageFilePath = [self getImageFilePath]; NSFileManager *fileManger = [NSFileManager defaultManager]; BOOL success = [fileManger fileExistsAtPath:imageFilePath]; NSError *error; if (success) { success = [fileManger removeItemAtPath:imageFilePath error:&error];//刪除原圖片 } //尺寸改成60*60 UIImage *smallImage = [self thumbnailWithImageWithoutScale:image size:CGSizeMake(60, 60)]; [UIImageJPEGRepresentation(smallImage, 1.0f) writeToFile:imageFilePath atomically:YES];//寫入文件 UIImage *selfPhoto = [UIImage imageWithContentsOfFile:imageFilePath];//讀取圖片文件 _headImageView.image = selfPhoto; } /** * 獲取圖片文件路徑 * * @return <#return value description#> */ -(NSString *)getImageFilePath { NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; NSString *imageFilePath = [path stringByAppendingPathComponent:@"selfPhone.jpg"]; return imageFilePath; } //2.保持原來的長寬比,生成一個縮略圖 - (UIImage *)thumbnailWithImageWithoutScale:(UIImage *)image size:(CGSize)asize { UIImage *newimage; if (nil == image) { newimage = nil; } else { CGSize oldsize = image.size; CGRect rect; if (asize.width/asize.height > oldsize.width/oldsize.height) { rect.size.width = asize.height*oldsize.width/oldsize.height; rect.size.height = asize.height; rect.origin.x = (asize.width - rect.size.width)/2; rect.origin.y = 0; } else { rect.size.width = asize.width; rect.size.height = asize.width*oldsize.height/oldsize.width; rect.origin.x = 0; rect.origin.y = (asize.height - rect.size.height)/2; } UIGraphicsBeginImageContext(asize); CGContextRef context = UIGraphicsGetCurrentContext(); CGContextSetFillColorWithColor(context, [[UIColor clearColor] CGColor]); UIRectFill(CGRectMake(0, 0, asize.width, asize.height));//clear background [image drawInRect:rect]; newimage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); } return newimage; }
.