0

PhoneGapカメラ API を使用して写真を撮っています。撮影後、マイページに表示されます。動作しますが、写真はアプリのキャッシュフォルダに保存され、

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

代わりに、SD カードのフォルダに保存したい/mnt/sdcard/myFolder、またはそのようなものです。多くの Q&A を行ってきましたが、希望する方法が見つかりませんでした。

これが私のソースコードです。

  <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);
        }

(これは主に、ファイル url を使用して Cordova Move Fileから取得したものです)

宛先フォルダーは cordova.file.externalRootDirectory である必要があります ( https://github.com/apache/cordova-plugin-fileによると)。

于 2016-03-15T08:23:41.407 に答える
0

正しい結果 ID をチェックする OnActivityResult メソッドを使用して、

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 に答える