2013-07-08 3 views
3

я получаю эту ошибку при запуске сценария вставки в Python 3.x: TypeError: целочисленный аргумент ожидалось, получил поплавокPython PIL TypeError: целочисленный аргумент и ожидалось, получил поплавок

from PIL import Image 
img=Image.open('C:\Mine.jpg','r') 
img_w,img_h=img.size 
background = Image.new('RGBA', (1440,900), (255, 255, 255, 255)) 
bg_w,bg_h=background.size 
offset=((bg_w-img_w)/2,(bg_h-img_h)/2) 
background.paste(img,offset) 
background.save('C:\new.jpg') 

Error MSG:

Traceback (most recent call last): 
    File "C:\Users\*****\workspace\Canvas Imager\src\Imager.py", line 7, in <module> 
    background.paste(img,offset) 
    File "C:\Python33\lib\site-packages\PIL\Image.py", line 1127, in paste 
    self.im.paste(im, box) 
TypeError: integer argument expected, got float 

Я вижу, что предполагается, что это целое число, но в конце получается поплавок. Что я могу сделать, чтобы сделать это int вместо этого?

ответ

7

В Python 3, чтобы получить целочисленный результат от деления нужно использовать // вместо /:

offset=((bg_w-img_w)//2,(bg_h-img_h)//2) 
1

Мое предположение было бы, что ему не нравится эта линия

offset=((bg_w-img_w)/2,(bg_h-img_h)/2) 

, поэтому я бы попробовал что-то вроде

offset=((bg_w-img_w)//2,(bg_h-img_h)//2) 

, но это похоже на кто-то просто избил меня.

+0

Исправлено! от PIL импорта изображения IMG = Image.open ('C: \ Шахта', 'г') img_w, img_h = img.size фон = Image.new ('RGBA', (1440,900), (255, 255, 255, 255)) bg_w, bg_h = background.size offset = (int ((bg_w-img_w)/2), int ((bg_h-img_h)/2)) background.paste (img, смещение) background.save ('new.jpg') Добавлен int в данные смещения. – user2040938

Смежные вопросы