gpt4 book ai didi

android - 缩放 Android 图片库中的所选图片

转载 作者:行者123 更新时间:2023-11-29 01:50:10 25 4
gpt4 key购买 nike

我有一个关于缩小图片库中所选图片以便我可以通过 php 将其上传到服务器的问题。

所以操作顺序是:

1)从图库中获取选定的图像(完成)

2)按比例缩小并压缩成jpg(卡在这里)

3)异步上传到服务器(完成)

我需要连接第一步和第三步。到目前为止我已经这样做了:

获取所选图像:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);

if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK && null != data) {
Uri selectedImage = data.getData();
String[] filePathColumn = { MediaStore.Images.Media.DATA };

Cursor cursor = getContentResolver().query(selectedImage,
filePathColumn, null, null, null);
cursor.moveToFirst();

int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
String picturePath = cursor.getString(columnIndex);
cursor.close();

Bitmap yourSelectedImage = BitmapFactory.decodeFile(picturePath);

new async_upload().execute(picturePath.toString());
}

}

异步上传:

public class async_upload extends AsyncTask<String, String, String> {
@Override
protected String doInBackground(String... arg0) {
uploadFile(arg0[0]);
return "asd";
}

@Override
protected void onPostExecute(String result) {

}
}

public int uploadFile(String sourceFileUri) {
..............Code for uploading works.......
}

还有我缩小图像的功能。

private Bitmap decodeUri(Uri selectedImage) throws FileNotFoundException {

// Decode image size
BitmapFactory.Options o = new BitmapFactory.Options();
o.inJustDecodeBounds = true;
BitmapFactory.decodeStream(getContentResolver().openInputStream(selectedImage), null, o);

// The new size we want to scale to
final int REQUIRED_SIZE = 640;

// Find the correct scale value. It should be the power of 2.
int width_tmp = o.outWidth, height_tmp = o.outHeight;
int scale = 1;
while (true) {
if (width_tmp / 2 < REQUIRED_SIZE
|| height_tmp / 2 < REQUIRED_SIZE) {
break;
}
width_tmp /= 2;
height_tmp /= 2;
scale *= 2;
}

// Decode with inSampleSize
BitmapFactory.Options o2 = new BitmapFactory.Options();
o2.inSampleSize = scale;
return BitmapFactory.decodeStream(getContentResolver().openInputStream(selectedImage), null, o2);

}

如您所见,我将所选图像的 URI 发送到 uploadFile 以异步上传。我的问题是如何“复制”所选图像,压缩/缩放并发送此图像而不是原始图像。当然,我不想改变用户的图像...但发送缩放版本。

有什么想法吗?谢谢!

最佳答案

你可以按照这些思路做一些事情

File pngDir = new   File(Environment.getExternalStorageDirectory(),"PicUploadTemp");
if (!pngDir.exists()) {
pngDir.mkdirs();
}
pngfile = new File(pngDir,"texture1.jpg");

FileOutputStream fOut;
try {
fOut = new FileOutputStream(pngfile);
finalbitmap.compress(Bitmap.CompressFormat.JPG, 100,fOut);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
pngUri = Uri.fromFile(pngfile);

对于您首先放置的代码,将此方法添加到您的类中

public static int calculateInSampleSize(
BitmapFactory.Options options, int reqWidth, int reqHeight) {
// Raw height and width of image
final int height = options.outHeight;
final int width = options.outWidth;
int inSampleSize = 1;

if (height > reqHeight || width > reqWidth) {

// Calculate ratios of height and width to requested height and width
final int heightRatio = Math.round((float) height / (float) reqHeight);
final int widthRatio = Math.round((float) width / (float) reqWidth);

// Choose the smallest ratio as inSampleSize value, this will guarantee
// a final image with both dimensions larger than or equal to the
// requested height and width.
inSampleSize = heightRatio < widthRatio ? heightRatio : widthRatio;
}

return inSampleSize;
}

然后在你刚刚提交的代码中,这样做

BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeFile(picturePath, options);
int imageHeight = options.outHeight;
int imageWidth = options.outWidth;
String imageType = options.outMimeType;
options.inSampleSize = calculateInSampleSize(options,512,256);//512 and 256 whatever you want as scale
options.inJustDecodeBounds = false;
Bitmap yourSelectedImage = BitmapFactory.decodeFile(selectedImagePath,options);
//Bitmap yourSelectedImage = BitmapFactory.decodeFile(picturePath);

File pngDir = new File(Environment.getExternalStorageDirectory(),"PicUploadTemp");
if (!pngDir.exists()) {
pngDir.mkdirs();
}

File pngfile = new File(pngDir,"texture1.jpg");
FileOutputStream fOut;

try {
fOut = new FileOutputStream(pngfile);

yourSelectedImage.compress(Bitmap.CompressFormat.JPEG, 50,fOut);


} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

new async_upload().execute(pngfile.getPath().toString());
yourSelectedImage.recycle();
resizedBitmap.recycle();
Log.d("INTERNET", yourSelectedImage.toString());

关于android - 缩放 Android 图片库中的所选图片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18675565/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com