Я пытаюсь масштабировать, а затем сжать файл изображения в формате PNG, формат изображения с камеры - JPG, и он успешно масштабируется, но все еще не преобразуется в PNG. Во-вторых, я думаю, что метод compress
возвращает разные размеры byteArray
для разного качества, но я получаю одинаковые размеры даже при изменении значения параметра качества.
Вот метод, который я написал:
fun compressImage(file: File): File {
val outputBounds = 600
val scaleOptions = BitmapFactory.Options()
scaleOptions.inJustDecodeBounds = true
BitmapFactory.decodeFile(file.path, scaleOptions)
val scaleFactor = if(scaleOptions.outHeight > outputBounds || scaleOptions.outWidth > outputBounds)
kotlin.math.max(scaleOptions.outWidth/outputBounds, scaleOptions.outHeight/outputBounds)
else 1
val outOptions = BitmapFactory.Options()
outOptions.inSampleSize = scaleFactor.roundToInt()
outOptions.inPreferredConfig = Config.RGB_565;
outOptions.inDither = true;
val decodedBMP = BitmapFactory.decodeFile(file.path, outOptions)
var byteOutStream = ByteArrayOutputStream()
val newFile = File(file.path)
val fileOutputStream = FileOutputStream(newFile, false)
var quality = 60
decodedBMP.compress(Bitmap.CompressFormat.PNG, quality, byteOutStream)
fileOutputStream.write(byteOutStream.toByteArray())
fileOutputStream.flush()
fileOutputStream.close()
return newFile
}
Я передал файл в качестве параметра и перезаписал файл сжатым изображением.
Обновление
Я попытался использовать Bitmap.CompressFormat.JPEG
в качестве конфигурации сжатия растрового изображения и это сжимает размер изображения, но с явно ухудшающимся качеством (я имею в виду, что изображение выглядит как пиксельное), я прочитал Bitmap.CompressFormat.PNG
, который дает вам сжатие без потерь, но оно не работает.