在android中插入imageview之前我们如何检查图像大小?

时间:2017-01-23 06:03:57

标签: android

我有一个应用程序,其中包含一个“imageview”和一个名为uploadImage的“按钮”。当我点击uploadimage时,它会打开一个选择器选项,用户可以从中选择图像并在imageview中设置它。问题是在图像视图中设置图像之前我想检查图像大小是否超过200 kb如果找到然后显示吐司信息,则进一步继续。

代码: -

private void showFileChooser() {
    // Create intent to Open Image applications like Gallery, Google Photos
    Intent galleryIntent = new Intent(Intent.ACTION_PICK,
            android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
    startActivityForResult(galleryIntent,PICK_IMAGE_REQUEST);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    try {
        // When an Image is picked
        if (requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK
                && null != data) {
            // Get the Image from data

            Uri selectedImage = data.getData();
            String[] filePathColumn = { MediaStore.Images.Media.DATA };

            // Get the cursor
            Cursor cursor = getContentResolver().query(selectedImage,
                    filePathColumn, null, null, null);
            // Move to first row
            cursor.moveToFirst();

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

            // Set the Image in ImageView after decoding the String
            m_UploadImage.setImageBitmap(BitmapFactory
                    .decodeFile(imgDecodableString));

        } else {
            Toast.makeText(this, "You haven't picked Image",
                    Toast.LENGTH_LONG).show();
        }
    } catch (Exception e) {
        Toast.makeText(this, "Something went wrong", Toast.LENGTH_LONG)
                .show();
    }
}

3 个答案:

答案 0 :(得分:0)

您可以使用以下代码检查图像大小:

Bitmap bitImage = BitmapFactory.decodeResource(getResources(), 
            R.drawable.ic_launcher);// For example I took ic_launcher


     Bitmap bitmap = bitImage;
     ByteArrayOutputStream stream = new ByteArrayOutputStream();   
     bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream);   
     byte[] imageInByte = stream.toByteArray(); 
     long sizeOfImage = imageInByte.length; //Image size

您的密码:

private void showFileChooser() {
    // Create intent to Open Image applications like Gallery, Google Photos
    Intent galleryIntent = new Intent(Intent.ACTION_PICK,
            android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
    startActivityForResult(galleryIntent,PICK_IMAGE_REQUEST);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    try {
        // When an Image is picked
        if (requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK
                && null != data) {
            // Get the Image from data

            Uri selectedImage = data.getData();
            String[] filePathColumn = { MediaStore.Images.Media.DATA };

            // Get the cursor
            Cursor cursor = getContentResolver().query(selectedImage,
                    filePathColumn, null, null, null);
            // Move to first row
            cursor.moveToFirst();

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

                // Set the Image in ImageView after decoding the String
 Bitmap bitImage = BitmapFactory.decodeFile(imgDecodableString);
Bitmap bitmap = bitImage;
         ByteArrayOutputStream stream = new ByteArrayOutputStream();   
         bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream);   
         byte[] imageInByte = stream.toByteArray(); 
             long sizeOfImage = imageInByte.length; //Image size
//Code to check image size greater than 20KB
    if(sizeofImage/1024 > 200){
     Toast.makeText(this, "Image size more than 200KB", Toast.LENGTH_LONG)

    }else{
                m_UploadImage.setImageBitmap(bitImage);

          }  
                } else {
                    Toast.makeText(this, "You haven't picked Image",
                            Toast.LENGTH_LONG).show();
                }
            } catch (Exception e) {
                Toast.makeText(this, "Something went wrong", Toast.LENGTH_LONG)
                        .show();
            }
        }

答案 1 :(得分:0)

或者你可以尝试这种方式,

首先,你在ImageView上附加了Bitmap:

使用:

Bitmap bitmap = ((BitmapDrawable)image.getDrawable()).getBitmap();

在您的代码中:

    private void showFileChooser() {
        // Create intent to Open Image applications like Gallery, Google Photos
        Intent galleryIntent = new Intent(Intent.ACTION_PICK,
                android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
        startActivityForResult(galleryIntent,PICK_IMAGE_REQUEST);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        try {
            // When an Image is picked
            if (requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK
                    && null != data) {
                // Get the Image from data

                Uri selectedImage = data.getData();
                String[] filePathColumn = { MediaStore.Images.Media.DATA };

                // Get the cursor
                Cursor cursor = getContentResolver().query(selectedImage,
                        filePathColumn, null, null, null);
                // Move to first row
                cursor.moveToFirst();

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

                // Set the Image in ImageView after decoding the String
                m_UploadImage.setImageBitmap(BitmapFactory
                        .decodeFile(imgDecodableString));


               //Get the Bitmap in your ImageView

Bitmap bitmap = ((BitmapDrawable)m_UploadImage.getDrawable()).getBitmap();

               // Then check the Image size 
ByteArrayOutputStream stream = new ByteArrayOutputStream();   
     bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream);   
     byte[] imageInByte = stream.toByteArray(); 
     long lengthbmp = imageInByte.length; 

  Toast.makeText(this, "Length of the Image :" + lengthbmp,
                        Toast.LENGTH_LONG).show();


            } else {
                Toast.makeText(this, "You haven't picked Image",
                        Toast.LENGTH_LONG).show();
            }
        } catch (Exception e) {
            Toast.makeText(this, "Something went wrong", Toast.LENGTH_LONG)
                    .show();
        }
    }

答案 2 :(得分:0)

最好你创建另一个类并在该类中编写这个公共方法,因为将来你可以使用这个类。

 public class UtilClassName{
 public static int getFileSize(Uri imageUri,Activity activity){
     int kb_size=0;
     try {
        InputStream is=activity.getContentResolver().openInputStream(imageUri);
        int byte_size=is.available();
        int kb_size=byte_size/1024;
    }
    catch (Exception e){
       // here you can handle exception here
    }
    return kb_size;
}
}

在您的代码中使用此逻辑

 if(UtilClassName.getFileSize(selectedImage,this)<=200){
    Cursor cursor = getContentResolver().query(selectedImage,
                filePathColumn, null, null, null);
        // Move to first row
        cursor.moveToFirst();

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

        // Set the Image in ImageView after decoding the String
        m_UploadImage.setImageBitmap(BitmapFactory
                .decodeFile(imgDecodableString));
 }
 else{
   //show a warning to the user
 }

尝试此方法,如果您遇到任何问题,请告诉我。之前我遇到过这个问题,我为文件压缩器类创建了这个方法。我希望你能得到解决方案。