Seite 1 von 2

Re: imread und figsave - Probleme mit der Auflösung

Verfasst: Dienstag 26. August 2014, 08:47
von BlackJack
@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.

Re: imread und figsave - Probleme mit der Auflösung

Verfasst: Dienstag 26. August 2014, 08:54
von Pittan
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ß

Re: imread und figsave - Probleme mit der Auflösung

Verfasst: Dienstag 26. August 2014, 09:05
von BlackJack
@Pittan: Nein, diese Methode funktioniert dann nur mit literalen Zeichenketten. :twisted:

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.

Re: imread und figsave - Probleme mit der Auflösung

Verfasst: Dienstag 26. August 2014, 10:30
von Pittan
BlackJack hat geschrieben:@Pittan: Nein, diese Methode funktioniert dann nur mit literalen Zeichenketten. :twisted:

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.
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.

Re: imread und figsave - Probleme mit der Auflösung

Verfasst: Dienstag 26. August 2014, 10:36
von Leonidas
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.

Re: imread und figsave - Probleme mit der Auflösung

Verfasst: Dienstag 26. August 2014, 10:37
von Leonidas
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.
Dann mach es per Hand und vergleiche den Aufwand. :roll:

Re: imread und figsave - Probleme mit der Auflösung

Verfasst: Dienstag 26. August 2014, 10:38
von Pittan
Und dann habe ich immer noch das Problem, dass ich keine Variablen in PIL auf das Bild pinseln kann...

Re: imread und figsave - Probleme mit der Auflösung

Verfasst: Dienstag 26. August 2014, 10:52
von BlackJack
@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. :roll:

Re: imread und figsave - Probleme mit der Auflösung

Verfasst: Dienstag 26. August 2014, 11:01
von /me
Pittan hat geschrieben:Und dann habe ich immer noch das Problem, dass ich keine Variablen in PIL auf das Bild pinseln kann...
Doch, das kannst du natürlich. Die folgenden beiden Codebeispiele führen zum gleichen Ergebnis.

Code: Alles auswählen

function('ABCdef')

Code: Alles auswählen

value = 'ABCdef'
function(value)

Re: imread und figsave - Probleme mit der Auflösung

Verfasst: Dienstag 26. August 2014, 12:17
von Pittan
BlackJack hat geschrieben:
Bezüglich der Variablen: Lies meinen Beitrag noch mal. Vielleicht mit eingeschaltetem Ironiedetektor. :roll:
Sorry - ich verstehe es einfach nicht.

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?

Re: imread und figsave - Probleme mit der Auflösung

Verfasst: Dienstag 26. August 2014, 12:44
von BlackJack
@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.

Re: imread und figsave - Probleme mit der Auflösung

Verfasst: Dienstag 26. August 2014, 14:23
von Pittan
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

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
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ß

Re: imread und figsave - Probleme mit der Auflösung

Verfasst: Dienstag 26. August 2014, 14:58
von Sirius3
@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)

Re: imread und figsave - Probleme mit der Auflösung

Verfasst: Dienstag 26. August 2014, 15:30
von Pittan
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ß