imread und figsave - Probleme mit der Auflösung

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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:
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Pittan
User
Beiträge: 34
Registriert: Freitag 1. August 2014, 15:56

Und dann habe ich immer noch das Problem, dass ich keine Variablen in PIL auf das Bild pinseln kann...
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:
Benutzeravatar
/me
User
Beiträge: 3561
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

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)
Pittan
User
Beiträge: 34
Registriert: Freitag 1. August 2014, 15:56

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?
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.
Pittan
User
Beiträge: 34
Registriert: Freitag 1. August 2014, 15:56

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ß
Sirius3
User
Beiträge: 18260
Registriert: Sonntag 21. Oktober 2012, 17:20

@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)
Pittan
User
Beiträge: 34
Registriert: Freitag 1. August 2014, 15:56

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