Android:图片以-90 度旋转上传到 firebase
Android: Images uploaded to firebase with -90 rotation
我正在使用三星 A52 用相机拍摄一些图像而不是我的 firebase 应用程序并保存它们,之后我会将这些图像上传到 firebase,我在上传之前压缩它们。
现在上传图片后我检查发现它们 -90
旋转了,并不是所有的图片都旋转了,有些旋转了有些没有;
有什么想法吗?
或者在从 firebase 加载图像时是否有可能检测到它旋转到 retotate 是 90
?
从图库获取图片后上传图片的功能。
for (uploadCount = 0; uploadCount < ImageList.size(); uploadCount++) {
String imagePath = productRef.child(UID).child("images").push().getKey();
Uri IndividualImage = ImageList.get(uploadCount);
assert imagePath != null;
StorageReference ImageName = productImagesRef.child(UID).child(imagePath);
//Compress Images
Bitmap bmp = null;
try {
bmp = MediaStore.Images.Media.getBitmap(getContentResolver(), IndividualImage);
} catch (IOException e) {
e.printStackTrace();
}
ByteArrayOutputStream baos = new ByteArrayOutputStream();
assert bmp != null;
bmp.compress(Bitmap.CompressFormat.JPEG, 25, baos);
byte[] data = baos.toByteArray();
//End of compressing
//start on uploading compressed
ImageName.putBytes(data).addOnSuccessListener(taskSnapshot -> ImageName.getDownloadUrl()
.addOnSuccessListener(uri -> {
String url = String.valueOf(uri);
StoreLink(url, imagePath);
})).addOnProgressListener(snapshot1 -> {
double progress = (100.0* snapshot1.getBytesTransferred()/snapshot1.getTotalByteCount());
loadingDialog.setMessage("صورة رقم " + (count+ 1) + " -->> " +(int) progress + "%");
});
}
所以我自己解决了,这是我的解决方案:
我在 recyclerView item(Adapter)
的布局中添加了一个旋转按钮,然后创建了一个空的 ArrayList 来存储值或旋转度数。
我将 arraylist 传递给具有旋转按钮的适配器,现在当用户单击旋转时,90f
的值将保存到 arraylist,其位置如下:
imageRotation.set(holder.getAdapterPosition(), "90f");
因为 arrayList 可以取 (index, value)
注意:如果 Arralist 位置没有现有值并且您跳过该位置以更改其他项目的旋转,它会崩溃。
为了解决这个问题,我做了一个 for 循环,以 0f
作为旋转度来填充 Arratlist。
for (int i = 0; i <= imageUriList.size(); i++) {
imageRotation.add(i,"0f");
}
然后当用户点击旋转时,它会更新位置值:
imageRotation.set(holder.getAdapterPosition(), "90f");
及Activity上传结果Activity:
我用过这个:
if (requestCode == LAUNCH_SECOND_ACTIVITY) {
if (resultCode == Activity.RESULT_OK) {
assert data != null;
imageRotationArray = data.getStringArrayListExtra("imageRotationArray");
}
}
压缩图像功能之前:
// 创建新矩阵
Matrix matrix = new Matrix();
// setup rotation degree
matrix.postRotate(Float.parseFloat(imageRotationArray.get(countRotateImage)));
bmp = Bitmap.createBitmap(bmp, 0, 0, bmp.getWidth(), bmp.getHeight(), matrix, true);
countRotateImage++;
我正在使用三星 A52 用相机拍摄一些图像而不是我的 firebase 应用程序并保存它们,之后我会将这些图像上传到 firebase,我在上传之前压缩它们。
现在上传图片后我检查发现它们 -90
旋转了,并不是所有的图片都旋转了,有些旋转了有些没有;
有什么想法吗?
或者在从 firebase 加载图像时是否有可能检测到它旋转到 retotate 是 90
?
从图库获取图片后上传图片的功能。
for (uploadCount = 0; uploadCount < ImageList.size(); uploadCount++) {
String imagePath = productRef.child(UID).child("images").push().getKey();
Uri IndividualImage = ImageList.get(uploadCount);
assert imagePath != null;
StorageReference ImageName = productImagesRef.child(UID).child(imagePath);
//Compress Images
Bitmap bmp = null;
try {
bmp = MediaStore.Images.Media.getBitmap(getContentResolver(), IndividualImage);
} catch (IOException e) {
e.printStackTrace();
}
ByteArrayOutputStream baos = new ByteArrayOutputStream();
assert bmp != null;
bmp.compress(Bitmap.CompressFormat.JPEG, 25, baos);
byte[] data = baos.toByteArray();
//End of compressing
//start on uploading compressed
ImageName.putBytes(data).addOnSuccessListener(taskSnapshot -> ImageName.getDownloadUrl()
.addOnSuccessListener(uri -> {
String url = String.valueOf(uri);
StoreLink(url, imagePath);
})).addOnProgressListener(snapshot1 -> {
double progress = (100.0* snapshot1.getBytesTransferred()/snapshot1.getTotalByteCount());
loadingDialog.setMessage("صورة رقم " + (count+ 1) + " -->> " +(int) progress + "%");
});
}
所以我自己解决了,这是我的解决方案:
我在 recyclerView item(Adapter)
的布局中添加了一个旋转按钮,然后创建了一个空的 ArrayList 来存储值或旋转度数。
我将 arraylist 传递给具有旋转按钮的适配器,现在当用户单击旋转时,90f
的值将保存到 arraylist,其位置如下:
imageRotation.set(holder.getAdapterPosition(), "90f");
因为 arrayList 可以取 (index, value)
注意:如果 Arralist 位置没有现有值并且您跳过该位置以更改其他项目的旋转,它会崩溃。
为了解决这个问题,我做了一个 for 循环,以 0f
作为旋转度来填充 Arratlist。
for (int i = 0; i <= imageUriList.size(); i++) {
imageRotation.add(i,"0f");
}
然后当用户点击旋转时,它会更新位置值:
imageRotation.set(holder.getAdapterPosition(), "90f");
及Activity上传结果Activity:
我用过这个:
if (requestCode == LAUNCH_SECOND_ACTIVITY) {
if (resultCode == Activity.RESULT_OK) {
assert data != null;
imageRotationArray = data.getStringArrayListExtra("imageRotationArray");
}
}
压缩图像功能之前:
// 创建新矩阵
Matrix matrix = new Matrix();
// setup rotation degree
matrix.postRotate(Float.parseFloat(imageRotationArray.get(countRotateImage)));
bmp = Bitmap.createBitmap(bmp, 0, 0, bmp.getWidth(), bmp.getHeight(), matrix, true);
countRotateImage++;