繁体   English   中英

如何在 Android 上的 MediaStore.Images.Media 选择图像后调整图像大小

[英]How to resize image after MediaStore.Images.Media selected image on Android

我目前已成功将移动应用程序中的图像上传到服务器。 我试图弄清楚如何调整图像大小并在将其发送到服务器之前可能创建一个缩略图。 我尝试了很多我在网上找到的方法,但都没有奏效。

以下是我到目前为止的代码。

            filePath = data.getData();
            try {
                bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), filePath);
                imageView.setImageBitmap(bitmap);

            } catch (IOException e) {
                e.printStackTrace();
            }
        }


public void uploadMultipart() {

       SessionHandler mySession = new SessionHandler(this);
       User user = mySession.getUserDetails();

       String title = editText.getText().toString().trim();
       String path = getPath(filePath);
       String studentid = user.studentid;
       String email  = user.email;
       String firstname = user.firstname;
       //Toast.makeText(this, firstname, Toast.LENGTH_SHORT).show();

        try {
            String uploadId = UUID.randomUUID().toString();
            uploadReceiver.setDelegate(this);
            uploadReceiver.setUploadID(uploadId);

            new MultipartUploadRequest(this, uploadId, Constants.UPLOAD_URL)
                    .addFileToUpload(path, "image")
                    .addParameter("title", title)
                    .addParameter("studentid", studentid)
                    .addParameter("firstname", firstname)
                    .addParameter("email", email)

                    //.setNotificationConfig(new UploadNotificationConfig())
                    .setMaxRetries(2)
                    .startUpload();
        } catch (Exception exc) {
            Toast.makeText(this, exc.getMessage(), Toast.LENGTH_SHORT).show();
        }
    }

要压缩您的图像,请将此方法写入您的活动

public void compressImage(String filePath) {
                try {
                    OutputStream outStream = null;

                   Log.i("filePath",filePath);
                    outStream = new FileOutputStream(filePath);
                    BitmapFactory.Options bmOptions = new BitmapFactory.Options();
                    bmOptions.inSampleSize = 8;
                    bitmap = BitmapFactory.decodeFile(filePath ,bmOptions);

                    bitmap.compress(Bitmap.CompressFormat.JPEG, 50, outStream);


                    outStream.flush();
                    outStream.close();


                    Log.i("file path compress", filePath);

                } catch (Exception e) {

                    Log.i("exception", e.toString());
                }
            }

并在您的活动结果中调用它

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

if(requestCode == TAKE_PHOTO){ //your request code

filePath = data.getData();
        try {

            compressImage(filePath);

            bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), filePath);
            imageView.setImageBitmap(bitmap);

        } catch (IOException e) {
            e.printStackTrace();
        }
   }
}

您可以在 compressImage 方法上尽可能多地压缩图像。

public Bitmap resizeBitmap(Bitmap bitmap, int newWidth, int newHeight) {
int width = bitmap.getWidth();
int height = bitmap.getHeight();
float scaleWidth = ((float) newWidth) / width;
float scaleHeight = ((float) newHeight) / height;
Matrix matrix = new Matrix();
matrix.postScale(scaleWidth, scaleHeight);

Bitmap resizedBitmap = Bitmap.createBitmap(
    bitmap, 0, 0, width, height, matrix, false);
bitmap.recycle();
return resizedBitmap;

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM