Вы можете рассчитать приблизительный уровень информации для изображения, взяв исходный размер изображения, деленный на количество пикселей:
info = fileSize / (width * height);
У меня есть изображение размером 369636 байт и 1200x800 пикселей, поэтому оно использует ~ 0,385 байт на пиксель.
У меня есть уменьшенная версия, которая составляет 101111 байт и 600x400 пикселей, поэтому она использует ~ 0,4213 байта на пиксель.
Когда вы уменьшите изображение, вы увидите, что оно обычно будет содержать немного больше информации на пиксель, в данном случае на 9% больше. В зависимости от вашего типа изображений и от того, насколько вы их уменьшаете, вы сможете рассчитать среднее значение, на которое увеличивается соотношение информации / пикселей (с), чтобы можно было рассчитать приблизительный размер файла:
newFileSize = (fileSize / (width * height)) * (newWidth * newHeight) * c
Из этого вы можете извлечь формулу того, насколько большим вам нужно сделать изображение для достижения определенного размера файла:
newWidth * newHeight = (newFileSize / fileSize) * (width * height) / c
Это приблизит вас к желаемому размеру файла. Если вы хотите приблизиться, вы можете изменить размер изображения до рассчитанного размера, сжать его и вычислить новое значение в байтах на пиксель из полученного вами размера файла.