java - 存储压缩图像

标签 java android

我可以在内部存储中保存图像,但无法存储压缩后的图像。

这是我的java代码

我已使用 getFileUri() 将图像存储在手机的 Pictures 目录中,并且使用 getimage bytes() 来压缩文件,但我没有收到任何错误,也无法压缩图像。我能够保存正常图像,但无法保存压缩图像。

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private static final String TAG = "MainActivity";
    private Button button, buttonCompress;
    private String encoded_string, image_name;
    private Bitmap bitmap;
    private ImageView img;
    private File file;
    private Uri file_uri;
    private ProgressDialog mProgressDialog;
    Intent data;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ActivityCompat.requestPermissions(this, new String[]
                {android.Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);//For writing into internal storage.

        img = (ImageView) findViewById(R.id.imageView);
        button = (Button) findViewById(R.id.btnCam);
        buttonCompress = (Button) findViewById(R.id.btnComp);
        button.setOnClickListener(this);
        buttonCompress.setOnClickListener(this);

    }

    @Override
    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.btnCam:
                Intent intentCamera = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                getFileUri();
                intentCamera.putExtra(MediaStore.EXTRA_OUTPUT, file_uri);
                startActivityForResult(intentCamera, 10);
                break;
            case R.id.btnComp:
                getImageBytes(img);
                getFileUri();
                break;
        }

    }

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

        if (requestCode == 10 && resultCode == RESULT_OK) {
            img.setImageURI(file_uri);
            Log.d("path is", file.getPath());
            Toast.makeText(MainActivity.this, "Successfully Written !!", Toast.LENGTH_SHORT).show();
        }
    }

    private void getFileUri() {
        image_name = "picture1.jpg";
        file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)
                + File.separator + image_name
        );
        file_uri = Uri.fromFile(file);
        Log.d("uri is", file_uri.toString());
    }


    private byte[] getImageBytes(@NonNull ImageView imageView) {
        Bitmap bitmap = ((BitmapDrawable) imageView.getDrawable()).getBitmap();
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        bitmap.compress(Bitmap.CompressFormat.JPEG, 50, bos);
        return bos.toByteArray();
    }
}

这是我的 XML 文件

<ImageView
    android:id="@+id/imageView"
    android:layout_width="257dp"
    android:layout_height="300dp"
    app:srcCompat="@mipmap/ic_launcher"
    tools:layout_editor_absoluteX="32dp"
    tools:layout_editor_absoluteY="98dp"
    android:adjustViewBounds="true"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true" />

<Button
    android:id="@+id/btnCam"
    android:layout_width="94dp"
    android:layout_height="36dp"
    android:text="Camera"
    tools:layout_editor_absoluteY="448dp"
    tools:layout_editor_absoluteX="145dp"
    android:layout_marginLeft="31dp"
    android:layout_marginStart="31dp"
    android:layout_below="@+id/imageView"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:layout_marginTop="60dp" />

<Button
    android:id="@+id/btnComp"
    android:layout_width="76dp"
    android:layout_height="41dp"
    android:text="compress"
    tools:layout_editor_absoluteX="-9dp"
    tools:layout_editor_absoluteY="-5dp"
    android:layout_alignBottom="@+id/btnCam"
    android:layout_alignRight="@+id/imageView"
    android:layout_alignEnd="@+id/imageView" />

最佳答案

您还没有编写保存它的代码。尝试下面的代码从 imageview 获取图像,压缩它,然后将其保存在您的存储目录中。希望它对您有用。

Bitmap bitmapsave = null;
       //get image bitmap from imageview 
        bitmapsave = ((BitmapDrawable) imageView.getDrawable()).getBitmap();


       //create folder where you want to store compressed image
       File file = new File(Environment.getExternalStorageDirectory().getPath(), "/yourAppname");
        if (!file.exists())
        {
            file.mkdirs();
        }
            // name that image
            String filename = file.getAbsolutePath() + "/" + System.currentTimeMillis() + ".jpg";

    FileOutputStream out = null;
    try
    {
        out = new FileOutputStream(filename);
        bitmapsave.compress(Bitmap.CompressFormat.JPEG, 50, out);
        out.close();

        Toast.makeText(getApplicationContext(), "saved successfully", Toast.LENGTH_SHORT).show();
     }
    catch (FileNotFoundException e)
    {
        e.printStackTrace();
    }
    catch (IOException e)
    {
        e.printStackTrace();
    }

关于java - 存储压缩图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45368880/

相关文章:

java - 计算大数的百分比

android - 如何查询属于一个账户的所有联系人?

android - 无法在 Android Device Monitor 中查看 SD 卡内容

java - Android 将 TextViews 添加到 fragment 中

inno-setup - jre 1.6 inno中的检查和进度条

java - 如何减少 Google App Engine 数据存储延迟?

java - 尝试在空对象引用上调用虚拟方法 'java.lang.String java.lang.Integer.toString()'

java - setVisibility 从 View.GONE 状态到 View.VISIBLE 无法正常工作

Android 设备不会出现在 DDMS 中

android - 在 XML 中设置 Android TimePicker