2011-02-22 5 views
0

Je programme en python 3.1 et en utilisant un PIL qui est mis à jour pour aswel. Maintenant c'est pour que mon programme obtienne des informations d'une page Web et je veux que cette information soit dessinée à une image que j'ai déjà, ainsi j'utilise une variable pour ceci & c'est aussi la partie que j'ai besoin d'aide. Ce que je lien est une partie de mon programme (car il est plus de 100 lignes je suis juste montrant les parties que je trouvais realative à la question)Est-il possible d'utiliser des variables en PIL (python)?

import webbrowser 
import random 
import urllib.request, urllib.parse, urllib.error 
import re 
import PIL 
from PIL import Image, ImageFont, ImageDraw 

arial16 = ImageFont.truetype ("arial.ttf", 16) 

Z = (input ("What is the character name? ")) 

#The link which i get from my input info.. 
url = "http://"+X+".battle.net/wow/en/character/"+Y+"/"+Z+"/simple" 

# Read the webpage 
html = urllib.request.urlopen(url).read() 

# Encoding 
encoding = "utf-8" 
html =html.decode (encoding) 

# Find right class & choose background from it 
cl = re.findall ('class="class">(.*)</a><span class="comma">,</span>', html) 

if "Death Knight" : im = Image.open ("DeathKnightBackground.png") 
elif "Druid" : im = Image.open ("DruidBackground.png") 
elif "Hunter" : im = Image.open ("HunterBackground.png") 
elif "Mage" : im = Image.open ("MageBackground.png") 
elif "Paladin" : im = Image.open ("PaladinBackground.png") 
elif "Priest" : im = Image.open ("PriestBackground.png") 
elif "Rogue" : im = Image.open ("RogueBackground.png") 
elif "Shaman" : im = Image.open ("ShamanBackground.png") 
elif "Warlock" : im = Image.open ("WarlockBackground.png") 
elif "Warrior" : im = Image.open ("WarriorBackground.png") 

# Find the Title 
title = re.findall('<div class="title">(.*)</div>', html) 

# If i want to print this i just do 
print (("Your Charactername with it's title:")+Z, title) 
print (("You are:"),cl) 

# Then i want to use a variable to save my picture 
S = input("Please enter a name to save your forumsignature: ") 

# When i want to draw the text to the picture i tried to use (+Z, title) as in the print 
# function - but since this didn't work i will just go with ((+Z, title)) which don't give me 
# syntax error 

draw = ImageDraw.Draw (im) 
draw.text ((20,20), ((+ Z, title)), font=arial16, fill="white") 

# As i said before, i'm using variable S for saving and tried this way.. but in all the ways i 
# have tried, i always keep getting syntax errors 

im.save ((+S)) 

im.show ((+S)) 

ne donc que quelqu'un sait si PIL sont capables de travailler avec des variables dans ce genre de manière? ou connaissez-vous un autre moyen de dessiner du texte à partir de variables à une image avec python 3.1?

Très bonne humeur pour les réponses et je vais continuer à essayer de tester toutes sortes de façons différentes que je sais que cela fonctionne & après ici si je reçois quelque chose à travailler ...

// ZABS

+1

Votre 'if' déclarations ne vont pas faire beaucoup depuis la chaîne « Chevalier de la mort » sera toujours à évaluer'on'. Vous pouvez vouloir: 'si" Chevalier de la mort "en cl:' – Paul

+1

De quelle façon vous demandez-vous si vous pouvez utiliser des variables? – joshcartme

+0

Deviner n'est pas un bon moyen de faire de la programmation. Vous avez fait des suppositions sur la façon d'utiliser l'instruction 'if' et sur l'utilisation des variables. C'est mieux si vous avez commencé avec un manuel Python qui explique ces choses en détail. -> http://diveintopython3.org/ Lorsque vous apprendrez Python, il serait clair comment faire les choses qui vous dérangent. En outre, en utilisant des expressions régulières pour extraire des informations du HTML, vous "devinez" la structure. Vous devriez utiliser 'lxml.html' à la place. –

Répondre

0

C'est une erreur de syntaxe. Ajouter plus de parenthèses crée une nouvelle structure de données. Essayez:

text = Z + " " + title 
draw.text ((20,20), text, font=arial16, fill="white") 

et pour votre commande save:

im.save(S) 
im.show(S)