我在任何地方都找不到这个问题的答案,但这似乎是一个典型的问题: 我正在从iPhone 4拍照,我必须通过POST-Request将这些照片发送到服务器,但服务器不接受大于0.5 MB的图片,所以我必须在我之前压缩图片发送他们。为了实现这一点,我调用了以下方法:“NSData * imageData = UIImageJPEGRepresentation(tempImage,0.7);”,这意味着:我正在编译图像数据,并且需要花费很多时间(大约10s / pic)。
有没有办法控制相机设备的质量以拍摄低质量的照片?
提前感谢您的帮助。
答案 0 :(得分:3)
任何阻止主线程的东西都应该在后台线程中完成,包括将图像转换为JPEG。因此,您应该使用performSelectorInBackground:withObject:启动JPEG转换,并在转换完成后,将生成的NSData对象传递回主线程。
- (void)imagePickerController:(UIImagePickerController *)picker
didFinishPickingMediaWithInfo:(NSDictionary *)info {
UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage];
[self dismissModalViewControllerAnimated:YES];
[self performSelectorInBackground:@selector(encodePhotoInBackground:) withObject:image];
}
- (void)encodePhotoInBackground:(UIImage*)image {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSData *imageData = UIImageJPEGRepresentation(image, 0.60);
[self performSelectorOnMainThread:@selector(saveImageData:) withObject:imageData waitUntilDone:NO];
[pool release];
}
- (void)saveImageData:(NSData*)imageData {
// Do something with the image
}