android調(diào)用原生圖片裁剪后圖片尺寸縮放的解決方法
在安卓開(kāi)發(fā)中,如果對(duì)拍照后的圖片進(jìn)行圖片裁剪,如果是調(diào)用系統(tǒng)的裁剪,如下:
/* * 裁剪圖片 */ private void cropPhoto() { Intent intent = new Intent("com.android.camera.action.CROP"); Uri uri = Uri.parse("file://" + picSavePath); intent.setDataAndType(uri, "image/*"); intent.putExtra("crop", "true"); // intent.putExtra("aspectX", 3); // intent.putExtra("aspectY", 2); intent.putExtra("outputX", cropX); intent.putExtra("outputY", cropY); intent.putExtra("scale", "true"); intent.putExtra(MediaStore.EXTRA_OUTPUT, uri); intent.putExtra("return-data", "false"); intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString()); intent.putExtra("noFaceDetection", "true"); // no face detection startActivityForResult(intent, CROP_PICTURE); }
這樣,就開(kāi)始對(duì)圖片進(jìn)行裁剪了,但是這樣會(huì)有一個(gè)問(wèn)題,當(dāng)裁剪框選擇的圖片與錄入的cropX,xropY的形狀不同時(shí),比如傳入的參數(shù)值是個(gè)w>h的長(zhǎng)方形,而選擇框選擇的是w<h的長(zhǎng)方形時(shí),這樣會(huì)導(dǎo)致裁剪的圖片結(jié)果會(huì)被壓縮變形。
為了解決壓縮變形的問(wèn)題,我的思路是這樣的:
1,先對(duì)圖片進(jìn)行裁剪,不設(shè)置默認(rèn)的裁剪圖片尺寸。
2.對(duì)裁剪后的圖片再進(jìn)行圖片的縮放??s放是采角的矩陣的方式進(jìn)行的縮放
代碼如下:
1.
/* * 裁剪圖片, */ private void cropPhotoAndZoom() { Intent intent = new Intent("com.android.camera.action.CROP"); Uri uri = Uri.parse("file://" + picSavePath); intent.setDataAndType(uri, "image/*"); intent.putExtra("crop", "true"); intent.putExtra("scale", "true"); intent.putExtra(MediaStore.EXTRA_OUTPUT, uri); intent.putExtra("return-data", "false"); intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString()); intent.putExtra("noFaceDetection", "true"); // no face detection startActivityForResult(intent, CROP_PICTURE_ANDZOOM); }
2.
/** * 裁剪后,根據(jù)裁剪框的長(zhǎng)寬比,同時(shí)根據(jù)圖片的需求縮放尺寸進(jìn)行縮放 * * @param path * @param x * 原始的需求尺寸width * @param y * heiht * @return */ public static Bitmap toBigZoom(String path, float x, float y) { Log.e("bitmaputil", "path---" + path + "--x--y--" + x + "--" + y); Bitmap bitmap = BitmapFactory.decodeFile(path); if (bitmap != null) { int w = bitmap.getWidth(); int h = bitmap.getHeight(); float sx = 0; float sy = 0; if ((float) w / h >= 1) { sx = (float) y / w; sy = (float) x / h; Log.e("bitmaputil---", "w/h--->=1"); } else { sx = (float) x / w; sy = (float) y / h; Log.e("bitmaputil---", "w/h---<1"); } Matrix matrix = new Matrix(); matrix.postScale(sx, sy); // 長(zhǎng)和寬放大縮小的比例 Bitmap resizeBmp = Bitmap.createBitmap(bitmap, 0, 0, w, h, matrix, true); Log.e("bitmaputil---", "w---" + resizeBmp.getWidth() + "h--" + resizeBmp.getHeight()); return resizeBmp; } return null; }
2中代碼,通過(guò)判斷裁剪框的w,h比來(lái)設(shè)置圖片是放大是橫向放大,還是豎向放大,放大后的效果基本上能滿足需求。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Android調(diào)用系統(tǒng)圖片裁剪限定尺寸及7.0照相問(wèn)題的解決方法
- Android實(shí)現(xiàn)拍照及圖片裁剪(6.0以上權(quán)限處理及7.0以上文件管理)
- Android ImageView實(shí)現(xiàn)圖片裁剪和顯示功能
- Android 7.0中拍照和圖片裁剪適配的問(wèn)題詳解
- Android圖片裁剪功能實(shí)現(xiàn)代碼
- Android實(shí)現(xiàn)相機(jī)拍攝、選擇、圖片裁剪功能
- Android開(kāi)發(fā)從相機(jī)或相冊(cè)獲取圖片裁剪
- 使用Java代碼在Android中實(shí)現(xiàn)圖片裁剪功能
- android實(shí)現(xiàn)圖片裁剪的兩種方法
相關(guān)文章
Android TabLayout實(shí)現(xiàn)京東詳情效果
這篇文章主要為大家詳細(xì)介紹了android TabLayout實(shí)現(xiàn)京東詳情效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-09-09Android模糊處理實(shí)現(xiàn)圖片毛玻璃效果
這篇文章主要介紹了Android模糊處理實(shí)現(xiàn)圖片毛玻璃效果,需要的朋友可以參考下2016-02-02一文詳解Jetpack?Android新一代導(dǎo)航管理Navigation
這篇文章主要為大家介紹了Jetpack?Android新一代導(dǎo)航管理Navigation詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03Android開(kāi)發(fā)中Google為什么不讓用Handler的runWithScissors()
這篇文章主要介紹了Android開(kāi)發(fā)中Google為什么不讓用Handler的runWithScissors(),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-09-09Android自定義實(shí)現(xiàn)淘寶下拉刷新效果
這篇文章主要為大家詳細(xì)介紹了Android自定義實(shí)現(xiàn)淘寶下拉刷新效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-12-12Android 獲取內(nèi)外SD卡路徑幾種方法總結(jié)
這篇文章主要介紹了Android 獲得內(nèi)外SD卡路徑幾種方法總結(jié)的相關(guān)資料,需要的朋友可以參考下2016-12-12Android自定義view實(shí)現(xiàn)倒計(jì)時(shí)控件
這篇文章主要為大家詳細(xì)介紹了Android自定義view實(shí)現(xiàn)倒計(jì)時(shí)控件,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-10-10android基本控件ToggleButton&Switch使用指南
本文給大家匯總介紹了android的2個(gè)基本控件ToggleButton和Switch的使用方法,非常的詳細(xì),有需要的小伙伴可以參考下。2016-01-01