Например надо что-то типа того:
MAX_FILE_SIZE = 2 * 1024 * 1024
im = Image.open(…)
# im.resize(width, height)
if im.file_size > MAX_FILE_SIZE:
im.change_file_size(MAX_FILE_SIZE)
im.save()
можно сделать по принципу бисекта, то есть каждый раз делить пополам w/h и ресайзить, получать размер файла
и если он слишком мал для MAX_FILE_SIZE, то
w = w + (w / 2)
h = h + (h / 2)
ну а если размер получился больше MAX_FILE_SIZE, то
w = w - (w / 2)
h = h - (h / 2)
и т.д.