保存图片到新目录
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)
我也想把图片保存在我自己的目录下,这可能是保存图片的目录
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)