【问题标题】:Phonegap Build iOS camera.getPicture() quality parameter not workingPhonegap Build iOS camera.getPicture()质量参数不起作用
【发布时间】:2015-07-06 17:53:18
【问题描述】:

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

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

API 文档说您不能降低从图库或相机胶卷中选择的图像的质量 - 但这些不是。它们是从相机加载的。

【问题讨论】:

  • 可能是因为 iphone 使用 png ?我不知道phonegap是如何实现摄像头的,但是ios本机默认使用png

标签: ios cordova phonegap-plugins phonegap-build


【解决方案1】:

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

- (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

【讨论】:

  • 这里的详细分析真的很有帮助。
  • @scottdickerson 我修复了插件,几周前就发布了,如果你使用最新版本的插件应该不会再有这个问题了
  • 哦,我想起来了,它已经发布了,但是由于visual studio的一些问题,“最新”仍然指向旧版本,安装带有修复的版本cordova plugin add cordova-plugin-camera@2
  • 嘿,我今天仍然有这个问题。这个可以吗? var options = { quality: 25, destinationType: Camera.DestinationType.FILE_URI, sourceType: Camera.PictureSourceType.CAMERA, encodingType: Camera.EncodingType.JPEG, saveToPhotoAlbum: false, correctOrientation: true, allowEdit: false, targetHeight: 200, targetwidth: 200 };
  • @BraianMellor 您使用的是哪个插件版本?您可能使用的是旧版本,或者错误可能又回来了。
【解决方案2】:

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

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

杰西

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-06
    • 2017-06-22
    • 2023-03-22
    • 1970-01-01
    • 2014-05-14
    • 1970-01-01
    • 2014-11-03
    • 2011-12-08
    相关资源
    最近更新 更多