相关疑难解决方法(0)

Android图像调整大小和保留EXIF数据(方向,旋转等)

如果您的Android应用使用设备的相机拍照,然后调整它的大小(这是很常见的,以减少上传大小),你可能没有意识到,这个调整操作的EXIF元数据.

这可能会导致问题,尤其是当相关设备依赖"方向"标签正确显示图像时.

不同的Android设备以不同的方式处理相机/图像旋转 - 我信赖的'Nexus One似乎总是在捕获后立即旋转图像,因此文件的本机内容在查看时始终是"直立的".然而,其他设备(特别是我测试中的三星手机)不会旋转图像文件的内容 - 而是设置exif'Orientation'标签.无论何时稍后显示图像,相关图像代码都应检测到方向"标签"的存在并适当地旋转图像.但是如果您对图像进行了任何位图处理并将其保存到新文件中,那么所有exif数据都将丢失.

除了Orientation数据之外,您还可能会丢失其他有价值的元数据,例如品牌/型号等.

这使我困惑了几个星期(图像在电话库中显示时显示正常,但随后到达我的服务器时方向错误且没有明显的元数据).我在这里添加这个自我提问来帮助别人.这篇博客文章非常有用:

http://vikaskanani.wordpress.com/2011/07/17/android-re-size-image-without-loosing-exif-information/

android exif image android-camera

49
推荐指数
3
解决办法
2万
查看次数

如何压缩图像大小?

我想使用android camera api以低分辨率捕获图像,但是当我捕获图像时,它将采用设备相机的默认分辨率.所以我想在捕获时捕获低分辨率或小尺寸的图像,或者如何将大图像压缩成android中的小尺寸?

android image-compression android-camera android-camera-intent

26
推荐指数
4
解决办法
8万
查看次数

在Android中获取所选图库图像的文件路径和文件名

我正在创建一个应用程序,它从库中上传所选图像并将其上传到Web服务.Web服务需要所选图像的文件名以及文件内容的base64编码.我已设法通过硬编码文件路径实现此目的.但是,我正在努力获得图像的真实文件路径.我已经在网上阅读并拥有此代码,但它对我不起作用:

 public void onActivityResult(int requestCode, int resultCode, Intent data) {
   if (resultCode == RESULT_OK) {
     Uri selectedImageUri = data.getData();
     String[] projection = {MediaStore.Images.Media.DATA};

     try {
       Cursor cursor = getContentResolver().query(selectedImageUri, projection, null, null, null);
       cursor.moveToFirst();

       int columnIndex = cursor.getColumnIndex(projection[0]);
       String picturePath = cursor.getString(columnIndex);
       cursor.close();
       Log.d("Picture Path", picturePath);
     }
     catch(Exception e) {
       Log.e("Path Error", e.toString());
     }
   }
 }
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

java.lang.NullPointerException
Run Code Online (Sandbox Code Playgroud)

编辑

忘了提我正在使用Kitkat.看起来我的问题与KitKat有关.我发现这个(见下文)帮助我让我的应用程序正常工作:

KitKat上的Android Gallery为Intent.ACTION_GET_CONTENT返回不同的Uri

java android filepath android-gallery

25
推荐指数
5
解决办法
8万
查看次数

在上传到服务器之前,如何在 android 中调整/压缩相机图像或图库图像的大小?

我必须上传可以从图库中选择或通过相机拍摄的图像。我已经成功地做到了这一点。但问题是,有时图像大小为 1MB。所以上传到服务器需要更多时间。我需要在上传前调整这张图片的大小。这该怎么做?

 public void onActivityResult(int requestCode, int resultCode, Intent data)
{
    AlertDialog alertDialog1;

    if( requestCode == REQUEST_IMAGE && resultCode == Activity.RESULT_OK ){
        try {
            FileInputStream in = new FileInputStream(destination);
            BitmapFactory.Options options = new BitmapFactory.Options();
            options.inSampleSize = 10;
            imagePath = destination.getAbsolutePath();
            Bitmap bmp = BitmapFactory.decodeStream(in, null, options);
            //img = (ImageView) findViewById(R.id.imageView1);
            int nh = (int) ( bmp.getHeight() * (512.0 / bmp.getWidth()) );
            Bitmap scaled = Bitmap.createScaledBitmap(bmp, 512, nh, true);
            img.setImageBitmap(scaled);
        } catch (Exception e) {
            // AlertDialog alertDialog1;
            alertDialog1 = new …
Run Code Online (Sandbox Code Playgroud)

android image-resizing

5
推荐指数
1
解决办法
9965
查看次数

API 29已弃用“ getBitmap”。是否还有其他代码?

onActivityResult不工作,因为getBitmap已弃用,是否还有其他代码可以实现此目的?

这是需要更改的代码,有什么建议吗?

val bitmap = MediaStore.Images.Media.getBitmap(contentResolver, selectedPhotoUri)
Run Code Online (Sandbox Code Playgroud)

getBitmap越过并说,它已过时

android gradle kotlin

5
推荐指数
6
解决办法
2466
查看次数

bitmap.compress 后图像旋转

所以我试图让用户从他们的照片库中选择一张图像,然后将其上传到 Firebase Storage...到目前为止,我的代码如下所示:

@Override
protected void onActivityResult(int requestCode,int resultcode, Intent data){
    super.onActivityResult(requestCode,resultcode,data);

    if(requestCode == REQUEST_IMAGE_CAPTURE && resultcode == RESULT_OK) {
        final Uri uri = data.getData();

        if (uri != null){
            Bitmap bmp = null;
            try {

                bmp = MediaStore.Images.Media.getBitmap(getContentResolver(), uri);

            } catch (IOException e){
                e.printStackTrace();
            }
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            bmp.compress(Bitmap.CompressFormat.PNG, 25, baos);



            byte[] fileInBytes = baos.toByteArray();
            bmp.recycle();
            FirebaseAuth auth = FirebaseAuth.getInstance();
            FirebaseStorage storage = FirebaseStorage.getInstance();
            String imageString = "";
            if(clickPhoto ==1){imageString = "Image 1"; }
            else if(clickPhoto ==2){imageString = …
Run Code Online (Sandbox Code Playgroud)

java android exif

4
推荐指数
1
解决办法
4502
查看次数