iPhone 5在PhoneGap中的相机功能,图像被压扁

时间:2012-10-02 11:33:53

标签: javascript cordova ios6 iphone-5

所以我有一个ios应用程序,pre ios6 / iPhone5。它运作良好。我目前正在尝试为iPhone5和ios6修复它。进展顺利,我已经解决了99%的ios6错误,似乎工作正常。但iPhone 5却很有气质。

我正在使用PhoneGap 1.8.1。有一次,我使用此功能拍摄相机的图像:

function capturePhoto() {

        networkState = navigator.network.connection.type; 

            if (networkState == Connection.NONE)
                {
                  alert('You must be connected to the internet to use this feature!');

                }else{


                var options = {
                    quality: 100,
                    correctOrientation: false,
                    destinationType : navigator.camera.DestinationType.FILE_URI,
                    sourceType: navigator.camera.PictureSourceType.CAMERA,
                    encodingType: navigator.camera.EncodingType.JPEG,
              }
          navigator.camera.getPicture(onPhotoDataSuccess, onFail, options);

    }
}

然后我在HTML画布上将图像显示为背景。使用kineticJS但是出于这个问题的目的,我认为你需要知道的是:

var canvaswidth = window.innerWidth;
var canvasheight = window.innerHeight;

var darthVaderImg = new Kinetic.Image({
                                          x: 0,
                                          y: 0,
                                          image: images.darthVader,
                                          width: canvaswidth,
                                          height: canvasheight,
                                          name: "image"
                                          });

这在iphone 4s ios 6上运行正常,这在Android上工作得很好......但在iPhone 5上却没有。图片是正确的方向,但它在顶部被压扁,我尝试将其硬编码到iPhone 5的屏幕尺寸....我认为是640x1136?

仍然没有运气,如果我夸大并将图像高度设置为2000例如,它确实覆盖了屏幕,但是放大了。我对于发生的事情感到很遗憾....任何人都有类似的问题,或任何想法?

1 个答案:

答案 0 :(得分:1)

好的,所以我想我已经想到了这个:

首先要意识到iPhone 5的尺寸与iPhone 4S完全相同。我刚刚测试并证实了这一点。因此额外的屏幕尺寸无关紧要。

一旦我意识到这一点,请使用Simon MacDonald撰写的文章。可在此处获取:

http://simonmacdonald.blogspot.co.uk/2012/07/change-to-camera-code-in-phonegap-190.html

然后我将这两行添加到capturePhoto函数中:

targetWidth: 320,
targetHeight: 480,

这确保拍摄的图像尺寸正确,并且附加的优点是它在4和5上的正确性。

然后我确保它在画布上以正确的大小显示,我的画布显示尺寸变为:

var canvaswidth = 320;
var canvasheight = 480;

var darthVaderImg = new Kinetic.Image({
                                          x: 0,
                                          y: 0,
                                          image: images.darthVader,
                                          width: canvaswidth,
                                          height: canvasheight,
                                          name: "image"
                                          });

这使图像保持成比例,我的完美主义者说它只有99%是正确的,但是它覆盖了画布并且不是不成比例的。

这确实让我在iPhone 5上留下了过多的“空间”,但我只是通过检测窗口高度与IF语句对抗:

window.innerHeight

使用它作为变量我可以在iphone5和iphone4 / 4s之间分辨,然后我可以为两者设置不同的规则,就显示操作而言。

希望这可以帮助遇到同样问题的人。