@Pittan: `show()` schreibt das Bild in eine temporäre Datei und verwendet ein externes Programm zum anzeigen. Anscheinend gibt es dabei Probleme. Die Methode ist laut Pillow-Dokumentation (Image.show()) auch hauptsächlich zur Fehlersuche gedacht, also weniger um in einem Programm tatsächlich die Bilder anzuzeigen.
Das gleiche kann Dir auch mit den vom Institut vorgegebenen Werkzeugen passieren, das etwas auf Deinem Rechner läuft und im Institut wegen unterschiedlicher Versionen, Einstellungen, oder anderer Rahmenbedingungen nicht. Oder umgekehrt.
imread und figsave - Probleme mit der Auflösung
Hi Blackjack,
danke für den Hinweis.
Das Programm, dass ich schreibe, soll aber bei Ausführung genau die Bilder anzeigen. Daher verwende ich img.show()
Ein anderes Problem: ImageDraw.text verlangt als übergabe einen String, der auf dem Bild gezeigt wird.
Ich will aber keinen String übergeben, sondern die Variablen, deren Inhalt gezeigt werden soll.
Leider finde ich dazu keinen Hinweis. Funktioniert das überhaupt mit ImageDraw.text?
Danke
Gruß
danke für den Hinweis.
Das Programm, dass ich schreibe, soll aber bei Ausführung genau die Bilder anzeigen. Daher verwende ich img.show()
Ein anderes Problem: ImageDraw.text verlangt als übergabe einen String, der auf dem Bild gezeigt wird.
Ich will aber keinen String übergeben, sondern die Variablen, deren Inhalt gezeigt werden soll.
Leider finde ich dazu keinen Hinweis. Funktioniert das überhaupt mit ImageDraw.text?
Danke
Gruß
@Pittan: Nein, diese Methode funktioniert dann nur mit literalen Zeichenketten.
Wenn da Zeichenkette in der Dokumentation steht, dann ist natürlich jeder Ausdruck gemeint der zu einer Zeichenkette ausgewertet wird und nicht nur literale Zeichenketten. Das ist ja in etwa so als würdest Du fragen ob man mit `math.sin()` nur den Sinus von Gleitkommaliteralen berechnen kann, und nicht auch von ”Variablen” oder gar Rechenoperationen. Eine Funktion hat doch auch überhaupt gar keine direkt vorgesehene Möglichkeit überhaupt heraus zu finden wie ein Argumentwert zustande gekommen ist. Das geht die Funktion auch überhaupt nichts an.
Edit: Kleine Suche („PIL Image show() windows file not found”) ergibt übrigens dass das unter Windows Vista/Windows 7 ein grundsätzliches Problem mit PIL zu sein scheint. Ich würde als erstes prüfen ob Pillow das Problem auch hat, denn das wird ja aktiv weiter entwickelt.
Wenn da Zeichenkette in der Dokumentation steht, dann ist natürlich jeder Ausdruck gemeint der zu einer Zeichenkette ausgewertet wird und nicht nur literale Zeichenketten. Das ist ja in etwa so als würdest Du fragen ob man mit `math.sin()` nur den Sinus von Gleitkommaliteralen berechnen kann, und nicht auch von ”Variablen” oder gar Rechenoperationen. Eine Funktion hat doch auch überhaupt gar keine direkt vorgesehene Möglichkeit überhaupt heraus zu finden wie ein Argumentwert zustande gekommen ist. Das geht die Funktion auch überhaupt nichts an.
Edit: Kleine Suche („PIL Image show() windows file not found”) ergibt übrigens dass das unter Windows Vista/Windows 7 ein grundsätzliches Problem mit PIL zu sein scheint. Ich würde als erstes prüfen ob Pillow das Problem auch hat, denn das wird ja aktiv weiter entwickelt.
Genau das habe ich gemeint! Nun habe ich 1 1/2 Tage Arbeitszeit verschwendet für eine S* die mir am Ende gar nichts gebracht hat.BlackJack hat geschrieben:@Pittan: Nein, diese Methode funktioniert dann nur mit literalen Zeichenketten.
Wenn da Zeichenkette in der Dokumentation steht, dann ist natürlich jeder Ausdruck gemeint der zu einer Zeichenkette ausgewertet wird und nicht nur literale Zeichenketten. Das ist ja in etwa so als würdest Du fragen ob man mit `math.sin()` nur den Sinus von Gleitkommaliteralen berechnen kann, und nicht auch von ”Variablen” oder gar Rechenoperationen. Eine Funktion hat doch auch überhaupt gar keine direkt vorgesehene Möglichkeit überhaupt heraus zu finden wie ein Argumentwert zustande gekommen ist. Das geht die Funktion auch überhaupt nichts an.
Edit: Kleine Suche („PIL Image show() windows file not found”) ergibt übrigens dass das unter Windows Vista/Windows 7 ein grundsätzliches Problem mit PIL zu sein scheint. Ich würde als erstes prüfen ob Pillow das Problem auch hat, denn das wird ja aktiv weiter entwickelt.
Und der Inhalt meiner Arbeit ist es nicht, möglichst elegant und schön zu programmieren und wahnsinnig tolle Bildchen zu erzeugen - sondern wissenschaftliche, energietechnische Erkentnisse zu produzieren.
Dementsprechend habe ich wenig Lust unmengen an Energie zu verschwenden dieses kac* PIL, PILLOW, Inkscape oder sonstwas fuer einen Mist zu lernen.
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Du kannst es doch einfach selbst in eine temporäre Datei schreiben und dann nen Bildbetrachter ausführen, sehe jetzt nicht so das große Problem.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Dann mach es per Hand und vergleiche den Aufwand.Pittan hat geschrieben:Dementsprechend habe ich wenig Lust unmengen an Energie zu verschwenden dieses kac* PIL, PILLOW, Inkscape oder sonstwas fuer einen Mist zu lernen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
@Pittan: Okay, das mit den Bildchen ist Dir nicht sooo wichtig, aber wenn wir uns mal erinnern sind wir an diesem Punkt angelangt weil Dir mit `matplotlib` der Rand ein bisschen zu gross war. Ernsthaft!?
Hier geht es IMHO auch nicht um möglichst schön, und auch gar nicht über den Programmierstil selbst, sondern das Pixelgrafik für diese Aufgabe eine sehr hässliche Lösung ist. Das hat etwas von Alufolie statt einer Sicherung zu verwenden oder eine Schraube mit einem Hammer einzuschlagen. Klar kann man machen… Funktioniert auch.
Irgendwelchen ”Mist” musst Du ja lernen, ansonsten kannst Du es auch einfach manuell mit MS Paint machen. Wenn Du es aber per selbstgeschriebenem Programm machen möchtest, dann musst Du Dich in irgend etwas einarbeiten. Zum einfachen Bearbeiten von Pixelgrafik ist PIL/Pillow das wohl am meisten verbreitete Python-Package. Es ist weniger umfangreich und hat eine einfachere API als `matplotlib` würde ich jetzt mal behaupten.
Bezüglich der Variablen: Lies meinen Beitrag noch mal. Vielleicht mit eingeschaltetem Ironiedetektor.
Hier geht es IMHO auch nicht um möglichst schön, und auch gar nicht über den Programmierstil selbst, sondern das Pixelgrafik für diese Aufgabe eine sehr hässliche Lösung ist. Das hat etwas von Alufolie statt einer Sicherung zu verwenden oder eine Schraube mit einem Hammer einzuschlagen. Klar kann man machen… Funktioniert auch.
Irgendwelchen ”Mist” musst Du ja lernen, ansonsten kannst Du es auch einfach manuell mit MS Paint machen. Wenn Du es aber per selbstgeschriebenem Programm machen möchtest, dann musst Du Dich in irgend etwas einarbeiten. Zum einfachen Bearbeiten von Pixelgrafik ist PIL/Pillow das wohl am meisten verbreitete Python-Package. Es ist weniger umfangreich und hat eine einfachere API als `matplotlib` würde ich jetzt mal behaupten.
Bezüglich der Variablen: Lies meinen Beitrag noch mal. Vielleicht mit eingeschaltetem Ironiedetektor.
Doch, das kannst du natürlich. Die folgenden beiden Codebeispiele führen zum gleichen Ergebnis.Pittan hat geschrieben:Und dann habe ich immer noch das Problem, dass ich keine Variablen in PIL auf das Bild pinseln kann...
Code: Alles auswählen
function('ABCdef')
Code: Alles auswählen
value = 'ABCdef'
function(value)
Sorry - ich verstehe es einfach nicht.BlackJack hat geschrieben:
Bezüglich der Variablen: Lies meinen Beitrag noch mal. Vielleicht mit eingeschaltetem Ironiedetektor.
Wie soll es jetzt möglich sein, den Inhalt einer Variablen mittels PIL auf eine Grafik zu pinseln?
Kann man nun dazu ImageDraw.text verwenden oder nicht?
@Pittan: Natürlich ist das möglich. Wieso sollte das nicht möglich sein? Wie dämlich wäre denn eine API mit der man nur literale Zeichenketten verwenden kann? Die Vorstellung ist absurd. Zumal Python einer Funktionsimplementation ja gar nicht die Möglichkeit gibt, herauszufinden wie ein übergebenes Argument mal zustande gekommen ist. Da müsste man schon auf „deep magic” zurückgreifen. Und selbst dann wüsste ich nicht *warum* man so etwas tun sollte und noch weniger warum man eine API derartig einschränken wollen würde.
Hallo Blackjack,
ich gebe dir recht, die Frage ob das möglich ist, ist hinfällig. Meine nun mittlerweile 2-Monatige Python-Expertise (und vorher habe ich noch nie programmiert) zeigt mir, dass prinzipiell alles möglich ist.
Die Frage ist nur, wie das möglich ist
In der Variable TWW.q_TW ist der Wert gespeichert, den ich auf meinem Bild stehen haben möchte.
Folgende Fehlermeldung:
Fehlt also ein string?! Wie soll ich also weiter machen?
Danke schonmal im voraus.
google hat mir bislang auch nicht weitergeholfen. Wahrscheinlich suche ich nach den falschen Sachen.
Gruß
ich gebe dir recht, die Frage ob das möglich ist, ist hinfällig. Meine nun mittlerweile 2-Monatige Python-Expertise (und vorher habe ich noch nie programmiert) zeigt mir, dass prinzipiell alles möglich ist.
Die Frage ist nur, wie das möglich ist
Code: Alles auswählen
import Trinkwassererwaermung as TWW
from PIL import Image
from PIL import ImageDraw
from PIL import ImageFont
####### DARTSTELLUNG TRINKWARMWASSER##########
img=Image.open("Trinkwassererwaermung.png")
draw=ImageDraw.Draw(img)
font=ImageFont.truetype(font="ARIALUNI.TTF", size=11, index=0)
draw.text((655, 255), TWW.q_TW, (0,0,0), font=font)
In der Variable TWW.q_TW ist der Wert gespeichert, den ich auf meinem Bild stehen haben möchte.
Folgende Fehlermeldung:
Code: Alles auswählen
Traceback (most recent call last):
File "C:\Users\pittan\workspace\Norm\DIN4701\img.py", line 11, in <module>
draw.text((655, 255), TWW.q_TW, (0,0,0), font=font)
File "C:\Python27\lib\site-packages\PIL\ImageDraw.py", line 266, in text
mask, offset = font.getmask2(text, self.fontmode)
File "C:\Python27\lib\site-packages\PIL\ImageFont.py", line 152, in getmask2
size, offset = self.font.getsize(text)
TypeError: expected string
Danke schonmal im voraus.
google hat mir bislang auch nicht weitergeholfen. Wahrscheinlich suche ich nach den falschen Sachen.
Gruß
@Pittan: das Stichwort ist String-Formatierung und sollte in jedem Anfängertutorial ziemlich am Anfang vorkommen. Je nachdem wie Du die Ausgabe wünschst, mußt Du die Zahl in einen String umwandeln. Z.B:
Code: Alles auswählen
draw.text((655, 255), '{0:.3f}'.format(TWW.q_TW), (0,0,0), font=font)
Hallo,
vielen Dank, das hat mir wirklich sehr sehr weiter geholfen!
EDIT:
ich weiß, ich habe mich hier in diesem Forum bislang nicht mit Ruhm bekleckert - daher ziehe ich die letzte Frage zurück.
Trotzdem allen vielen Dank!
Danke
Gruß
vielen Dank, das hat mir wirklich sehr sehr weiter geholfen!
EDIT:
ich weiß, ich habe mich hier in diesem Forum bislang nicht mit Ruhm bekleckert - daher ziehe ich die letzte Frage zurück.
Trotzdem allen vielen Dank!
Danke
Gruß