gpt4 book ai didi

ios - Phonegap Build iOS camera.getPicture()质量参数不起作用

转载 作者:行者123 更新时间:2023-12-01 18:11:06 27 4
gpt4 key购买 nike

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

功能捕获照片(){

        // 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 上运行我的应用程序的用户(我还没有使用 6 的测试人员)一直在上传大图像。

我已将质量降低到 10 和 5。Android 提交的图像的图像大小已适当减小 - 但 IOS 图像仍然很大。谁能告诉我这里是否存在已知问题?

API Docs 说你不能降低从画廊或相机胶卷中选择的图像的质量——但这些不是。它们是从相机加载的。

最佳答案

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

- (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 并使用质量代码转到 else。更改其中任何一个都应该有效:
  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 - Phonegap Build iOS camera.getPicture()质量参数不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31252483/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com