android調用相機裁剪
㈠ 使用Android系統自帶裁剪功能,小圖可能出現黑框的解決辦法
項目中或多或少的使用到照片裁剪,比如設置頭像之類的,正常情況下我們會使用一下方式調用系統的裁剪功能,簡單又方便。
黑框出現的情況
在我們裁剪的圖片比需求的圖片的要小一些時,就會出現黑框,出現這個情況,估計是系統在判斷圖片在沒有滿足大小時,會自動在四周繪制黑框填充。
解決辦法
在上面的方法中添加一下兩個參數,告訴系統把圖片拉伸到相應大小。
原文地址: https://www.jianshu.com/p/3559fe144e67
㈡ Android調用系統的圖片剪裁,剪裁框大小能設置嗎outputX和outputY不是
剪裁框大小可以設置,也可以手動拖動,outputX和outputY是用來指定輸出的圖片X Y軸的大小。
1.創建一個uri指向圖片路徑
Uri imageUri = Uri.parse(file:///sdcard/temp.jpg);
2.裁剪框設置代碼:
java">Intentintent=newIntent(Intent.ACTION_GET_CONTENT,null);
intent.setType("image/*");
intent.putExtra("crop","true");
//裁剪框比例
intent.putExtra("aspectX",2);
intent.putExtra("aspectY",1);
//圖片輸出大小
intent.putExtra("outputX",600);
intent.putExtra("outputY",300);
intent.putExtra("scale",true);
intent.putExtra("return-data",false);
intent.putExtra(MediaStore.EXTRA_OUTPUT,uri);
intent.putExtra("outputFormat",Bitmap.CompressFormat.JPEG.toString());
//不啟用人臉識別
intent.putExtra("noFaceDetection",false);
startActivityForResult(openAlbumIntent,PHOTO_ALBUM_REQUEST);
3.啟動裁剪即可
Intent takePhotoIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
takePhotoIntent .putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
startActivityForResult(takePhotoIntent , CAMERA_REQUEST);
㈢ Android調用相機相冊選圖時怎麼跳過裁剪
Intent intent = new Intent(Intent.ACTION_PICK,
android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(intent, PICK);
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == RESULT_OK) {
switch (requestCode) {
case PICK:
String picPath = null;
String[] pojo = { MediaStore.Images.Media.DATA };
Cursor cursor = managedQuery(data.getData(), pojo, null, null,
null);
if (cursor != null) {
int columnIndex = cursor.getColumnIndexOrThrow(pojo[0]);
cursor.moveToFirst();
picPath = cursor.getString(columnIndex);
try {
if (Integer.parseInt(Build.VERSION.SDK) < 14) {
cursor.close();
}
} catch (Exception e) {
Log.e("", "error:" + e);
}
}
Log.i("", "imagePath = " + picPath);
㈣ android 怎麼裁剪drawable
可使用ScaleType來指定drawable的縮放方式,來實現裁剪效果。
ImageView的Scaletype決定了圖片在View上顯示時的樣子,如進行何種比例的縮放,及顯示圖片的整體還是部分,等等。
設置的方式包括:
1. 在layout xml中定義android:scaleType="CENTER"
2. 或在代碼中調用imageView.setScaleType(ImageView.ScaleType.CENTER);
Scaletype的取值說明:
1. SetScaleType(ImageView.ScaleType.CENTER);
按圖片的原來size居中顯示,當圖片長/寬超過View的長/寬,則截取圖片的居中部分顯示
2. SetScaleType(ImageView.ScaleType.CENTER_CROP);
按比例擴大圖片的size居中顯示,使得圖片長(寬)等於或大於View的長(寬)
3. setScaleType(ImageView.ScaleType.CENTER_INSIDE);
將圖片的內容完整居中顯示,通過按比例縮小或原來的size使得圖片長/寬等於或小於View的長/寬
4. setScaleType(ImageView.ScaleType.FIT_CENTER);
把圖片按比例擴大/縮小到View的寬度,居中顯示
5. FIT_START, FIT_END在圖片縮放效果上與FIT_CENTER一樣,只是顯示的位置不同,FIT_START是置於頂部,FIT_CENTER居中,FIT_END置於底部。
在此就不給出示例了。
6. FIT_XY
不按比例縮放圖片,目標是把圖片塞滿整個View。
㈤ Android 圖片選擇(ImageSelector) (拍照,裁剪,壓縮,查看)
1.遍歷sdcard文件夾(指定層次深度 searchDeep ),如果文件夾發現圖片 , 添加到已搜索到圖片的文件列表中,並跳入下一個文件夾搜索
2.使用 ContentResolver 搜索 添加搜索標簽(png,jpg,jpeg,gif 等) 優點:更快速
壓縮調用
第一步-->
采樣率壓縮:設置 BitmapFactory.Options.inSampleSize 大小
第二步-->
PNG:尺寸壓縮( Config:ARGB_4444 ,工具: Canvas );
JPG:尺寸壓縮( Config:ARGB_565 ,工具: Canvas )+壓縮質量( bitmap.compress() )
注 :
1.GIF不做壓縮處理
2.尺寸壓縮:改變寬高(png,jpg)
3.壓縮質量:改變文件大小(適用jpg,png無效)
㈥ 怎麼用安卓手機剪輯手機里視頻
在現在這個移動互聯網時代嗎,視頻逐漸成為我們記錄生活的一種主流趨勢。因為視頻相比文字和圖片更加的生動,更加的能表達拍攝者所要向觀眾傳遞的一種情感和價值觀。
一些剛入門拍攝視頻的新手,可能對視頻剪輯不是很了解,今天小編所說的便是教大家如何在手機上剪輯視頻。如何讓自己拍攝的視頻變得更加炫酷。
(1)首先我們需要在手機自帶的應用市場中找到「清爽視頻編輯」這么一款軟體。然後打開點擊主界面中的「視頻編輯」選項,然後選擇自己需要剪輯的視頻,點擊「下一步」。
(2)在進入到視頻編輯的主界面後,我們可以發現在界面底部的下方有「聲音」、「片段編輯」、「高級編輯」、「設置」四個選項。聲音界面主要是針對視頻的聲音做處理,主要有「音量」、「配樂」、「音效」、「多段配樂」、「配音」和「變聲」6個功能。
(3)片段編輯則是側重於剪輯方面,我們可以給視頻添加濾鏡,或者裁減和分割視頻,又或者是復制,給視頻調色、變速、添加特效等等。
(4)高級編輯則是針對一些比較炫酷的玩法,比如說「文字」、「畫中畫」、「馬賽克」、「貼紙」、「轉場特效」等等。設置界面則主要是調整視頻的「比例」、「圖片運動」、「背景」和「封面」等等。
(5)點擊右上角的「發布」,我們就可以將剪輯好的視頻保存在本地。如果你嫌棄視頻剪輯麻煩的話,在主界面的下方有許多的視頻模板,利用它我們可以將自己拍攝下來的照片直接套用成抖音熱門的視頻。
好了,以上便是小編今天所分享的手機剪輯方法,你們學會了嗎?整體還是非常簡單的,不是嗎?
㈦ Android 11 調用系統圖片裁剪後,圖片保存不了的解決方案
升級SDK30之後,一步一個坑。走不完的路,填不完的坑。
Android11存儲機制變更: https://developer.android.com/about/versions/11/privacy/storage?hl=zh-cn
調用系統相冊選取照片,然後裁剪,存儲裁剪之後的照片,顯示並上傳伺服器。多麼正常的操作流程,相信大家都已經用過或者正在用。SDK升級到30,在Android11 上就失靈了。What?都知道是存儲問題,怎麼解決。現在告訴你。
僅供參考。如有建議和意見,請及時溝通。🙏
㈧ android拍照圖片裁剪的問題
因為沒許可權就讀取不了內部存儲的文件啊
㈨ android 怎麼裁剪drawable
圖片裁剪
package com.xiaoma.piccut.demo;
import java.io.File;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.ImageView;
/**
* @Title: PicCutDemoActivity.java
* @Package com.xiaoma.piccut.demo
* @Description: 圖片裁剪功能測試
* @author XiaoMa
*/
public class PicCutDemoActivity extends Activity implements OnClickListener {
private ImageButton ib = null;
private ImageView iv = null;
private Button btn = null;
private String tp = null;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//初始化
init();
}
/**
* 初始化方法實現
*/
private void init() {
ib = (ImageButton) findViewById(R.id.imageButton1);
iv = (ImageView) findViewById(R.id.imageView1);
btn = (Button) findViewById(R.id.button1);
ib.setOnClickListener(this);
iv.setOnClickListener(this);
btn.setOnClickListener(this);
}
/**
* 控制項點擊事件實現
*
* 因為有朋友問不同控制項的背景圖裁剪怎麼實現,
* 我就在這個地方用了三個控制項,只為了自己記錄學習
* 大家覺得沒用的可以跳過啦
*/
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.imageButton1:
ShowPickDialog();
break;
case R.id.imageView1:
ShowPickDialog();
break;
case R.id.button1:
ShowPickDialog();
break;
default:
break;
}
}
/**
* 選擇提示對話框
*/
private void ShowPickDialog() {
new AlertDialog.Builder(this)
.setTitle("設置頭像...")
.setNegativeButton("相冊", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
/**
* 剛開始,我自己也不知道ACTION_PICK是幹嘛的,後來直接看Intent源碼,
* 可以發現裡面很多東西,Intent是個很強大的東西,大家一定仔細閱讀下
*/
Intent intent = new Intent(Intent.ACTION_PICK, null);
/**
* 下面這句話,與其它方式寫是一樣的效果,如果:
* intent.setData(MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
* intent.setType(""image/*");設置數據類型
* 如果朋友們要限制上傳到伺服器的圖片類型時可以直接寫如:"image/jpeg 、 image/png等的類型"
* 這個地方小馬有個疑問,希望高手解答下:就是這個數據URI與類型為什麼要分兩種形式來寫呀?有什麼區別?
*/
intent.setDataAndType(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
"image/*");
startActivityForResult(intent, 1);
}
})
.setPositiveButton("拍照", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
dialog.dismiss();
/**
* 下面這句還是老樣子,調用快速拍照功能,至於為什麼叫快速拍照,大家可以參考如下官方
* 文檔,you_sdk_path/docs/guide/topics/media/camera.html
* 我剛看的時候因為太長就認真看,其實是錯的,這個裡面有用的太多了,所以大家不要認為
* 官方文檔太長了就不看了,其實是錯的,這個地方小馬也錯了,必須改正
*/
Intent intent = new Intent(
MediaStore.ACTION_IMAGE_CAPTURE);
//下面這句指定調用相機拍照後的照片存儲的路徑
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri
.fromFile(new File(Environment
.getExternalStorageDirectory(),
"xiaoma.jpg")));
startActivityForResult(intent, 2);
}
}).show();
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
// 如果是直接從相冊獲取
case 1:
startPhotoZoom(data.getData());
break;
// 如果是調用相機拍照時
case 2:
File temp = new File(Environment.getExternalStorageDirectory()
+ "/xiaoma.jpg");
startPhotoZoom(Uri.fromFile(temp));
break;
// 取得裁剪後的圖片
case 3:
/**
* 非空判斷大家一定要驗證,如果不驗證的話,
* 在剪裁之後如果發現不滿意,要重新裁剪,丟棄
* 當前功能時,會報NullException,小馬只
* 在這個地方加下,大家可以根據不同情況在合適的
* 地方做判斷處理類似情況
*
*/
if(data != null){
setPicToView(data);
}
break;
default:
break;
}
super.onActivityResult(requestCode, resultCode, data);
}
/**
* 裁剪圖片方法實現
* @param uri
*/
public void startPhotoZoom(Uri uri) {
/*
* 至於下面這個Intent的ACTION是怎麼知道的,大家可以看下自己路徑下的如下網頁
* yourself_sdk_path/docs/reference/android/content/Intent.html
* 直接在裡面Ctrl+F搜:CROP ,之前小馬沒仔細看過,其實安卓系統早已經有自帶圖片裁剪功能,
* 是直接調本地庫的,小馬不懂C C++ 這個不做詳細了解去了,有輪子就用輪子,不再研究輪子是怎麼
* 製做的了...吼吼
*/
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(uri, "image/*");
//下面這個crop=true是設置在開啟的Intent中設置顯示的VIEW可裁剪
intent.putExtra("crop", "true");
// aspectX aspectY 是寬高的比例
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
// outputX outputY 是裁剪圖片寬高
intent.putExtra("outputX", 150);
intent.putExtra("outputY", 150);
intent.putExtra("return-data", true);
startActivityForResult(intent, 3);
}
/**
* 保存裁剪之後的圖片數據
* @param picdata
*/
private void setPicToView(Intent picdata) {
Bundle extras = picdata.getExtras();
if (extras != null) {
Bitmap photo = extras.getParcelable("data");
Drawable drawable = new BitmapDrawable(photo);
/**
* 下面注釋的方法是將裁剪之後的圖片以Base64Coder的字元方式上
* 傳到伺服器,QQ頭像上傳採用的方法跟這個類似
*/
/*ByteArrayOutputStream stream = new ByteArrayOutputStream();
photo.compress(Bitmap.CompressFormat.JPEG, 60, stream);
byte[] b = stream.toByteArray();
// 將圖片流以字元串形式存儲下來
tp = new String(Base64Coder.encodeLines(b));
這個地方大家可以寫下給伺服器上傳圖片的實現,直接把tp直接上傳就可以了,
伺服器處理的方法是伺服器那邊的事了,吼吼
如果下載到的伺服器的數據還是以Base64Coder的形式的話,可以用以下方式轉換
為我們可以用的圖片類型就OK啦...吼吼
Bitmap dBitmap = BitmapFactory.decodeFile(tp);
Drawable drawable = new BitmapDrawable(dBitmap);
*/
ib.setBackgroundDrawable(drawable);
iv.setBackgroundDrawable(drawable);
}
}
}
㈩ Android拍照、從圖庫導入以及圖片裁剪
以前在實際項目中使用拍照和從圖庫中獲取圖片時,不知道以何種方式從回調中取得圖片資源,以Bitmap方式還是Uri的形式?如果是使用Bitmap,應該注意些什麼,Uri又是一種什麼樣的格式?有時會出現拍照時回調data數據為空的情況,又該如何定位問題呢?圖片裁剪又是怎樣決定方案的?以下將針對這幾個問題闡述自己的見解。
在Android中,Intent觸發 Camera程序,拍好照片後會返回數據,比如攝像頭800萬像素,拍出來的圖片尺寸為 3200x2400,占據內存大小=3200 x 2400 x 4bytes / (1024 x 1024) = 30MB 【圖像設置ARGB_8888一個像素點占據4位元組內存】,這個尺寸對應的 Bitmap會耗光應用程序的內存,出於安全方面的考慮,Android會給你一個縮略圖,比如 160 x 120 px。
Q:為何要返回圖縮略?
縮略圖是指從onActivityForResullt回調方法中 intent保存的參數圖片。這是因為在啟動相機程序拍攝圖片,為了讓Bitmap數據能在Activity之間傳遞,不得不將拍攝後的Bitmap進行壓縮再傳遞,因此通過回調從intent中取得的是縮略圖在於拍攝的Bitmap太大,Activity之間Bundle存放的數據不能太大,會導致程序無響應。高清原圖是指直接將拍攝的圖片以文件/Uri形式保存到手機。
註:Bitmap實現了Parcelable 介面,所有可以在Activity間使用Intent傳遞。
Q:使用Bitmap需要注意哪些問題?
1、Android 裁剪圖片 Intent 附加數據的含義
| setExtra | DataType | Desciption | Extra |
|:-------- |:--------:| :------: |
|crop| String | Signals the crop feature | value="true" |
|aspectX|int|Aspect Ratio|裁剪橫向比例|
|aspectY|int|Aspect Ratio|裁剪縱向比例|
|outputX|int|width od output created from this intent|輸出寬度|
|outputY|int|height od output created from this intent|輸出高度|
|scale|boolean|should it scale|是否伸縮|
|return-date|boolean|Return the bitmap with Action-inline-data by using the data|是否返回Bitmap數據|
|data|Parcelable|Bitmap to process, you may provide it a bitmap (not tested)|可設置data為Bitmap或者將相應數據同uri聯系起來|
|circleCrop|String|if this string is not null, it will provide some cicular cr||
|MediaStore.
EXTRA_OUTPUT("output")|URI|set this URI to a File|輸出路徑到uri中|
2、圖片裁剪終極方案 — 圖片來源有拍照和圖庫,可採取的操作有:
3、剪切圖片: