Android使用系统相机拍照和读取相册照片1.拍照(对于7.0以上的版本,不在允许直接访问uri)`若不指定输出路径intent.putExtra(MediaStore.EXTR
Android 使用系统相机拍照和读取相册照片
1.拍照 (对于7.0以上的版本,不在允许直接访问uri)
`
若不指定输出路径intent.putExtra(MediaStore.EXTRA_OUTPUT, getTempUri(srcActivity)); 在onActivityResult()中,通过
`
可以拿到uri,但获得的图片是被压缩过的。若指定intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);输出路径,则此处的intent为null,但可以使用我们存的uri读取照片,此时的照片没有被压缩。
2.从相册中读取照片, 方法:
`
`
即使设置 intent.putExtra(MediaStore.EXTRA_OUTPUT, getTempUri(srcActivity));输出路径,仍然不能从此路径中读取,只能在onActivityForResult()中通过event.uri = intent.getData();方式获得图片uri。
此种现象也好理解,拍照时产生新的图片,自然可根据设置的uri进行图片保存,而读取相册时,图片已经在目录中不能转移到自己设定的uri中。
Androidmanifest.xml中
`
在 res/xml/provider_paths.xml
`
?xml version="1.0" encoding="utf-8"?
paths
external-path name="JDTobs" path=""/
files-path name="name" path="path" /
cache-path name="name" path="path" / external-path name="name" path="path" /
external-files-path name="name" path="path" /
external-cache-path name="name" path="path" / /paths `
读取uri
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手机拍摄小技巧
很多人觉得Android手机的拍照功能不如苹果,但事实上,许多Android手机配备了高质量摄像头,只要掌握正确方法,用手机拍出完美的照片也是很简单的,下面就带来Android手机拍摄实用小技巧,一起来看看吧。
了解摄像头设置
在开始拍摄之前,先要熟悉手机和摄像头的设置,之后再拍摄就会得心应手了。如果我们能够了解不同的模式和设置,就可以深入探索和实验,让拍摄更具创造力。
确保镜头干净
看起来这一点很奇怪,在使用单反相机时,我们可能会记得擦拭单反镜头,但是很难记得要擦拭手机镜头。Android手机摄像头没有防尘防刮保护罩,专业相机有。
随身携带一小块清洁布,或者在钱包、夹克内缝一小块超细纤维镜头清洁布,时时提醒自己擦拭手机镜头和屏幕,如此一来就可以确保手机拍摄出最清晰的照片。如果嫌麻烦,可以直接用汗衫擦拭。不要忘了擦拭前置摄像头。
忘了闪光灯 用外部光源
如果外部环境黑暗,我们会下意识打开闪光灯拍摄照片,但是获得的图片质量总是不尽人意。事实上,我们完全可以不使用闪光灯,几乎从不使用。在拍摄照片时,我们可以寻找自然光源。如果你在餐馆内,想拍摄一张菜肴的照片,可以选择靠窗户的座位,如此一来就可以获得完美的光线,拍出菜肴的细节。
如果你想自拍,可以站在大窗户前拍摄。这样拍摄并不会让你的脸和特征“亮”起来,但是会让背景变暗,让你本人处在注意力的正中央。如果没有自然光,要拍摄照片是不可能的,因此在拍摄时最好找一个外部光源,比如一盏灯或者一支蜡烛。虽然看起来很愚蠢,但是几乎所有的其它光线都要比闪光灯好,有了更好的光线,就可以控制拍摄的内容,让我们想要的`部分亮起来。
不要变焦
和Android手机的闪光灯一样,我们应该避开变焦功能。变焦会降低图像的质量,当我们编辑照片时可能会发现一些惊艳的东西,之前没有发现,我们可以将这些漂亮的部分剪出来。
这一点我们很难记住,Android设备和单反相机是不一样的。用手机拍摄时如果我们使用了变焦功能,图像的质量很难保持一致。
如果你真的想亲近自己拍摄的对象,请站起来,走近它,不要使用变焦功能。用这种方法拍摄,可以很好控制拍摄的对象,如果用变焦功能就会降低照片的整体质量。
爆发性拍摄然后挑选
在拍摄照片时,爆发性拍摄的确是一种懒惰的拍摄方式,但是它极可能是拍摄完美照片的最有效方式。
不管是自拍、拍风景、或者是拍摄菜肴,使用爆发性拍摄方式可以毫无压力拍出一大堆照片,我们只需要按下快门,就可以用快速镜头拍出很多照片,拍完之后再选择哪些最完美的。
虽然拍摄的照片有许多很糟糕,完全无法使用,但是当中还是有隐藏了少数“宝石”。花点时间细细查看拍摄的照片,挑出最好的,删除糟糕的。
找一个自己喜欢的照片编辑软件
拍完照片之后,你可以选择自己喜欢的APP编辑软件编辑照片。现在市场上有许多的软件可供选择,每一款软件都有自己独特的功能,比如过滤器、调整亮度和对比度、甚至还可以增加文本信息和贴纸。
如果你对自己拍摄的照片信心不足,照片编辑软件也是一个很棒的补充工具。如果你对某些照片的质量有点担心,用编辑软件稍稍编辑可以“拯救”这些照片。
在社交媒体上关注你喜欢的摄影师
有时,用Android手机拍摄最好的照片并不是从相机APP开始的,而是从浏览社交媒体开始的,我们在社交媒体上看到摄影师用Android手机拍摄漂亮的照片,从中可以学到经验。
在社区媒体上关注一些摄影师,向他们取经,可以获得一些很好的经验,因此我们完全可以先看看别人拍摄的好照片,然后走出去尝试一下。你可以发表评论,问问他,看他是如何用特定风格拍摄特定对象的,或者问问他们是如何编辑特定照片、使之呈现特定风格的,拍摄者可能会回复。
你可以前往Instagram页面探索一下,欣赏欣赏其它Android手机摄影师拍摄的照片。最开始时你可以挑选喜欢的风格模仿拍摄,最终将它变成自己的。
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无效)