当前位置:首页 » 安卓系统 » androidexif

androidexif

发布时间: 2023-01-03 14:46:19

⑴ 请问:Android中怎么获取到图片属性上的地点信息,地点信息对应exif中key是什么

地点的TAG就是经纬度信息

TAG_GPS_LATITUDE 纬度
TAG_GPS_LATITUDE_REF 纬度参考
TAG_GPS_LONGITUDE 经度
TAG_GPS_LONGITUDE_REF 经度参考

找个经纬度转换工具转成地址就好了(虽然没试过,但Android自带的geocoder恐怕是不行的,需要google的网络服务,而google的网络服务在大陆嘛……你懂的)

⑵ 如何解决Android三星手机从图库选择照片旋转问题

最近解决了一个令我头疼好久的问题,就是三星手机拍照图片旋转的问题,项目中有上传图片的功能,那么涉及到拍照,从相册中选择图片,别的'手机都ok没有问题,唯独三星的手机拍照之后,你会很清楚的看到会把照片旋转一下,然后你根据路径找到的图片就是已经被旋转的了,解决办法终于被我找到了。我们可以根据图片的路径读取照片exif(Exchangeable Image File 可交换图像文件)信息中的旋转角度,至于这个EXIF可以看一下大牛的文章

Android 下的EXIF

根据调试,可以清楚的发现三星手机拍照的图片的旋转角度是90度,而别的手机旋转角度是0度

看一下代码:

/** * 读取照片exif信息中的旋转角度 * @param path 照片路径 * @return角度 */ public static int readPictureDegree(String path) { int degree = 0; try { ExifInterface exifInterface = new ExifInterface(path); int orientation = exifInterface.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL); switch (orientation) { case ExifInterface.ORIENTATION_ROTATE_90: degree = 90; break; case ExifInterface.ORIENTATION_ROTATE_180: degree = 180; break; case ExifInterface.ORIENTATION_ROTATE_270: degree = 270; break; } } catch (IOException e) { e.printStackTrace(); } return degree; }

那么我们只需要根据旋转角度将图片旋转过来就OK了

public static Bitmap toturn(Bitmap img){ Matrix matrix = new Matrix(); matrix.postRotate(+90); /*翻转90度*/ int width = img.getWidth(); int height =img.getHeight(); img = Bitmap.createBitmap(img, 0, 0, width, height, matrix, true); return img; }

轻松解决了,是不是很完美?

以上就是本文的全部内容,希望大家喜欢。

⑶ Android开发 camera拍照无法获取Exit信息

private void data2file(byte[] w, String fileName) throws Exception {
FileOutputStream out = null;
try {

out = new FileOutputStream(fileName);
Bitmap bitmap = BitmapFactory.decodeByteArray(w, 0, w.length);
Matrix matrix=new Matrix();
matrix.postScale(1f, 1f);

//旋转图片
int deg = this.getWindowManager().getDefaultDisplay().getRotation();
if (deg == Surface.ROTATION_270) {
degree = 180;
matrix.postRotate(degree);
}

Bitmap dstbmp=Bitmap.createBitmap(bitmap,0,0,bitmap.getWidth(),
bitmap.getHeight(),matrix,true);

dstbmp.compress(CompressFormat.JPEG, 100, out);
//out.write(w);
out.flush();
out.close();
dstbmp.recycle();
bitmap.recycle();

} catch (Exception e) {
if (out != null)
out.close();
throw e;
}
}

生成图片地址后可以做这样处理,先旋转到合适的角度,再保存。

⑷ 如何附加EXIF元数据在Android的序列化的Bitmap

例如:public static void main(String[] args) throws IOException{ List<Date> list=new ArrayList<Date>(); Date now=new Date(); list.add(now); list.add(new Date(now.getTime()+8888888)); ByteArrayOutputStream byteStream=new ByteArrayOutputStream(); ObjectOutput output=new ObjectOutputStream(byteStream); output.writeObject(list); byte b[]=byteStream.toByteArray(); BASE64Encoder base64Encoder=new BASE64Encoder(); String cookieString=base64Encoder.encode(b); System.out.println("经过BASE64编码的Cookie:\n"+cookieString); System.out.println("\n开始解码"); BASE64Decoder base64Decoder=new BASE64Decoder(); byte buf[]=base64Decoder.decodeBuffer(cookieString); ByteArrayInputStream byteArrayInputStream=new ByteArrayInputStream(buf); ObjectInput input=new ObjectInputStream(byteArrayInputStream); List<Date> afterList=(List<Date>) input.readObject(); for (Date date : afterList) { System.out.println(date); } }
补充:Android是一种基于Linux的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由Google公司和开放手机联盟领导及开发。尚未有统一中文名称,中国大陆地区较多人使用“安卓”或“安致”。

⑸ 如何附加EXIF元数据在Android的序列化的Bitmap

ByteArrayOutputStream bos = new ByteArrayOutputStream();
bitmap.compress(CompressFormat.JPEG, 100, bos); //Bitmap object is your image
byte[] data = bos.toByteArray();

TiffOutputSet outputSet = null;

IImageMetadata metadata = Sanselan.getMetadata(new File(filepath)); // filepath is the path to your image file stored in SD card (which contains exif info)
JpegImageMetadata jpegMetadata = (JpegImageMetadata) metadata;
if (null != jpegMetadata)
{
TiffImageMetadata exif = jpegMetadata.getExif();
if (null != exif)
{
outputSet = exif.getOutputSet();
}
}
if (null != outputSet)
{
bos.flush();
bos.close();
bos = new ByteArrayOutputStream();
ExifRewriter ER = new ExifRewriter();
ER.updateExifMetadataLossless(data, bos, outputSet);
data = bos.toByteArray(); //Update you Byte array, Now it contains exif information!
}

⑹ Android 开发中从相册读取的照片有时侯的方向不对,本来是竖屏的照片变成横屏了怎么办

可以读取相片的方向值,然后旋转
读取方向值请参照下面的代码:
ExifInterface exifInterface = new ExifInterface(bitmapUrl);
int tag = exifInterface.getAttributeInt(ExifInterface.TAG_ORIENTATION, -1);
然后旋转:
int degree = 0;
if (orc == ExifInterface.ORIENTATION_ROTATE_90) {
degree = 90;
} else if (orc == ExifInterface.ORIENTATION_ROTATE_180) {
degree = 180;
} else if (orc == ExifInterface.ORIENTATION_ROTATE_270) {
degree = 270;
}
if (degrees != 0 && bitmap != null) {
Matrix m = new Matrix();
m.setRotate(degrees, (float) bitmap.getWidth() / 2, (float) bitmap.getHeight() / 2);
}

⑺ Android 系统原生相机API角度原理与适配

虽然Camera作为第一代原生android所提供的相机类一直被开发者甚至Google官方开发人员所诟病,但为了兼容和适配Android版本5.0以下的App应用,我们别无选择。因此,有了本篇文档详细阐述1.0版的Camera 是如何使用的。本篇使用的是SurfaceView与Camera类。

文档下文会在拍照流程中的不同的阶段应用到上述四个角度,而“终端自然方向”贯穿整个流程当中。这一个方向、四个角度非常重要,缺一不可,是支撑相机Camera 系列API的关键。在设计NXDesign的相机项目中,经过对官方文档的研读和各路资料的调研之后发现,我们在网络上查到的博客类相关资料有80%的实现方式是存在问题的,当然,这也可以归咎于该API其本身确实不好用,如果不对源码注释进行仔细研究,很容易对开发者产生误导。

更加准确的说,相机的生命周期是依托于SurfaceView的创建和销毁来完成的。SurfaceView的作用是提供相机内容的实时预览。我们需要在surfaceview创建好之后打开相机使用相机资源,在surfaceview被销毁后释放相机资源。

surfaceview 提供了holder机制向调用方通知surfaceview的变化时机,为了在不同的时机对相机资源做不同的事情,需要调用SurfaceHolder.addCallback()方法。

现在的Android手机一般会有多个摄像头,但根据其方向可以归为两类: CAMERA_FACING_BACK 和 CAMERA_FACING_FRONT 。在打开摄像头之前,首先需要获取相机资源,判断相机个数 Camera.getNumberOfCameras() 。每个相机对应一个CameraInfo,它的定义如下:

这里涉及到一个重要概念:相机图像传感器(camera sensor),想要理解上述注释的含义,就需要先理解下图内容。

左图是通常情况下,我们对view的x y方向的认知,以屏幕的左上角为原点向右为x正方向,向下为y正方向;但是,右图描述的是绝大多数情况下, 相机图像传感器 的起始位置和方向判定。与view不同的是,传感器以手机屏幕在自然方向上的右上角为原点,向下为x正方向,向左为y正方向。因此,我们理解上述注释就不难了。如果相机自带的传感器顶部与终端自然方向(手机屏幕的硬件方向,一般手机都是竖直方向,也就是文档中说的naturally tall screen)的右边缘一致,则这个值就是90度。如果前置摄像头传感器的顶部与手机自然方向一致,则这个值就是270度。

当我们定义startCamera()方法时,要做5件事情,1.遍历摄像头cameraId,找到想要打开的摄像头(前置还是后置);2.获取摄像头信息,主要获取orientation;3. 设置相机DisplayOrientation 4.设置相机参数,主要是宽高比、对焦模式、图片格式、setRotation等。5. 向camera设置surfaceview.viewholder,并且startPreview。主要逻辑如下:

拿到cameraInfo.orientation之后,要调用camera.setDisplayOrientation设置进去,保证通过surfaceview预览到的取景跟当前的手机方向保持一致,但是,setDisplayOrientation设置的其实是经过两个角度计算之后的复合角度,而并不单纯是cameraInfo.orientation。正确的做法是这样的:先获取手机屏幕的旋转方向,然后与cameraInfo.orientation加和得到最终角度。通常情况下,如果我们设置相机为portrait,则不用考虑rotation。这也是为什么绝大部分网络资料中都会粗暴的写入一个90度完事儿而并没有解释这么做的道理。

调用camera.takePicture(null, null, pictureCallback)

这里需要做的仅仅是将callback中返回的data存储为File。需要注意的是,data中会包含setRotation()方法中的角度信息,因此如果直接使用Bitmap工具类生成bitmap,再进行存储或者展示,生成出来的图像其实是缺失了旋转角度的原始方向,这十有八九会发生图像展示角度错误的情况。因此,需要直接保存,再通过Exif工具类读取File中的角度信息(当然Exif工具类就是为了读取File中的各种信息而生的,比如拍照时间、经纬度等等)。

基于Camera API,
surfaceview的预览需要setDisplayOrientation(),入参角度与CameraInfo.orientation(传感器偏角)和WindowManager.default.displayOrientation(屏幕旋转角度)两个角度有关。
相机拍照前需要setRotation(),入参角度与CameraInfo.orientation(传感器偏角)和OrientationEventListener返回的orientation(终端自然角度偏角)有关,二者的换算结果就是图像写入偏角,该偏角意味着图像被顺时针旋转该角度就能够回正展示。

⑻ 手机上怎么查看图片的exif信息,尤其是图片GPS信息。。(安卓手机

开了定位的才有gps
没GPS功能的就没那个信息

⑼ 智能手机(IOS,Android)通过浏览器上传图片 丢失exif等图片信息

你说的那种上传是要经过压缩处理这一过程的!所以exif信息会被抹掉以节省数据量!
你的意思是不是想恢复exif? 我可以用编程算法给你恢复出来!图传我

⑽ android开发,各位大神能帮我看看这个空指针异常是怎么回事么

153行有个对象是null的。

热点内容
sql中去重 发布:2025-05-16 04:55:06 浏览:892
dwr上传图片 发布:2025-05-16 04:49:46 浏览:121
base64加密的图片 发布:2025-05-16 04:35:46 浏览:355
数据结构c语言版清华大学出版社 发布:2025-05-16 04:30:44 浏览:273
c语言取小数点 发布:2025-05-16 04:22:26 浏览:379
公司权力配置有哪些问题 发布:2025-05-16 04:21:43 浏览:924
tcl电视怎样删了缓存 发布:2025-05-16 04:16:56 浏览:211
收费数据库 发布:2025-05-16 04:06:43 浏览:347
编译程序时跳转到另一个文件 发布:2025-05-16 04:03:42 浏览:250
清除exe用户名密码缓存 发布:2025-05-16 04:02:04 浏览:608