Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/180.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 位图压缩后图像旋转_Java_Android_Exif - Fatal编程技术网

Java 位图压缩后图像旋转

Java 位图压缩后图像旋转,java,android,exif,Java,Android,Exif,因此,我试图让用户从他们的照片库中选择一幅图像,然后将其上载到Firebase存储…目前为止,我的代码如下所示: @Override protected void onActivityResult(int requestCode,int resultcode, Intent data){ super.onActivityResult(requestCode,resultcode,data); if(requestCode == REQUEST_IMAGE_CAPTURE &am

因此,我试图让用户从他们的照片库中选择一幅图像,然后将其上载到Firebase存储…目前为止,我的代码如下所示:

@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 = "Image 2"; }
            else if (clickPhoto ==3){imageString = "Image 3"; }
            else if (clickPhoto ==4){imageString = "Image 4"; }
            final StorageReference storageReference = storage.getReference().child("Images").child("users").child(auth.getCurrentUser().getUid()).child(imageString);
            storageReference.putBytes(fileInBytes).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                @Override
                public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                    storageReference.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
                        @Override
                        public void onSuccess(Uri uri) {
                            String downloadUrl = uri.toString();
                            String urlString ="";
                            if(clickPhoto ==1){ urlString = "photo1URI";}
                            if(clickPhoto ==2){ urlString = "photo2URI";}
                            else if (clickPhoto ==3){ urlString = "photo3URI";}
                            else if (clickPhoto ==4){urlString = "photo4URI";}

                            toMap.put(urlString, downloadUrl);
                            updatedb();
                            toMap.clear();
                            Log.d("uriii",downloadUrl);}


                    });
                }
            }).addOnFailureListener(new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception e) {
                    Log.d("UploadFailure",e.getMessage());
                }
            });




        }
        else {
            Toast.makeText(this,"Didn't work",Toast.LENGTH_LONG).show();
        }
    }
}
@覆盖
受保护的void onActivityResult(int请求代码、int结果代码、意图数据){
super.onActivityResult(请求代码、结果代码、数据);
if(requestCode==REQUEST\u IMAGE\u CAPTURE&&resultcode==RESULT\u OK){
最终Uri=data.getData();
if(uri!=null){
位图bmp=null;
试一试{
bmp=MediaStore.Images.Media.getBitmap(getContentResolver(),uri);
}捕获(IOE异常){
e、 printStackTrace();
}
ByteArrayOutputStream bas=新的ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.PNG,25,baos);
字节[]fileInBytes=baos.toByteArray();
bmp.recycle();
FirebaseAuth auth=FirebaseAuth.getInstance();
FirebaseStorage=FirebaseStorage.getInstance();
字符串imageString=“”;
如果(clickPhoto==1){imageString=“Image 1”;}
否则,如果(单击照片==2){imageString=“Image 2”;}
否则,如果(单击照片==3){imageString=“Image 3”;}
如果(单击照片==4){imageString=“Image 4”;}
final-StorageReference-StorageReference=storage.getReference().child(“图像”).child(“用户”).child(auth.getCurrentUser().getUid()).child(imageString);
storageReference.putBytes(fileInBytes).addOnSuccessListener(新的OnSuccessListener(){
@凌驾
成功时公共无效(UploadTask.TaskSnapshot TaskSnapshot){
storageReference.getDownloadUrl().addOnSuccessListener(新OnSuccessListener()){
@凌驾
成功时的公共无效(Uri){
String downloadUrl=uri.toString();
字符串urlString=“”;
如果(clickPhoto==1){urlString=“photo1URI”}
如果(clickPhoto==2){urlString=“photo2URI”;}
如果(单击照片==3){urlString=“photo3URI”;}
如果(单击照片==4){urlString=“photo4URI”;}
put(urlString,downloadUrl);
updatedb();
toMap.clear();
Log.d(“uriii”,下载URL);}
});
}
}).addOnFailureListener(新的OnFailureListener(){
@凌驾
public void onFailure(@NonNull异常e){
Log.d(“上传失败”,例如getMessage());
}
});
}
否则{
Toast.makeText(此“无效”,Toast.LENGTH_LONG.show();
}
}
}
我的问题是上传的图像会改变方向…看起来是随机的…我如何保持方向?我看过Exif接口,但看不到将其作为ByteArrayOutputStream上传的答案


任何帮助都将不胜感激。

问题是,压缩后,图像中的EXIF信息(包括方向)将被删除。您需要将EXIF信息从原始图像复制到压缩图像。解决方案说明。

看到这个答案了吗:它并不能解决我的问题,因为我仍然无法将exif接口应用于bmp.compress(Bitmap.CompressFormat,quality,output)方法?请查看Manuel在这里给出的答案,了解如何将旋转应用于位图,而不是将其应用于位图,位图使用bmp.compress进行压缩,然后在上传到firebase之前输出到ByteArrayOutputStream中…所以我需要在上传之前对bytearrayoutput应用旋转?