gpt4 book ai didi

java - 上传到 FirebaseStorage 之前进行图像压缩

转载 作者:太空宇宙 更新时间:2023-11-04 12:03:07 25 4
gpt4 key购买 nike

我有一个应用,用户可以在其中创建事件并从其图库上传图像并将其上传到 FirebaseStorage。一切工作正常,但图像尺寸确实很大,我想优化加载/下载过程。我已经尝试过这个:

// Get the data from an ImageView as bytes
imageView.setDrawingCacheEnabled(true);
imageView.buildDrawingCache();
Bitmap bitmap = imageView.getDrawingCache();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
byte[] data = baos.toByteArray();

UploadTask uploadTask = mountainsRef.putBytes(data);
uploadTask.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception exception) {
// Handle unsuccessful uploads
}
}).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
// taskSnapshot.getMetadata() contains file metadata such as size, content-type
Uri downloadUrl = taskSnapshot.getDownloadUrl();
}
});

并设置bitmap.compress(Bitmap.compressFormat.JPEG, 50, baos);这是可行的,但这基本上使每张图像都变得丑陋。有没有办法(如果可能的话,有指南)在不完全破坏质量的情况下减小图像的尺寸?

最佳答案

What helped me was i scaled down the image resolution after converting the captured image to 1280 x 720 and then it dropped my file size by more that 50%.

Here is an example method.

   /**
* Compress the file and return the compressed photo
*
* @return photoFile
*/
public File PhotoCompressor(File PhotoFile) {
Bitmap b = BitmapFactory.decodeFile(photoFile.getAbsolutePath());


int originalWidth = b.getWidth();
int originalHeight = b.getHeight();
int boundWidth = COMPRESSED_PHOTO_WIDTH;
int boundHeight = COMPRESSED_PHOTO_HEIGHT;
int newWidth = originalWidth;
int newHeight = originalHeight;

//check if the image needs to be scale width
if (originalWidth > boundWidth) {
//scale width to fit
newWidth = boundWidth;
//scale height to maintain aspect ratio
newHeight = (newWidth * originalHeight) / originalWidth;
}

//now check if we need to scale even the new height
if (newHeight > boundHeight) {
//scale height to fit instead
newHeight = boundHeight;
//scale width to maintain aspect ratio
newWidth = (newHeight * originalWidth) / originalHeight;
}
Log.i(TAG, "Original Image:" + originalHeight + " x" + originalWidth);
Log.i(TAG, "New Image:" + newHeight + " x" + newWidth);
try {
Bitmap out = Bitmap.createScaledBitmap(b, newWidth, newHeight, true);
FileOutputStream fOut;
fOut = new FileOutputStream(photoFile);
out.compress(Bitmap.CompressFormat.JPEG, 100, fOut);
fOut.flush();
fOut.close();
b.recycle();
out.recycle();
} catch (OutOfMemoryError exception) {
Log.e(TAG, "OutofMemory excpetion" + exception);
exception.printStackTrace();
} catch (FileNotFoundException e) {
Log.e(TAG, "File not found excpetion" + e);
e.printStackTrace();
} catch (IOException e) {
Log.e(TAG, "IO exception excpetion" + e);
e.printStackTrace();
}
return photoFile;
}

关于java - 上传到 FirebaseStorage 之前进行图像压缩,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40694328/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com