之前我看过这个问题,但没有一个解决方案真的适合我的情况。
除了节省一些空间之外,我还想节省从Firebase存储上传/下载内容的时间。由于firebase使用图像uri,我无法想到实现这一目标的正确方法。
解决方案可能是创建缓存的“副本”或一些临时文件来调整大小,裁剪等,然后将该副本上传到存储。但是我不知道这是不是一个好方法,我真的不知道该怎么做。
你会建议一些方法吗?我非常感谢你的例子。
答案 0 :(得分:4)
您可以使用一些自定义libraries
来压缩图片和视频等媒体文件。例如: Compressor 是压缩图片的好库:https://github.com/zetbaitsu/Compressor
要压缩图像并在Firebase Storage
上传,您可以执行以下操作:
try {
Bitmap bitmap = new Compressor(this)
.setMaxHeight(200) //Set height and width
.setMaxWidth(200)
.setQuality(100) // Set Quality
.compressToBitmap(file);
} catch (IOException e) {
e.printStackTrace();
}
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
final byte[] bytes = baos.toByteArray();
然后调用并设置UploadTask
:
UploadTask uploadTask = StorageReference.putBytes(bytes);
当然还有其他一些libraries
喜欢:
<强> SiliCompressor 强>
https://github.com/Tourenathan-G5organisation/SiliCompressor
答案 1 :(得分:3)
使用第三方库,简单高效
摇篮
dependencies {
compile 'id.zelory:compressor:2.1.0'
}
压缩图像文件
compressedImageFile = new Compressor(this).compressToFile(actualImageFile);
压缩图像文件到位图
compressedImageBitmap = new Compressor(this).compressToBitmap(actualImageFile);
有关详细信息,请访问此
https://github.com/zetbaitsu/Compressor
希望这会有所帮助,因为我总是使用这个库。
答案 2 :(得分:0)
您可以使用此库
Gradle
dependencies {
implementation 'com.github.WindSekirun:MediaResizer:1.0.0'
}
allprojects {
repositories {
maven { url 'https://jitpack.io' }
}
压缩图像
ImageResizeOption resizeOption = new ImageResizeOption.Builder()
.setImageProcessMode(ImageMode.ResizeAndCompress)
.setImageResolution(1280, 720)
.setBitmapFilter(false)
.setCompressFormat(Bitmap.CompressFormat.JPEG)
.setCompressQuality(75)
.setScanRequest(ScanRequest.TRUE)
.build();
ResizeOption option = new ResizeOption.Builder()
.setMediaType(MediaType.IMAGE)
.setImageResizeOption(resizeOption)
.setTargetPath(path)
.setOutputPath(imageFile.getAbsolutePath())
.setCallback((code, output) -> {
txtStatus.setText(ResultBuilder.displayImageResult(code, path, output));
progress.dismiss();
}).build();
MediaResizer.process(option);