2014-12-05 3 views
0

В последнее время я пытаюсь изучить Python с помощью подхода handson (я нахожу его намного веселее, хотя и не столь продуктивным).Исправляемая картинка в Python

В этом конкретном коде я пытался создать программу для массового создания сертификатов. Пробив себе голову, пытаясь решить эту проблему, код продолжает перезаписывать старые фотографии и сохранять их снова вместо того, чтобы получать чистую от базовой переменной.

Я попытался переместить base = Image.open("generico/Certificado.png") в функцию criacao(nome), но потом мне сказали, что «база» не определена.

draw = ImageDraw.Draw(base) 
NameError: name 'base' is not defined 

Помощь была бы очень признательна!

import zlib, datetime 
from PIL import Image, ImageFont, ImageDraw 


curso = input("Course: ") 
inicio = input("Date of start (DD/MM): ") 
fim = input("Date ended (formato DD/MM/AAAA): ") 
horas = input ("Total hours spent: ") 
professor = input("Professor: ") 
quantos = int(input("Number of students: ")) 
contador = int(0) 


base = Image.open("generico/Certificado.png") 
font = ImageFont.truetype("arial.ttf", 50) 
draw = ImageDraw.Draw(base) 


def criacao(nome): 
    nome_arquivo = str(datetime.date.today()) + " " + nome[0].upper() + nome[1:len(nome)].lower() + " " + curso 
    draw.text((750,1065), nome.upper(), font=font, fill=(0,0,0,0)) 
    draw.text((750,1414), curso.upper(), font=font, fill=(0,0,0,0)) 
    draw.text((1220,1625), inicio, font=font, fill=(0,0,0,0)) 
    draw.text((1500,1625), fim, font=font, fill=(0,0,0,0)) 
    draw.text((1540,1750), horas + ".", font=font, fill=(0,0,0,0)) 
    draw.text((1740,2130), str(datetime.date.today()), font=font, fill=(0,0,0,0)) 
    draw.text((1550,2680), professor, font=font, fill=(0,0,0,0)) 
    base.save("Criado/" + nome_arquivo + ".png") 


while contador < quantos: 
    criacao(input("Student's name: ")) 
    contador += 1 

ответ

1

Я подозреваю, что вам нужно, чтобы переместить draw = ImageDraw.Draw(base) линию в дополнение к линии, которая определяет base. Ваша текущая ошибка связана с тем, что эта линия не может видеть base, и, похоже, это значит, что вы все равно манипулируете данными изображения, поэтому это имеет смысл.

Попробуйте это:

font = ImageFont.truetype("arial.ttf", 50) 

def criacao(nome): 
    base = Image.open("generico/Certificado.png")  # move this line from above 
    draw = ImageDraw.Draw(base)      # this one too 

    nome_arquivo = str(datetime.date.today()) + " " + nome[0].upper() + nome[1:len(nome)].lower() + " " + curso 
    draw.text((750,1065), nome.upper(), font=font, fill=(0,0,0,0)) 
    draw.text((750,1414), curso.upper(), font=font, fill=(0,0,0,0)) 
    draw.text((1220,1625), inicio, font=font, fill=(0,0,0,0)) 
    draw.text((1500,1625), fim, font=font, fill=(0,0,0,0)) 
    draw.text((1540,1750), horas + ".", font=font, fill=(0,0,0,0)) 
    draw.text((1740,2130), str(datetime.date.today()), font=font, fill=(0,0,0,0)) 
    draw.text((1550,2680), professor, font=font, fill=(0,0,0,0)) 
    base.save("Criado/" + nome_arquivo + ".png") 
+0

Спасибо много! –

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