Изменение размера изображения на основе только одного размера стороны с учетом соотношения сторон с помощью Glide - PullRequest
0 голосов
/ 11 апреля 2020

Сегодня я начал использовать 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);
}

Но у меня есть некоторые сомнения:

  1. Есть ли способ изменить размер растрового изображения на основе только ширины или высоты, определенного размера и большого важно соблюдать соотношение сторон? В настоящее время я нашел только один метод, который предполагает установить ширину и высоту. Но в приведенном выше коде, когда только одно значение между outWidth и outHeight отличается от 0, я хочу установить только длину больше 0, а длину другой стороны можно изменять в зависимости от соотношения сторон. В настоящее время я сделал вышеописанным способом, но мне не нравится ..

  2. Я должен повторить этот процесс для большого количества файлов, как я могу оптимизировать этот процесс? Скользить автоматически повторно использовать растровое изображение?

...