拍照相册选择剪裁

添加jar包picasso-2.5.2.jar

1.MianActivity
private Uri imageUri;
private int from = -1;

在onCreate中添加
initViews();
private void initViews() {
    photoList = new ArrayList<>();
    photoList.add("拍照");
    photoList.add("从相册中选择");
}
private void dialogListShow(final int i) {
    View photoView = View.inflate(MyZiliaoActivity.this, R.layout.item_listview_dialog, null);//填充ListView布局
    ListView listView = (ListView) photoView.findViewById(R.id.lv_item_listview_dialog);//初始化ListView控件
    listView.setAdapter(new DialogListViewAdapter(MyZiliaoActivity.this, photoList));//ListView设置适配器
    final AlertDialog dialog2 = new AlertDialog.Builder(MyZiliaoActivity.this)
            .setView(photoView)//在这里把写好的这个listview的布局加载dialog            .create();
    dialog2.show();
    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {//响应listview中的item的点击事件

        @Override
        public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                                long arg3) {
            // TODO Auto-generated method stub
            TextView tv = (TextView) arg1.findViewById(R.id.tv_item_listview_dialog_text);//取得每条item中的textview控件
            String aiche = tv.getText().toString();
            if ("拍照".equals(aiche)) {
                File outputImage = new File(getExternalCacheDir(),
                        "output_image"+i+".jpg");
                try {
                    if (outputImage.exists()) {
                        outputImage.delete();
                    }
                    outputImage.createNewFile();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                if (Build.VERSION.SDK_INT >= 24) {
                    imageUri = FileProvider.getUriForFile(MyZiliaoActivity.this,
                            "com.example.administrator.ydxcfwpt.fileprovider", outputImage);
                } else {
                    imageUri = Uri.fromFile(outputImage);
                }
                Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
                intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
                from = i;
                startActivityForResult(intent, TAKE_PHOTO);
            } else if ("从相册中选择".equals(aiche)) {
                Intent intent = new Intent("android.intent.action.GET_CONTENT");
                intent.setType("image/*");
                from = i;
                startActivityForResult(intent, CHOOSE_PHOTO);
            }
            dialog2.dismiss();
        }
    });
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    switch (requestCode) {
        case TAKE_PHOTO:
            if (resultCode == RESULT_OK) {
                beginCrop(imageUri,from);
            }
            break;
        case CHOOSE_PHOTO:
            if (resultCode == RESULT_OK) {
                if (Build.VERSION.SDK_INT >= 19) {
                    handleImageOnKatKit(data);
                } else {
                    handleImageBeforKatKit(data);
                }
            }
            break;
        case Crop.REQUEST_PICK:
            if (resultCode == RESULT_OK) {
                beginCrop(data.getData(),from);
            }
            break;
        case Crop.REQUEST_CROP:
            handleCrop(resultCode, data);
    }
}
// 将裁剪回来的数据进行处理
private void handleCrop(int resultCode, Intent data) {
    if (resultCode == RESULT_OK) {
        Uri uri = Crop.getOutput(data);
        try {
            if (from == 1) {
                iv_touxiang.setImageBitmap(null);
                touxiangFile = new File(ImageUtils.saveBitmap(MyZiliaoActivity.this, uri.getPath()));
                Uri image = Uri.fromFile(touxiangFile);
                Picasso.with(MyZiliaoActivity.this).load(image)
                        .memoryPolicy(MemoryPolicy.NO_CACHE)
                        .networkPolicy(NetworkPolicy.NO_CACHE)
                        .error(R.drawable.morentouxiang)
                        .into(iv_touxiang);
                Log.i("image", "touxiangFile=" + touxiangFile.getAbsolutePath());
            } else if (from == 2) {
                iv_zhengmian.setImageBitmap(null);
                zhengmianFile = new File(ImageUtils.saveBitmap(MyZiliaoActivity.this, uri.getPath()));
                Uri image = Uri.fromFile(zhengmianFile);
                Picasso.with(MyZiliaoActivity.this).load(image)
                        .memoryPolicy(MemoryPolicy.NO_CACHE)
                        .networkPolicy(NetworkPolicy.NO_CACHE)
                        .error(R.drawable.zhanwei)
                        .into(iv_zhengmian);
                Log.i("image", "zhengmianFile=" + zhengmianFile.getAbsolutePath());
            }else if (from == 3) {
                iv_fanmian.setImageBitmap(null);
                fanmianFile = new File(ImageUtils.saveBitmap(MyZiliaoActivity.this, uri.getPath()));
                Uri image = Uri.fromFile(fanmianFile);
                Picasso.with(MyZiliaoActivity.this).load(image)
                        .memoryPolicy(MemoryPolicy.NO_CACHE)
                        .networkPolicy(NetworkPolicy.NO_CACHE)
                        .error(R.drawable.beimian)
                        .into(iv_fanmian);
                Log.i("image", "fanmianFile=" + fanmianFile.getAbsolutePath());
            }else if (from == 4) {
                iv_shouchi.setImageBitmap(null);
                shouchiFile = new File(ImageUtils.saveBitmap(MyZiliaoActivity.this, uri.getPath()));
                Uri image = Uri.fromFile(shouchiFile);
                Picasso.with(MyZiliaoActivity.this).load(image)
                        .memoryPolicy(MemoryPolicy.NO_CACHE)
                        .networkPolicy(NetworkPolicy.NO_CACHE)
                        .error(R.drawable.shouchi)
                        .into(iv_shouchi);
                Log.i("image", "shouchiFile=" + shouchiFile.getAbsolutePath());
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    } else if (resultCode == Crop.RESULT_ERROR) {
        Toast.makeText(MyZiliaoActivity.this, Crop.getError(data).getMessage(),
                Toast.LENGTH_SHORT).show();

    }
}
// 开始裁剪
private void beginCrop(Uri uri,int i) {
    Uri destination = Uri.fromFile(new File(getCacheDir(), "cropped"+i+".jpg"));
    // start() 方法根据其的需求选择不同的重载方法
    Crop.of(uri, destination).withMaxSize(500,500).start(MyZiliaoActivity.this);
}
private void handleImageBeforKatKit(Intent data) {
    Uri uri = data.getData();
    String imagePath = getImagePath(uri, null);
    disPlayImage(imagePath);
}

@TargetApi(19)
private void handleImageOnKatKit(Intent data) {
    String imagePath = null;
    Uri uri = data.getData();
    if (DocumentsContract.isDocumentUri(MyZiliaoActivity.this, uri)) {
        //  如果是Document类型的uri,则通过Document  Id处理
        String docId = DocumentsContract.getDocumentId(uri);
        if ("com.android.providers.media.documents".equals(uri.getAuthority())) {
            String id = docId.split(":")[1];
            String selection = MediaStore.Images.Media._ID + "=" + id;
            imagePath = getImagePath(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, selection);
        } else if ("com.android.providers.downloads.documents".equals(uri.getAuthority())) {
            Uri contentUri = ContentUris.withAppendedId(Uri.parse(
                    "content://downloads/public/_downloads"), Long.valueOf(docId));
            imagePath = getImagePath(contentUri, null);
        }
    } else if ("content".equalsIgnoreCase(uri.getScheme())) {
        //如果是content类型的uri,则使用普通方式处理
        imagePath = getImagePath(uri, null);
    } else if ("file".equalsIgnoreCase(uri.getScheme())) {
        //如果是file类型的uri,则直接获取图片路径即可
        imagePath = uri.getPath();
    }
    disPlayImage(imagePath);
}

private void disPlayImage(String imagePath) {
    if (imagePath != null) {
        Uri uri = Uri.fromFile(new File(imagePath));
        beginCrop(uri,from);
    } else {
        Toast.makeText(MyZiliaoActivity.this, "图片选取失败", Toast.LENGTH_SHORT).show();
    }
}
private String getImagePath(Uri uri, String selection) {
    String path = null;
    //通过uriselection来获取图片的真是路径
    Cursor cursor = getContentResolver().query(uri, null, selection, null, null);
    if (cursor != null) {
        if (cursor.moveToFirst()) {
            path = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA));
        }
        cursor.close();
    }
    return path;
在点击事件中添加方法
 
dialogListShow(1)

在使用Python来安装geopandas包时,由于geopandas依赖于几个其他的Python库(如GDAL, Fiona, Pyproj, Shapely等),因此安装过程可能需要一些额外的步骤。以下是一个基本的安装指南,适用于大多数用户: 使用pip安装 确保Python和pip已安装: 首先,确保你的计算机上已安装了Python和pip。pip是Python的包管理工具,用于安装和管理Python包。 安装依赖库: 由于geopandas依赖于GDAL, Fiona, Pyproj, Shapely等库,你可能需要先安装这些库。通常,你可以通过pip直接安装这些库,但有时候可能需要从其他源下载预编译的二进制包(wheel文件),特别是GDAL和Fiona,因为它们可能包含一些系统级的依赖。 bash pip install GDAL Fiona Pyproj Shapely 注意:在某些系统上,直接使用pip安装GDAL和Fiona可能会遇到问题,因为它们需要编译一些C/C++代码。如果遇到问题,你可以考虑使用conda(一个Python包、依赖和环境管理器)来安装这些库,或者从Unofficial Windows Binaries for Python Extension Packages这样的网站下载预编译的wheel文件。 安装geopandas: 在安装了所有依赖库之后,你可以使用pip来安装geopandas。 bash pip install geopandas 使用conda安装 如果你正在使用conda作为你的Python包管理器,那么安装geopandas和它的依赖可能会更简单一些。 创建一个新的conda环境(可选,但推荐): bash conda create -n geoenv python=3.x anaconda conda activate geoenv 其中3.x是你希望使用的Python版本。 安装geopandas: 使用conda-forge频道来安装geopandas,因为它提供了许多地理空间相关的包。 bash conda install -c conda-forge geopandas 这条命令会自动安装geopandas及其所有依赖。 注意事项 如果你在安装过程中遇到任何问题,比如编译错误或依赖问题,请检查你的Python版本和pip/conda的版本是否是最新的,或者尝试在不同的环境中安装。 某些库(如GDAL)可能需要额外的系统级依赖,如地理空间库(如PROJ和GEOS)。这些依赖可能需要单独安装,具体取决于你的操作系统。 如果你在Windows上遇到问题,并且pip安装失败,尝试从Unofficial Windows Binaries for Python Extension Packages网站下载相应的wheel文件,并使用pip进行安装。 脚本示例 虽然你的问题主要是关于如何安装geopandas,但如果你想要一个Python脚本来重命名文件夹下的文件,在原始名字前面加上字符串"geopandas",以下是一个简单的示例: python import os # 指定文件夹路径 folder_path = 'path/to/your/folder' # 遍历文件夹中的文件 for filename in os.listdir(folder_path): # 构造原始文件路径 old_file_path = os.path.join(folder_path, filename) # 构造新文件名 new_filename = 'geopandas_' + filename # 构造新文件路径 new_file_path = os.path.join(folder_path, new_filename) # 重命名文件 os.rename(old_file_path, new_file_path) print(f'Renamed "{filename}" to "{new_filename}"') 请确保将'path/to/your/folder'替换为你想要重命名文件的实际文件夹路径。
在使用Python来安装geopandas包时,由于geopandas依赖于几个其他的Python库(如GDAL, Fiona, Pyproj, Shapely等),因此安装过程可能需要一些额外的步骤。以下是一个基本的安装指南,适用于大多数用户: 使用pip安装 确保Python和pip已安装: 首先,确保你的计算机上已安装了Python和pip。pip是Python的包管理工具,用于安装和管理Python包。 安装依赖库: 由于geopandas依赖于GDAL, Fiona, Pyproj, Shapely等库,你可能需要先安装这些库。通常,你可以通过pip直接安装这些库,但有时候可能需要从其他源下载预编译的二进制包(wheel文件),特别是GDAL和Fiona,因为它们可能包含一些系统级的依赖。 bash pip install GDAL Fiona Pyproj Shapely 注意:在某些系统上,直接使用pip安装GDAL和Fiona可能会遇到问题,因为它们需要编译一些C/C++代码。如果遇到问题,你可以考虑使用conda(一个Python包、依赖和环境管理器)来安装这些库,或者从Unofficial Windows Binaries for Python Extension Packages这样的网站下载预编译的wheel文件。 安装geopandas: 在安装了所有依赖库之后,你可以使用pip来安装geopandas。 bash pip install geopandas 使用conda安装 如果你正在使用conda作为你的Python包管理器,那么安装geopandas和它的依赖可能会更简单一些。 创建一个新的conda环境(可选,但推荐): bash conda create -n geoenv python=3.x anaconda conda activate geoenv 其中3.x是你希望使用的Python版本。 安装geopandas: 使用conda-forge频道来安装geopandas,因为它提供了许多地理空间相关的包。 bash conda install -c conda-forge geopandas 这条命令会自动安装geopandas及其所有依赖。 注意事项 如果你在安装过程中遇到任何问题,比如编译错误或依赖问题,请检查你的Python版本和pip/conda的版本是否是最新的,或者尝试在不同的环境中安装。 某些库(如GDAL)可能需要额外的系统级依赖,如地理空间库(如PROJ和GEOS)。这些依赖可能需要单独安装,具体取决于你的操作系统。 如果你在Windows上遇到问题,并且pip安装失败,尝试从Unofficial Windows Binaries for Python Extension Packages网站下载相应的wheel文件,并使用pip进行安装。 脚本示例 虽然你的问题主要是关于如何安装geopandas,但如果你想要一个Python脚本来重命名文件夹下的文件,在原始名字前面加上字符串"geopandas",以下是一个简单的示例: python import os # 指定文件夹路径 folder_path = 'path/to/your/folder' # 遍历文件夹中的文件 for filename in os.listdir(folder_path): # 构造原始文件路径 old_file_path = os.path.join(folder_path, filename) # 构造新文件名 new_filename = 'geopandas_' + filename # 构造新文件路径 new_file_path = os.path.join(folder_path, new_filename) # 重命名文件 os.rename(old_file_path, new_file_path) print(f'Renamed "{filename}" to "{new_filename}"') 请确保将'path/to/your/folder'替换为你想要重命名文件的实际文件夹路径。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值