Сегодня я начал использовать Glide. Моя цель: создать метод, который загружает образ с диска, изменяет его размер, сохраняет его на диске с некоторым сжатием. Это мой код:
private fun glideImageConversion(inFile: File,
outFile: File,
outFormat: String,
outCompression: Double,
outWidth: Int,
outHeight: Int,
outColorMode: String){
val requestOption = RequestOptions()
if(outWidth != 0 || outHeight != 0) {
var outWidthTmp = outWidth
var outHeightTmp = outHeight
val originalDim = ImageHelper.getBitmapDimensions(inFile)
val aspectRatio =
originalDim[0].toFloat() / originalDim[1].toFloat() /* width/height */
if (outWidthTmp == 0) {
outWidthTmp = (outHeight * aspectRatio).roundToInt()
} else if (outHeightTmp == 0) {
outHeightTmp = (outWidth / aspectRatio).roundToInt()
}
requestOption.override(outWidthTmp,outHeightTmp).downsample(DownsampleStrategy.CENTER_INSIDE)
}else{
requestOption.downsample(DownsampleStrategy.NONE)
}
requestOption.skipMemoryCache(true).diskCacheStrategy(DiskCacheStrategy.NONE)
val withAlpha = outColorMode == "argb" || outColorMode == "agray"
if(withAlpha){
requestOption.format(DecodeFormat.PREFER_ARGB_8888)
}else{
requestOption.format(DecodeFormat.PREFER_RGB_565)
}
val futureTarget:FutureTarget<Bitmap> = Glide.with(application)
.asBitmap()
.load(inFile)
.apply(requestOption)
.submit()
val bitmap: Bitmap = futureTarget.get()
writeBitmapToFile(bitmap, outFile, ImageHelper.getCompressFormat(outFormat), ImageHelper.calculateCompressionFactor(outCompression))
Glide.with(application).clear(futureTarget);
}
Но у меня есть некоторые сомнения:
Есть ли способ изменить размер растрового изображения на основе только ширины или высоты, определенного размера и большого важно соблюдать соотношение сторон? В настоящее время я нашел только один метод, который предполагает установить ширину и высоту. Но в приведенном выше коде, когда только одно значение между outWidth и outHeight отличается от 0, я хочу установить только длину больше 0, а длину другой стороны можно изменять в зависимости от соотношения сторон. В настоящее время я сделал вышеописанным способом, но мне не нравится ..
Я должен повторить этот процесс для большого количества файлов, как я могу оптимизировать этот процесс? Скользить автоматически повторно использовать растровое изображение?