android圖片裁剪上傳
❶ 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無效)
❸ Android 11 調用系統圖片裁剪後,圖片保存不了的解決方案
升級SDK30之後,一步一個坑。走不完的路,填不完的坑。
Android11存儲機制變更: https://developer.android.com/about/versions/11/privacy/storage?hl=zh-cn
調用系統相冊選取照片,然後裁剪,存儲裁剪之後的照片,顯示並上傳伺服器。多麼正常的操作流程,相信大家都已經用過或者正在用。SDK升級到30,在Android11 上就失靈了。What?都知道是存儲問題,怎麼解決。現在告訴你。
僅供參考。如有建議和意見,請及時溝通。🙏
❹ 手機上照片怎麼改尺寸大小
以蘋果11,iOS14.2系統為例,修改手機照片尺寸大小的具體步驟如下所示:1、首先打開手機,在手機桌面上找到相冊圖標並點擊進入;
2、點擊選中需要修改的照片,再點擊圖片右上角的編輯按鈕;
3、選擇裁剪選項,進入裁剪功能界面,點擊右下角的白色方形圖標,在彈出的選項欄中根據自身的需求來選擇比例大小;
4、設置完畢後,點擊保存即可。
查看手機照片信息的具體方法:
1、首先打開手機相冊,點擊更多選項;
2、在彈出來的窗口選擇詳細信息,就能看到手機照片的尺寸比例以及更改時間。
安卓手機和蘋果手機都能通過裁剪照片來更改照片的尺寸大小,但需要注意的是安卓手機可以直接在手機相冊查看照片的具體尺寸和其他詳細信息,但是蘋果手機並不支持在手機相冊里查看照片信息。該答案適用於蘋果、華為、小米、OPPO等大部分品牌的手機型號。
❺ 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,圖片剪裁,搞了一天還是不行,求大神指導啊
如果還沒解決就將文件發上來吧,我調試試試給你答復
❼ 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、剪切圖片:
❽ 做了一個Android的demo實現頭像裁剪上傳,但是拍照完成後出現如下圖問題,圖庫也一樣大神們幫忙看看
實現思維路徑:
以進入相機拍照的思維路線為例子:
1.進入app
2.判斷之前是否保存頭像,如果有就顯示歷史圖像 (下面代碼中在getOldAvatar();方法中執行這個邏輯)
3.點擊更換圖像的Button或者布局,啟動對話框(下面代碼中在dialogueBox();方法執行這個邏輯)
4.系統版本判斷授權方式(靜態還是動態授權),判斷之前是否已經授權 (setPermissions(Permissions_CAMERA_KEY);這個方法執行授權邏輯)
5.如果是首次授權,就執行首次授權完成後馬上運行的回調方法 onRequestPermissionsResult
5.判斷完成不管是否是首次授權還是之前就是授權過了都要執行enterCamera();方法啟動相機並且發送攜帶數據的請求
6.啟動相機完成後,並且拍照完成退出相機,都要運行Intent返回數據請求回調方法onActivityResult。將傳入的數據傳入到cropPhoto(data.getData());方法里去執行圖片剪裁。
7.在cropPhoto方法里將攜帶數據跳轉到裁剪界面中裁剪圖片,裁剪完成後又要回到onActivityResult回調方法里,執行裁剪完的數據回調工作。
8.在onActivityResult回調方法里,裁剪完的圖片將運行setPicToView 方法保存圖片。保存的圖片將在下次啟動activity時作為歷史頭像調用。
package com.example.lenovo.mydemoapp;
import android.app.Activity;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Build;
import android.os.Environment;
import android.os.StrictMode;
import android.provider.MediaStore;
import android.support.annotation.NonNull;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
❾ 怎麼把照片做成視頻發到抖音上面去,安卓手機
1、首先手機下載安裝好一款名為「樂秀視頻編輯器」的軟體
/iknow-pic.cdn.bcebos.com/203fb80e7bec54e78d5198f3b7389b504ec26a9a"target="_blank"title="點擊查看大圖"class="illustration_alink">/iknow-pic.cdn.bcebos.com/203fb80e7bec54e78d5198f3b7389b504ec26a9a?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_600%2Ch_800%2Climit_1%2Fquality%2Cq_85%2Fformat%2Cf_auto"esrc="//www.ultimate-communications.com/img_203fb80e7bec54e78d5198f3b7389b504ec26a9a"/>
2、打開進入編輯器界面,點擊中間的視頻編輯
/iknow-pic.cdn.bcebos.com/3801213fb80e7becee5e810c212eb9389a506b53"target="_blank"title="點擊查看大圖"class="illustration_alink">/iknow-pic.cdn.bcebos.com/3801213fb80e7becee5e810c212eb9389a506b53?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_600%2Ch_800%2Climit_1%2Fquality%2Cq_85%2Fformat%2Cf_auto"esrc="//www.ultimate-communications.com/img_3801213fb80e7becee5e810c212eb9389a506b53"/>
3、進入到選擇片段,選擇圖片
/iknow-pic.cdn.bcebos.com/f9dcd100baa1cd117202f0cdb712c8fcc2ce2da2"target="_blank"title="點擊查看大圖"class="illustration_alink">/iknow-pic.cdn.bcebos.com/f9dcd100baa1cd117202f0cdb712c8fcc2ce2da2?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_600%2Ch_800%2Climit_1%2Fquality%2Cq_85%2Fformat%2Cf_auto"esrc="//www.ultimate-communications.com/img_f9dcd100baa1cd117202f0cdb712c8fcc2ce2da2"/>
4、添加手機裡面的圖片,再點擊開始製作
/iknow-pic.cdn.bcebos.com/bd3eb13533fa828b4d971f0ef31f4134960a5aa3"target="_blank"title="點擊查看大圖"class="illustration_alink">/iknow-pic.cdn.bcebos.com/bd3eb13533fa828b4d971f0ef31f4134960a5aa3?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_600%2Ch_800%2Climit_1%2Fquality%2Cq_85%2Fformat%2Cf_auto"esrc="//www.ultimate-communications.com/img_bd3eb13533fa828b4d971f0ef31f4134960a5aa3"/>
5、然後選擇功能選項裡面的聲音,選擇配樂。
/iknow-pic.cdn.bcebos.com/c75c10385343fbf22cdc24cebe7eca8064388f6f"target="_blank"title="點擊查看大圖"class="illustration_alink">/iknow-pic.cdn.bcebos.com/c75c10385343fbf22cdc24cebe7eca8064388f6f?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_600%2Ch_800%2Climit_1%2Fquality%2Cq_85%2Fformat%2Cf_auto"esrc="//www.ultimate-communications.com/img_c75c10385343fbf22cdc24cebe7eca8064388f6f"/>
6、在我的音樂里選擇一首自己喜歡的音樂作為背景音樂
/iknow-pic.cdn.bcebos.com/fcfaaf51f3deb48f40082c33fe1f3a292cf578fe"target="_blank"title="點擊查看大圖"class="illustration_alink">/iknow-pic.cdn.bcebos.com/fcfaaf51f3deb48f40082c33fe1f3a292cf578fe?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_600%2Ch_800%2Climit_1%2Fquality%2Cq_85%2Fformat%2Cf_auto"esrc="//www.ultimate-communications.com/img_fcfaaf51f3deb48f40082c33fe1f3a292cf578fe"/>
7、最後點擊右上角的導出視頻,再上傳到抖音上面發布即可
/iknow-pic.cdn.bcebos.com/2e2eb9389b504fc215b032e8ebdde71191ef6d74"target="_blank"title="點擊查看大圖"class="illustration_alink">/iknow-pic.cdn.bcebos.com/2e2eb9389b504fc215b032e8ebdde71191ef6d74?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_600%2Ch_800%2Climit_1%2Fquality%2Cq_85%2Fformat%2Cf_auto"esrc="//www.ultimate-communications.com/img_2e2eb9389b504fc215b032e8ebdde71191ef6d74"/>
❿ 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);
}
}
}