Конвертируем .bmp в .png, с помощью Python и PIL

    В предыдущем посте я воспользовался стандартным «PrtSc», на Windows XP, сделав серию из скриншотов, обработав и сохранив их в обычном Paint'е — получилось около 3.5 Мб на каждую картинку.

    Здесь хочу исправить получившееся недоразумение, средствами питона (по-прежнему, версии 2.6).

    Вообще забавно, но после установки PIL проблема решается в две строчки кода.
    import Image

    Image.open('1.bmp').save('1.png')

    Получилось порядка 27 Кб на картинку, против первых 3.5 Мб


    Порадовались, и написали код, для массовой конвертации из существующей папки.
    import os, Image

    os.chdir('F:\\4habr\\1publication'# поменяем директорию на ту, где у нас расположены картинки

    for fname in os.listdir(os.getcwd()): # os.listdir - соответственно, есть ли что-нибудь, у нас, в папке,
        try:
            Image.open(fname).save(os.path.splitext(fname)+'.png'# а os.getcwd() - папка, в которую мы однажды перешли
        except DefaultError: 
            print('Sorry, we have no pictures.')

    И ещё, кому интересно, для упрощения процедуры массового конвертирования можно использовать вот этот скриптик, который в свою очередь задействует Tkinter.

    Если у Вас есть идеи, как код улучшить — с радостью их приму на вооружение.
    Поделиться публикацией

    Комментарии 8

      0
      эм… 3.5 мегабайта — это как раз размер скриншота в bmp.
      вы уверенные что у ваших файлов было что-то общее с jpg кроме расширения?
        +1
        Кстати да, если изменить расширение с jpg на bmp — отображается один в один. :)
          +1
          Вы не поверите, но изменив его на gif была бы та же самая картинка*

          *при учёте, что у вас нормальный просмотрщик
            +1
            Вы не поверите, но если убрать расширение нафиг, то оно всё равно будет просматриваться!
        +3
        1) except без указания типа исключения — плохо
        2) fname[:-3]+'png' не сработает для файлов с расширением jpeg. и правильнее использовать os.path.splitext
        3) использование finally в данном примере бессмысленно
        4) ну и неплохо бы добавить проверку на то, что открываемый файл является изображением — иначе обработка прервется (ведь в try — except взяли весь цикл, а не одну итерацию)
          0
          Я бы использовал imagemagick…
            +1
            Питон и исправление своих ошибок — это хорошо.
            Но это даже не на пост, на сниппет-то еле тянет.
              0
              del

              Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

              Самое читаемое