保存图片到新目录

save picture in new directory

我也想把图片保存在我自己的目录下,这可能是保存图片的目录

  Uri uriTarget = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, new ContentValues());

OutputStream imageFileOS;

这是我要将我的图像 uri 目标指定到图像将要保存的位置

 imageFileOS = getContentResolver().openOutputStream(uriTarget);

                imageFileOS.write(arg0);

                imageFileOS.flush();

                imageFileOS.close();

我如何通过创建自己的目录并在其中保存图像来实现这一目标

您好,我想分享在您的自定义目录中创建和保存图像的方法,如下所示:

private void createDirectoryAndSaveFile(Bitmap imageToSave, String fileName) {

File direct = new File(Environment.getExternalStorageDirectory() + "/DirName");

if (!direct.exists()) {
    File wallpaperDirectory = new File("/sdcard/DirName/");
    wallpaperDirectory.mkdirs();
}

File file = new File(new File("/sdcard/DirName/"), fileName);
if (file.exists()) {
    file.delete();
}
try {
    FileOutputStream out = new FileOutputStream(file);
    imageToSave.compress(Bitmap.CompressFormat.JPEG, 100, out);
    out.flush();
    out.close();
} catch (Exception e) {
    e.printStackTrace();
}

}

您应该提供要保存的位图对象和要保存的目录名称,如下所示:

createDirectoryAndSaveFile(imageToSave,fileName);

我试过拍照然后裁剪然后存储在SDCard上。
代码如下,或许你会有所启发:


拍照:

        Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
        intent.putExtra("return-data", false);
        intent.putExtra(MediaStore.EXTRA_OUTPUT,
                Uri.fromFile(AVATAR_FILE_TMP));
        intent.putExtra("outputFormat",
                Bitmap.CompressFormat.JPEG.toString());
        intent.putExtra("noFaceDetection", true);
        startActivityForResult(intent, CODE_TAKE_PHOTO);


Then crop the photo:

if (requestCode == CODE_TAKE_PHOTO) {
    cropImage(Uri.fromFile(AVATAR_FILE_TMP));
}
public void cropImage(Uri uri) {
    Intent intent = new Intent("com.android.camera.action.CROP");
    intent.setDataAndType(uri, "image/*");
    intent.putExtra("crop", "true");
    // aspectX aspectY 是宽高的比例
    intent.putExtra("aspectX", 1);
    intent.putExtra("aspectY", 1);
    // outputX outputY 是裁剪图片宽高
    intent.putExtra("outputX", 400);
    intent.putExtra("outputY", 400);
    intent.putExtra("return-data", true);
    startActivityForResult(intent, CODE_CROP_IMAGE);
}


最后,存储图片:

            Bundle extras = data.getExtras();
            if (extras != null) {
                Bitmap photo = extras.getParcelable("data");
                // civAvatar.setImageBitmap(photo); // 把图片显示在ImageView控件上
                FileOutputStream fos = null;
                try {
                    // store the picture
                    fos = new FileOutputStream(AVATAR_FILE);
                    photo.compress(Bitmap.CompressFormat.PNG, 100, fos);// (0-100)compress file.
                    AVATAR_FILE_TMP.deleteOnExit();
                } catch (FileNotFoundException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } finally {
                    IoUtils.closeSilently(fos);
                    finish();
                }
            }

而如果只存图片,intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(AVATAR_FILE_TMP));就可以了。

当您的 phone 或相机正在拍摄 JPEG 时,涉及大量位图的解决方案(恕我直言)无关紧要。

查看此处的解决方案以获得几乎即时的解决方案:

new FileOutputStream(myPath).write(byte[] myPictureCallbackBytes)