Почему PIL не может объединить 2 изображения в моем коде?

Я пытаюсь объединить 2 изображения в одно большее с помощью функции Image.paste. Я начинаю с создания изображения, которое может содержать оба изображения, а затем вставляю 2 изображения:

wrapper = Image.new("I", (width, height+textHeight));

if placement=="bottom":
 wrapper.paste(img1); 
 wrapper.paste(textImage, (0, height, width, textHeight));
else:
 wrapper.paste(textImage);
 wrapper.paste(img1, (0,textHeight));

Затем я получаю эту ошибку каждый раз:

 File "C:\Python27\lib\site-packages\PIL\Image.py", line 1127, in paste
    self.im.paste(im, box)
ValueError: images do not match

Я очень уверен, что размеры изображений правильные, и изображение-оболочка может содержать оба изображения. Единственный способ избежать этой ошибки — сделать 3 изображения (оболочку и 2 компонента) одинакового размера и вставить их из (0,0).

Я в отчаянии, пожалуйста, помогите!


person NeoWang    schedule 30.11.2013    source источник


Ответы (1)


Возможны две проблемы.

  1. Вы уверены, что ваша четверка (0, height, width, textHeight) верна? Это должны быть координаты (left, upper, right, lower) пикселя. В этом случае вставляемое изображение должно соответствовать размеру области, и я думаю, что именно в этом заключается ваша ошибка. В качестве альтернативы вы можете указать 2-кортеж, указывающий только верхний левый угол того места, куда вы хотите вставить изображение. См.: http://effbot.org/imagingbook/image.htm.

  2. Вы уверены, что высота, ширина, textHeight равны ints, а не floats?

Вы можете попробовать что-то вроде этого:

x, y = img1.size
wrapper.paste(textImage,(0,height,x,y))
person William Denman    schedule 30.11.2013
comment
Оказывается, я неправильно задал размер изображения: я рисую текст на textImage, и после вычисления области, используемой текстом, мне нужно обрезать лишнее пустое пространство. Я сделал это с textImage.size=(w,h). Правильный способ сделать это — использовать метод обрезки. Но в вашем ответе указаны 2 наиболее распространенные причины этой ошибки (я много искал), поэтому я отмечаю его как принятый ответ. - person NeoWang; 30.11.2013
comment
Спасибо! Рад узнать, что ты это понял. - person William Denman; 30.11.2013