Phonegap生成iOS camera.getPicture()质量参数不起作用

我写了一个Phonegap应用程序,并使用Build服务编译它。 我的应用程序在这段代码中调用相机:

函数capturePhoto(){

// Take picture using device camera and retrieve image navigator.camera.getPicture(onPhotoDataSuccess, onFail, { quality: 20, destinationType: destinationType.FILE_URI }); } 

生成的图像通过ajax上传到服务器。 当我查看上传的图像时,一些到达的质量适当降低,但有些到达的文件大小为4 MB。 我已经意识到,在iPhone 4和5上运行我的应用程序的用户(我还没有testing人员,还有6个)一直在上传大图片。

我将质量降低到了10和5. Android提交的图像的图像大小被适当地减小了,但IOS图像仍然很大。 任何人都可以告诉我,如果有一个已知的问题在这里?

API Docs说,你不能减less从画廊或相机卷select的图像质量 – 但这些不是。 他们从相机加载。

这是插件拍摄照片后用于处理图像的代码:

 - (NSData*)processImage:(UIImage*)image info:(NSDictionary*)info options:(CDVPictureOptions*)options { NSData* data = nil; switch (options.encodingType) { case EncodingTypePNG: data = UIImagePNGRepresentation(image); break; case EncodingTypeJPEG: { if ((options.allowsEditing == NO) && (options.targetSize.width <= 0) && (options.targetSize.height <= 0) && (options.correctOrientation == NO)){ // use image unedited as requested , don't resize data = UIImageJPEGRepresentation(image, 1.0); } else { if (options.usesGeolocation) { NSDictionary* controllerMetadata = [info objectForKey:@"UIImagePickerControllerMediaMetadata"]; if (controllerMetadata) { self.data = data; self.metadata = [[NSMutableDictionary alloc] init]; NSMutableDictionary* EXIFDictionary = [[controllerMetadata objectForKey:(NSString*)kCGImagePropertyExifDictionary]mutableCopy]; if (EXIFDictionary) { [self.metadata setObject:EXIFDictionary forKey:(NSString*)kCGImagePropertyExifDictionary]; } if (IsAtLeastiOSVersion(@"8.0")) { [[self locationManager] performSelector:NSSelectorFromString(@"requestWhenInUseAuthorization") withObject:nil afterDelay:0]; } [[self locationManager] startUpdatingLocation]; } } else { data = UIImageJPEGRepresentation(image, [options.quality floatValue] / 100.0f); } } } break; default: break; }; return data; } 

所以,如果options.encodingType是PNG,图像质量不会改变。 默认值是JPG,所以问题不在那里。

但是,然后检查

 if ((options.allowsEditing == NO) && (options.targetSize.width <= 0) && (options.targetSize.height <= 0) && (options.correctOrientation == NO)) 

allowsEditing默认为NO

targetSize.widthtargetSize.height默认为0

correctOrientation默认为NO

所以if的所有条件都满足了,质量没有改变。

这听起来像一个错误,因为它没有提到任何地方,你必须指定任何其他值,使质量参数的工作。

那么,你现在可以做什么?

您可以在cordova jira页面https://issues.apache.org/jira/browse/CB上提出问题,或者您可以传递任何参数来更改默认值,并使代码跳过if和go否则与质量代码&#x3002; 改变任何这应该工作:

  allowEdit : true, targetWidth: 100, targetHeight: 100, correctOrientation: true 

编辑:已经有一个错误打开https://issues.apache.org/jira/browse/CB-6190

编辑2:我解决了这个问题,你可以得到更改与cordova plugin add https://github.com/apache/cordova-plugin-camera或等到它被释放到NPM

没有问题。 iOS有更大的图片。 他们称之为function。

http://lifeinlofi.com/more/iphone-photo-sizes-2007-2013/

杰西