0

我正在使用PhoneGap相机 API 拍照。拍照后会显示在我的页面中。它可以工作,但图片保存在应用程序缓存文件夹中,

/mnt/sdcard/Android/data/mypackage.com/cache.

相反,我想将它们保存在我的 SD 卡中的文件夹中/mnt/sdcard/myFolder,或者类似的东西。我经历了很多问答,但我找不到我想要的方式。

这是我的源代码。

  <html>
     <div data-role="page" id="camera_page" data-theme="a">
        <div data-role="header"><h1>Camera-page</h1></div>
        <div data-role="content" class="ui-content">
        <div data-role="fieldcontain">
        <button onclick="capturePhotoWithData();" data-theme="a">Capture Photo</button> <br>

            <img style="display:none;width:60px;height:60px;" id="smallImage" src="" />
            <img style="display:none;" id="largeImage" src="" />
        </div>

    </div>
    <div data-role="footer" data-position="fixed">footer</div>
</div>

</html>

//here is my  java script

  <script type="text/javascript">

  var pictureSource;   // picture source
  var destinationType; // sets the format of returned value 

  // Wait for PhoneGap to connect with the device
   //
   document.addEventListener("deviceready",onDeviceReady,false);

 // PhoneGap is ready to be used!
  //
 function onDeviceReady() {
    pictureSource=navigator.camera.PictureSourceType;
    destinationType=navigator.camera.DestinationType;
}

// Called when a photo is successfully retrieved
//
function onPhotoDataSuccess(imageData) {
  // Get image handle
  //
  var smallImage = document.getElementById('smallImage');

  // Unhide image elements
  //
  smallImage.style.display = 'block';

  // Show the captured photo
  // The inline CSS rules are used to resize the image
  //
  smallImage.src = "data:image/jpeg;base64," + imageData;
}

// Called when a photo is successfully retrieved
//
function onPhotoFileSuccess(imageData) {
  // Get image handle
  console.log(JSON.stringify(imageData));

  // Get image handle
  //
  var smallImage = document.getElementById('smallImage');

  // Unhide image elements
  //
  smallImage.style.display = 'block';

  // Show the captured photo
  // The inline CSS rules are used to resize the image
  //
  smallImage.src = imageData;
}

// Called when a photo is successfully retrieved
//
function onPhotoURISuccess(imageURI) {
  // Uncomment to view the image file URI 
  // console.log(imageURI);

  // Get image handle
  //
  var largeImage = document.getElementById('largeImage');

  // Unhide image elements
  //
  largeImage.style.display = 'block';

  // Show the captured photo
  // The inline CSS rules are used to resize the image
  //
  largeImage.src = imageURI;
}

// A button will call this function
//
function capturePhotoWithData() {
  // Take picture using device camera and retrieve image as base64-encoded string
  navigator.camera.getPicture(onPhotoDataSuccess, onFail, { quality: 50 });
}

function capturePhotoWithFile() {
    navigator.camera.getPicture(onPhotoFileSuccess, onFail, { quality: 50, destinationType: Camera.DestinationType.FILE_URI });
}

// A button will call this function
//
function getPhoto(source) {
  // Retrieve image file location from specified source
  navigator.camera.getPicture(onPhotoURISuccess, onFail, { quality: 50, 
    destinationType: destinationType.FILE_URI,
    sourceType: source });
}

// Called if something bad happens.
// 
function onFail(message) {
  alert("you didn't take any pictures");
}

4

2 回答 2

1

您必须将文件复制到要存储的目标位置。

我所做的是:

  • 从 camera.getPictures 函数接收 fileUri

navigator.camera.getPicture(
        onSuccess,
        onFail, {
          quality: 50, destinationType: Camera.DestinationType.FILE_URI //FILE_URI!
        });

      function onSuccess(imageURI) {
        alert(imageURI); //displays the current location of the file 
        $scope.imageURI = imageURI;
      }

  • 将文件从源文件夹(根据 fileUri)移动到目标:

moveFile($scope.imageURI);

        function moveFile(fileUri) {
          window.resolveLocalFileSystemURL(
            fileUri,
            function(fileEntry){
              window.resolveLocalFileSystemURL(
                cordova.file.externalCacheDirectory, //insert your destination here
                function(dirEntry) {
                  // move the file to a new directory and rename it
                  fileEntry.moveTo(dirEntry, fileEntry.name, onSuccess(fileEntry, dirEntry), onFail);
                },
                onFail);
            },
            onFail);
        }

(主要是从Cordova Move File 使用文件 url 获得的

您的目标文件夹应该是 cordova.file.externalRootDirectory (根据https://github.com/apache/cordova-plugin-file)。

于 2016-03-15T08:23:41.407 回答
0

使用 OnActivityResult 方法检查正确的结果 ID,

String out = "/mnt/sdcard/myFolder/mypic.png";
Bitmap b = i.getExtras().getData("data");

//Create an OutputStream, can't remember how I did it.  this.getOutputStream() maybe?

Bitmap.compress(Bitmap.CompressFormat.valueOf(out), 100, outputStream);

我已经在一个工作项目中做到了这一点,我明天也许可以准确地更新你。

于 2012-06-27T02:00:42.990 回答