Конвертирование изображений с помощью Python и ImageMagickПодписка на Комментарии к "Конвертирование изображений с помощью Python и ImageMagick"

Аватар xxblx

Для работы с изображениями существует замечательный пакет утилит - ImageMagick, а для его использования с Python - PythonMagick.
Предположим, задача - конвертировать из PNG в JPEG все изображения, находящиеся в текущем каталоге.

Конвертирование без отдельного изменения размера и качества:

#!/usr/bin/env python
#-*- coding: utf-8 -*-

import os
import PythonMagick

filelist = os.listdir('.')
for line in filelist:
    if line[-3:] == "png":
        image = PythonMagick.Image(line)
        new_line = line[:-3] + "jpg"
        image.magick('JPEG')
        image.write(new_line)
    else:
        pass
   
print "Готово"

Конвертирование с изменение качества (со 100 до 80):

#!/usr/bin/env python
#-*- coding: utf-8 -*-

import os
import PythonMagick

filelist = os.listdir('.')
for line in filelist:
    if line[-3:] == "png":
        image = PythonMagick.Image(line)
        new_line = line[:-3] + "jpg"
        image.magick('JPEG')
        image.quality(80)
        image.write(new_line)
    else:
        pass
   
print "Готово"

Конвертирование с изменением размера ширины всех изображений до 640 (высота будет изменена пропорционально ширине):

#!/usr/bin/env python
#-*- coding: utf-8 -*-

import os
import PythonMagick

filelist = os.listdir('.')
for line in filelist:
    if line[-3:] == "png":
        image = PythonMagick.Image(line)
        new_line = line[:-3] + "jpg"
        image.magick('JPEG')
        image.scale('640x')
        image.write(new_line)
    else:
        pass
   
print "Готово"

Использовать метод scale можно так же и для изменения высоты, допустим, если мы хотим высоту 200, то выглядеть строка 13 будет так: image.scale('x200').

Стоит также отметить, что PythonMagick можно использовать не только для конвертирования. Вот пример "другого" использования PythonMagick - получение информации обо всех изображениях в текущем каталоге:

#!/usr/bin/env python
#-*- coding: utf-8 -*-

import os
import PythonMagick

filelist = os.listdir('.')
for line in filelist:
    # исключаем из проверки наш скрипт, который лежит вместе с изображениями в одном каталоге
    if line[-2:] == "py":
        pass
    else:
        image = PythonMagick.Image(line)
        # имя
        print image.fileName()
        # формат
        print image.magick()
        # ширина
        print image.size().width()
        # высота
        print image.size().height()

Само собой, функционал у PythonMagick не заканчивается на этом. Используйте dir(PythonMagick.Image()) и help(PythonMagick.Image), help(какой-то_метод) для получения более детальной информации.

Аватар Serj

По-моему, PythonMagick RIP. Погляди стандартную PIL, наверняка там есть весь необходимый функционал. Например..
Конвертирование:

import Image

im = Image.open('pic.png')
im.save('pic.jpg')

Ресайз:
import Image

size = 320 ,180
infile = 'img.png'
outfile = 'img.thumbnail'

im = Image.open(infile)
im.thumbnail(size, Image.ANTIALIAS)
im.save(outfile, 'JPEG')
Аватар xxblx

Serj, спасибо за наводку, гляну PIL. Правда я Python крайне редко использую, мне больше Lua по душе, но как-нибудь на досуге обязательно гляну PIL. Странно, что я раньше ее не видел, если она в стандартной поставке модулей есть.

Добавить комментарий