使用Cordova(Phonegap)相机API拍摄正方形照片?

5

我已经成功编写了相机API以拍照并保存照片(在iOS上)。但是,我希望照片是正方形的(像Instagram一样)。

我已将targetWidthtargetHeight设置为相同的像素,但图像仍然是肖像或风景,取决于手机的持握方式。

我的完整API代码如下:

 navigator.camera.getPicture(onPhotoDataSuccess, onFail, { 
    quality: 50, 
    targetWidth: 600, 
    targetHeight: 600, 
    correctOrientation: 1, 
    saveToPhotoAlbum: 1
    });

有人知道如何在iOS设备上使用该API保存正方形照片吗?
2个回答

2

在我的测试中,我发现了同样的问题,但我的意图是相反的。我想保留图片的完整尺寸,但当相机打开时,会显示一个“正方形叠加层”,暗示只有正方形内的内容才会被保存。

然后,我将“allowEdit”参数从“true”更改为“false”。现在我可以保存完整的图片。在您的情况下,我看到您没有使用此参数,所以您可能应该在您的代码中添加它。例如:

navigator.camera.getPicture(onPhotoSuccess, onPhotoFail, {
    quality : 40,
    allowEdit : false,
    destinationType : navigator.camera.DestinationType.DATA_URL, 
    encodingType : navigator.camera.EncodingType.PNG, 
    sourceType : navigator.camera.PictureSourceType.CAMERA,
    targetWidth : width,
    targetHeight : height
});

宽度和高度似乎更多地与纵横比相关,而不是图片的尺寸。

我认为我们无法手动控制它。根据您在“allowEdit”参数中设置的值,iOS API将相应地显示或隐藏覆盖层。 - luizs81

2

我一直在(iOS系统上)尝试这个功能,因为我想要方形照片而不是长方形的,以下是我的体验。

设置1

options: CameraOptions = {
        quality: 40,
        allowEdit: false, // OR unset as to allow default 'false'
        cameraDirection: 1, // BACK: 0 FRONT: 1
        destinationType: this.camera.DestinationType.DATA_URL,
        encodingType: this.camera.EncodingType.JPEG,
        mediaType: this.camera.MediaType.PICTURE,
        targetHeight: 200,
        targetWidth: 200
      }

SETTING 2

options: CameraOptions = {
        quality: 40,
        allowEdit: true,
        cameraDirection: 1, // BACK: 0 FRONT: 1
        destinationType: this.camera.DestinationType.DATA_URL,
        encodingType: this.camera.EncodingType.JPEG,
        mediaType: this.camera.MediaType.PICTURE,
        targetHeight: 200,
        targetWidth: 200
      }

设置1返回的是矩形照片,保留了正常的宽高比,并且其中一边被设置为“targetHeight”或“targetWidth”,作为最大高度或最大宽度。

文档:拍照并返回缩略图(调整图片大小)

为了获得更小的图像,您可以通过传递CameraOptions对象中的targetHeight和targetWidth值来返回调整大小的图像。在这个例子中,您将调整返回的图像以适应一个100px×100px的框(保持纵横比,因此100px是源中高度或宽度中较大的一个)

使用设置2时,照片似乎是按照正常方式拍摄的,然后在拍摄照片后,当您得到接受或重新拍摄选项时,会有一个黄色的框覆盖在照片中心指定的尺寸上,从而显示用户批准后的裁剪效果。因此,这里的重点区别在于它不会最初拍摄正方形照片,但会返回一个正方形照片。

请注意,设置2在Android上可能无法正常工作

allowEdit在Android上不可预测,不应使用!该插件的Android实现尝试查找并使用用户设备上的应用程序进行图像裁剪。插件无法控制用户选择哪个应用程序来执行图像裁剪,用户可能会选择不兼容的选项导致插件失败。这有时可以工作,因为大多数设备都带有一个处理裁剪的应用程序,该应用程序与此插件兼容(Google Plus Photos),但依赖于这种情况是不明智的。如果图像编辑对您的应用程序至关重要,请考虑寻求第三方库或插件,以提供自己的图像编辑实用程序,以获得更强大的解决方案。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接