Сшивание двух изображений размером 100 КБ в подушку Python приводит к получению изображения размером 150 МБ - PullRequest
0 голосов
/ 11 марта 2019

Мне нужно сшить 2 изображения вместе в Python.Я использовал это решение (код ниже), и он прекрасно сшивает их, но я столкнулся с проблемой: мои исходные TIFF-изображения имеют размер ~ 100 КБ каждое, но мое выходное изображение составляет ~ 150 МБ.Почему это происходит, и как я могу это исправить?Спасибо.

from PIL import Image

def merge_images(file1, file2):
    """Merge two images into one, displayed side by side
    :param file1: path to first image file
    :param file2: path to second image file
    :return: the merged Image object
    """
    image1 = Image.open(file1)
    image2 = Image.open(file2)

    (width1, height1) = image1.size
    (width2, height2) = image2.size

    result_width = width1 + width2
    result_height = max(height1, height2)

    result = Image.new('RGB', (result_width, result_height))
    result.paste(im=image1, box=(0, 0))
    result.paste(im=image2, box=(width1, 0))
    return result

1 Ответ

1 голос
/ 11 марта 2019

Вызов Image.save () без предоставления дополнительных аргументов сохранит изображение в формате TIFF без сжатия.

Посмотрите в разделе Сохранение изображений TIFF в документации на подушку различные доступные варианты сжатия

https://pillow.readthedocs.io/en/3.1.x/handbook/image-file-formats.html?highlight=writer

Из сохранения изображений TIFF

1012 * сжатие * Строка, содержащая нужный метод сжатия для файла. (допустимо только с установленным libtiff) Допустимые методы сжатия: Нет, «tiff_ccitt», «group3», «group4», «tiff_jpeg», «tiff_adobe_deflate», «tiff_thunderscan», «tiff_deflate», «tiff_sgilog», «tiff_sgilog24» "tiff_raw_16"

Например, вы можете сохранить полученное изображение с помощью:

result.save('result.tiff', compression="tiff_deflate")
...