I want to save only the cropped image into the gallery. but it saves the original full image. how to save only the cropped image?

前端 未结 4 1393
有刺的猬
有刺的猬 2021-01-16 19:00
public class ImageCroppMainActivity extends Activity implements OnClickListener{

final int CAMERA_CAPTURE = 1;

//keep track of cropping intent

final int PIC_CROP          


        
相关标签:
4条回答
  • 2021-01-16 19:02

    Try this add to your OnActivityResult

    protected void onActivityResult(int requestCode, int resultCode, Intent 
    data) {
    if (resultCode == RESULT_OK) {
    
    if(requestCode == CAMERA_CAPTURE){
    
    picUri = data.getData();
    
    performCrop();
    } 
    else if(requestCode == PIC_CROP){
    
    Bundle extras = data.getExtras();
    
    Bitmap thePic = extras.getParcelable("data");
    
    ImageView picView = (ImageView)findViewById(R.id.picture);
    
    picView.setImageBitmap(thePic);
    
    OutputStream output;
    // Find the SD Card path
    File filepath = Environment.getExternalStorageDirectory();
    
    // Create a new folder in SD Card
    File dir = new File(filepath.getAbsolutePath()
    + "/CroppedImage/");
    dir.mkdirs();
    
    // Create a name for the saved image
    File file = new File(dir, "crop.jpg" );
    
    try {
    
    output = new FileOutputStream(file);
    
    // Compress into png format image from 0% - 100%
    thePic.compress(Bitmap.CompressFormat.JPEG, 100, output);
    output.flush();
    output.close();
    
    }
    
    catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    
    }
    }
    }
    
    0 讨论(0)
  • 2021-01-16 19:04

    Please check the following link it will helps you to crop the image.

    https://github.com/lorensiuswlt/AndroidImageCrop .

    I think it will help you. let me know your status.

    0 讨论(0)
  • 2021-01-16 19:12

    It can be done in only 3 steps -

    1)Android Manifest file

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="camera.test.demo"
    android:versionCode="1"
    android:versionName="1.0" >
    
    <uses-sdk android:minSdkVersion="8" />
    
    <application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name" >
    <activity
    android:name=".SimpleCameraGalleryDemo"
    android:label="@string/app_name" >
    <intent-filter>
    <action android:name="android.intent.action.MAIN" />
    
    <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
    </activity>
    </application>
    
    </manifest>
    

    2)SimpleCameraGalleryDemo Code

    package camera.test.demo;
    import android.app.Activity;
    import android.content.ActivityNotFoundException;
    import android.content.Intent;
    import android.graphics.Bitmap;
    import android.os.Bundle;
    import android.provider.MediaStore;
    import android.view.View;
    import android.widget.Button;
    import android.widget.ImageView;
    
    public class SimpleCameraGalleryDemo extends Activity {
    private static final int PICK_FROM_CAMERA = 1;
    private static final int PICK_FROM_GALLERY = 2;
    ImageView imgview;
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    
    imgview = (ImageView) findViewById(R.id.imageView1);
    Button buttonCamera = (Button) findViewById(R.id.btn_take_camera);`enter code here`
    Button buttonGallery = (Button) findViewById(R.id.btn_select_gallery);
    buttonCamera.setOnClickListener(new View.OnClickListener() {
    
    public void onClick(View v) {
    // call android default camera
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    
    intent.putExtra(MediaStore.EXTRA_OUTPUT,
    MediaStore.Images.Media.EXTERNAL_CONTENT_URI.toString());
    // ******** code for crop image
    intent.putExtra("crop", "true");
    intent.putExtra("aspectX", 0);
    intent.putExtra("aspectY", 0);
    intent.putExtra("outputX", 200);
    intent.putExtra("outputY", 150);
    
    try {
    
    intent.putExtra("return-data", true);
    startActivityForResult(intent, PICK_FROM_CAMERA);
    
    } catch (ActivityNotFoundException e) {
    // Do nothing for now
    }
    }
    });
    buttonGallery.setOnClickListener(new View.OnClickListener() {
    
    @Override
    public void onClick(View v) {
    // TODO Auto-generated method stub
    Intent intent = new Intent();
    // call android default gallery
    intent.setType("image/*");
    intent.setAction(Intent.ACTION_GET_CONTENT);
    // ******** code for crop image
    intent.putExtra("crop", "true");
    intent.putExtra("aspectX", 0);
    intent.putExtra("aspectY", 0);
    intent.putExtra("outputX", 200);
    intent.putExtra("outputY", 150);
    
    try {
    
    intent.putExtra("return-data", true);
    startActivityForResult(Intent.createChooser(intent,
    "Complete action using"), PICK_FROM_GALLERY);
    
    } catch (ActivityNotFoundException e) {
    // Do nothing for now
    }
    }
    });
    }
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    
    if (requestCode == PICK_FROM_CAMERA) {
    Bundle extras = data.getExtras();
    if (extras != null) {
    Bitmap photo = extras.getParcelable("data");
    imgview.setImageBitmap(photo);
    
    }
    }
    
    if (requestCode == PICK_FROM_GALLERY) {
    Bundle extras2 = data.getExtras();
    if (extras2 != null) {
    Bitmap photo = extras2.getParcelable("data");
    imgview.setImageBitmap(photo);
    
    }
    }
    }
    }
    

    3) main.xml File

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
    
    <TextView
    android:id="@+id/textViewAddCard"
    android:layout_width="250dp"
    android:layout_height="50dp"
    android:text="Take Image"
    android:textSize="16dp"
    android:layout_gravity="center"
    android:gravity="center"
    android:typeface="sans"/>
    
    <Button
    android:id="@+id/btn_take_camera"
    android:layout_width="250dp"
    android:layout_height="50dp"
    android:text="Take From Camera"
    android:layout_marginTop="5dp"
    android:layout_gravity="center"
    android:typeface="sans"/>
    
    <Button
    android:id="@+id/btn_select_gallery"
    android:layout_width="250dp"
    android:layout_height="50dp"
    android:text="Select from Gallery"
    android:layout_marginTop="10dp"
    android:layout_gravity="center"
    android:typeface="sans" />
    <ImageView
    android:id="@+id/imageView1"
    android:layout_gravity="center"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />
    </LinearLayout>
    

    I hope it is helpful to you.

    0 讨论(0)
  • 2021-01-16 19:12
    HI please try this to save to your gallery
    MainActivity:
    -----------------
    
    package com.example.satis.crop;
    
    import android.Manifest;
    import android.annotation.SuppressLint;
    import android.annotation.TargetApi;
    import android.app.Activity;
    import android.content.ActivityNotFoundException;
    import android.content.ContentValues;
    import android.content.Intent;
    import android.content.pm.PackageManager;
    import android.graphics.Bitmap;
    import android.graphics.BitmapFactory;
    import android.graphics.drawable.BitmapDrawable;
    import android.net.Uri;
    import android.os.Build;
    import android.os.Environment;
    import android.provider.MediaStore;
    import android.support.v4.content.FileProvider;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.View;
    import android.webkit.WebView;
    import android.widget.Button;
    import android.widget.ImageView;
    import android.widget.Toast;
    
    import com.theartofdev.edmodo.cropper.CropImage;
    import com.theartofdev.edmodo.cropper.CropImageView;
    
    import java.io.ByteArrayOutputStream;
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.List;
    import java.util.Random;
    
    import pub.devrel.easypermissions.AfterPermissionGranted;
    import pub.devrel.easypermissions.AppSettingsDialog;
    import pub.devrel.easypermissions.EasyPermissions;
    
    import android.Manifest;
    import android.content.ActivityNotFoundException;
    import android.content.Intent;
    import android.content.pm.PackageManager;
    import android.graphics.Bitmap;
    import android.net.Uri;
    import android.os.Environment;
    import android.support.v4.app.ActivityCompat;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.util.DisplayMetrics;
    import android.view.View;
    import android.widget.Button;
    import android.widget.ImageView;
    import android.widget.Toast;
    import java.io.File;
    
    public class MainActivity extends AppCompatActivity {
    
        ImageView imageView;
        Button buttonCamera, buttonGallery ;
        File file;
        Uri uri;
        Intent CamIntent, GalIntent, CropIntent ;
        public  static final int RequestPermissionCode  = 1 ;
        DisplayMetrics displayMetrics ;
        int width, height;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            imageView = (ImageView)findViewById(R.id.imageview);
            buttonCamera = (Button)findViewById(R.id.button2);
            buttonGallery = (Button)findViewById(R.id.button1);
    
            EnableRuntimePermission();
    
            buttonCamera.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
    
                    ClickImageFromCamera() ;
    
                }
            });
    
            buttonGallery.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
    
                    GetImageFromGallery();
    
                }
            });
    
        }
    
        public void ClickImageFromCamera() {
    
            CamIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
    
            file = new File(Environment.getExternalStorageDirectory(),
                    "file" + String.valueOf(System.currentTimeMillis()) + ".jpg");
            uri = Uri.fromFile(file);
    
            CamIntent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, uri);
    
            CamIntent.putExtra("return-data", true);
    
            startActivityForResult(CamIntent, 0);
    
        }
    
        public void GetImageFromGallery(){
    
            GalIntent = new Intent(Intent.ACTION_PICK,
                    android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
    
            startActivityForResult(Intent.createChooser(GalIntent, "Select Image From Gallery"), 2);
    
        }
    
        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            if (requestCode == 0 && resultCode == RESULT_OK) {
    
                ImageCropFunction();
    
            }
            else if (requestCode == 2) {
    
                if (data != null) {
    
                    uri = data.getData();
    
                    ImageCropFunction();
    
                }
            }
            else if (requestCode == 1) {
    
                if (data != null) {
    
                    Bundle bundle = data.getExtras();
    
                    Bitmap bitmap = bundle.getParcelable("data");
    
                    imageView.setImageBitmap(bitmap);
                    MediaStore.Images.Media.insertImage(getContentResolver(), bitmap, "cropped" , "cropped");
    
    
                }
            }
        }
    
        public void ImageCropFunction() {
    
            // Image Crop Code
            try {
                CropIntent = new Intent("com.android.camera.action.CROP");
    
                CropIntent.setDataAndType(uri, "image/*");
    
                CropIntent.putExtra("crop", "true");
                CropIntent.putExtra("outputX", 180);
                CropIntent.putExtra("outputY", 180);
                CropIntent.putExtra("aspectX", 3);
                CropIntent.putExtra("aspectY", 4);
                CropIntent.putExtra("scaleUpIfNeeded", true);
                CropIntent.putExtra("return-data", true);
    
                startActivityForResult(CropIntent, 1);
    
            } catch (ActivityNotFoundException e) {
    
            }
        }
        //Image Crop Code End Here
    
        public void EnableRuntimePermission(){
    
            if (ActivityCompat.shouldShowRequestPermissionRationale(MainActivity.this,
                    Manifest.permission.CAMERA))
            {
    
                Toast.makeText(MainActivity.this,"CAMERA permission allows us to Access CAMERA app", Toast.LENGTH_LONG).show();
    
            } else {
    
                ActivityCompat.requestPermissions(MainActivity.this,new String[]{
                        Manifest.permission.CAMERA}, RequestPermissionCode);
    
            }
        }
    
        @Override
        public void onRequestPermissionsResult(int RC, String per[], int[] PResult) {
    
            switch (RC) {
    
                case RequestPermissionCode:
    
                    if (PResult.length > 0 && PResult[0] == PackageManager.PERMISSION_GRANTED) {
    
                        Toast.makeText(MainActivity.this,"Permission Granted, Now your application can access CAMERA.", Toast.LENGTH_LONG).show();
    
                    } else {
    
                        Toast.makeText(MainActivity.this,"Permission Canceled, Now your application cannot access CAMERA.", Toast.LENGTH_LONG).show();
    
                    }
                    break;
            }
        }
    
    }
    
    
    AndroidManifest.xml
    -----------------------
    
    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.example.satis.crop">
    
        <uses-permission android:name="android.permission.CAMERA" />
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
        <uses-feature android:name="android.hardware.camera" />
    
        <application
            android:allowBackup="true"
            android:icon="@mipmap/ic_launcher"
            android:label="@string/app_name"
            android:supportsRtl="true"
            android:theme="@style/AppTheme">
            <activity android:name=".MainActivity">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
    
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
        </application>
    
    </manifest>
    
    
    Activity_main:
    -------------
    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/activity_main"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#FFECB3"
        tools:context="com.example.satis.crop.MainActivity">
    
        <ImageView
            android:layout_width="250dp"
            android:layout_height="325dp"
            android:id="@+id/imageview"
            android:layout_centerHorizontal="true"
            />
    
        <Button
            android:text="Click Here For PICK image from Gallery TO CROP"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_below="@+id/imageview"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="7dp"
            android:id="@+id/button1" />
    
        <Button
            android:text="Click Here For CLICK image from Camera TO CROP"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_below="@+id/button1"
            android:layout_alignRight="@+id/button1"
            android:layout_alignEnd="@+id/button1"
            android:layout_marginTop="7dp"
            android:id="@+id/button2" />
    </RelativeLayout>
    
    res/xml:
    --------
    <?xml version="1.0" encoding="utf-8"?>
    <paths>
        <external-path name="external_files" path="." />
    </paths>
    
    0 讨论(0)
提交回复
热议问题