ФорумПрограммированиеPython → Как сделать ресайз картинки до необходмого размера файла?

Как сделать ресайз картинки до необходмого размера файла?

  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 22 апреля 2012 г. 15:04

    Есть ресайз по width/height, а мне надо по MAX_FILE_SIZE.

    Например надо что-то типа того:

    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()
    Спустя 139 сек.

    можно сделать по принципу бисекта, то есть каждый раз делить пополам w/h и ресайзить, получать размер файла
    и если он слишком мал для MAX_FILE_SIZE, то
    w = w + (w / 2)
    h = h + (h / 2)
    ну а если размер получился больше MAX_FILE_SIZE, то
    w = w - (w / 2)
    h = h - (h / 2)

    и т.д.
    adw/0
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 22 апреля 2012 г. 15:18, спустя 14 минут 11 секунд

    Что-то я перед сном фигню сморозил, можно же просто высчитать примерные пропорции width/height и размера файла
    Спустя 266 сек.
    Вообщем сначала пропорционально задать width/height, а потом добить бисектом
    Спустя 29 сек.
    А ещё лучше если кто-то подскажет готовое решение, хоть на каком языке)
    adw/0
  • artoodetoo

    Сообщения: 5139 Репутация: N Группа: в ухо

    Spritz 22 апреля 2012 г. 22:31, спустя 7 часов 12 минут 22 секунды

    у картинок со сжатием размер файла будет нелинейно зависеть от размера в пикселях. а у JPEG есть еще параметр "качество". «всё сложно» )
    ιιlllιlllι унц-унц
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 23 апреля 2012 г. 4:39, спустя 6 часов 7 минут 55 секунд

    artoodetoo, да это понятно, поэтому и добавил что это только стартовое вычисление, а потом будет бисектом доганяться
    adw/0

Пожалуйста, авторизуйтесь, чтобы написать комментарий!