当前位置:首页 » 安卓系统 » android调用相机裁剪

android调用相机裁剪

发布时间: 2023-03-19 00:54:20

㈠ 使用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、剪切图片:

热点内容
sqltext类型长度 发布:2025-05-10 23:30:21 浏览:978
图形AI算法 发布:2025-05-10 23:30:19 浏览:182
java上传的文件在哪里 发布:2025-05-10 23:30:06 浏览:157
议长访问台湾 发布:2025-05-10 23:22:46 浏览:433
启动电机如何配置开关 发布:2025-05-10 23:21:21 浏览:959
三维数组存储 发布:2025-05-10 23:14:35 浏览:980
普通电脑架设成云服务器 发布:2025-05-10 23:13:56 浏览:807
为什么找回密码总是说验证码 发布:2025-05-10 23:04:07 浏览:183
森林落地窗解压的视频 发布:2025-05-10 23:03:22 浏览:630
华为路由器建服务器地址 发布:2025-05-10 23:03:04 浏览:179