Text in PNG Datei

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.
BasterTWO
User
Beiträge: 75
Registriert: Donnerstag 25. Oktober 2007, 20:03

Hallo Pythonfreunde,
ich würde gerne ein PNG Bild mit zusätzlichen Text versehen. Dazu habe ich mir folgenden Code zusammen gebastelt.

Code: Alles auswählen

username = 'Jarus'
server = 'Teamspeak Lab'

im = Image.open("/home/ts2/ts2-teamspeaklab/files/usersignatur-afk.png")
draw = ImageDraw.Draw(im)
font = ImageFont.truetype("/home/ts2/ts2-teamspeaklab/files/visitor1.ttf", 10)
draw.text((82, 0), username, font=font)
draw.text((82, 10), server, font=font)
im.save('/home/ts2/ts2-teamspeaklab/files/usersignatur-afk-test.png')
Leider bekomme ich beim zweiten draw.text(...) einen Fehler:
Traceback (most recent call last):
File "mysql2usersignatur.py", line 41, in <module>
draw.text((82, 10), server, font=font)
File "/usr/lib/python2.5/site-packages/PIL/ImageDraw.py", line 263, in text
mask, offset = font.getmask2(text, self.fontmode)
File "/usr/lib/python2.5/site-packages/PIL/ImageFont.py", line 138, in getmask2
self.font.render(text, im.id, mode=="1")
IOError: invalid argument
Wie kann ich nun mehrer Texte/Variable in das PNG Bild einfügen.

Viele Grüße
BasterTWO
rafael
User
Beiträge: 189
Registriert: Mittwoch 26. Juli 2006, 16:13

Du musst dafür das Bild mit `ImageDraw.open()` öffnen. Siehe Doku.
BasterTWO
User
Beiträge: 75
Registriert: Donnerstag 25. Oktober 2007, 20:03

Also bei mir gibt es diese Funktion nicht mehr !!!

Viele Grüße
BasterTWO
rafael
User
Beiträge: 189
Registriert: Mittwoch 26. Juli 2006, 16:13

BasterTWO hat geschrieben:Also bei mir gibt es diese Funktion nicht mehr !!!
Dafür musst du ja auch zuerst das Modul `ImageDraw` mit "import ImageDraw" importieren und eine Schrift mithilfe des Modules `ImageFont` erstellen.
Schau dir einfach das Beispiel in der Doku an.
BasterTWO
User
Beiträge: 75
Registriert: Donnerstag 25. Oktober 2007, 20:03

Ich habe die Module schon impotiert nur habe ich die import-Anweisungen weggelassen.

BasterTWO
BasterTWO
User
Beiträge: 75
Registriert: Donnerstag 25. Oktober 2007, 20:03

Kann mir wirklich keiner weiter helfen.

Viele Grüße
BasterTWO
Tayce
User
Beiträge: 56
Registriert: Sonntag 22. April 2007, 18:26
Wohnort: München
Kontaktdaten:

was funktioniert denn noch nicht?

zeig doch mal bitte deinen kompletten code her (mit importanweißungen usw...)
Jabber: tayce@jaim.at
Tayce
User
Beiträge: 56
Registriert: Sonntag 22. April 2007, 18:26
Wohnort: München
Kontaktdaten:

Okay ich hab mir mal die Doku angeschaut und habs auch geschafft.
Hier mal der Code:

Code: Alles auswählen

#!/usr/bin/env python
import ImageDraw
import ImageFont
import Image
im = Image.open("test.png")
Draw = ImageDraw.Draw(im)
font = ImageFont.truetype("/usr/share/fonts/TTF/arial.ttf", 15)
Draw.text((10,10), "hello", font=font, fill="black") #fill="black" für eine schwarze schrift. Standart ist Weiß
im.save("test.png")
Jabber: tayce@jaim.at
BasterTWO
User
Beiträge: 75
Registriert: Donnerstag 25. Oktober 2007, 20:03

Danke Taye das du mir noch zeigen konntest wie man die Farbe ändert (wäre meine negste Frage gewesen), aber ich habe es schon geschaft ja Text zu schrieben leider nur einmal. Ich würde aber gerne mehrer Texte rein schreiben.

Viele Grüße
BasterTWO
BlackJack

Nur mal so ins Blaue: Macht es einen Unterschied ob Leerzeichen im Text sind? Ich glaube da gab's mal ein Problem mit der `libfreetype`.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Hallo!

So etwas kann wxPython auch. 8)

Code: Alles auswählen

import wx

app = wx.PySimpleApp()

my_bitmap = wx.Bitmap("wolken.png")

dc = wx.MemoryDC(my_bitmap)
gc = wx.GraphicsContext_Create(dc)

font = wx.Font(
    12, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL, face = "Arial"
)
gc.SetFont(font)

gc.DrawText("Hallo", 10, 10)
gc.DrawText("Welt", 10, 30)

dc.SelectObject(wx.NullBitmap)
my_bitmap.SaveFile("wolken_new.png", wx.BITMAP_TYPE_PNG)
lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
BasterTWO
User
Beiträge: 75
Registriert: Donnerstag 25. Oktober 2007, 20:03

Das ist ja mal der Hammer das ganze ging nur wegen einem Leerzeichen nicht. :D

Leider bin ich darauf angewiesen Leerzeichen verarbeiten zu können. Kann man das irgendwie hinbekommen ???

@gerold: Ich würde gerne lieber PIL benutzen.

Viele Grüße
BasterTWO
Tayce
User
Beiträge: 56
Registriert: Sonntag 22. April 2007, 18:26
Wohnort: München
Kontaktdaten:

also bei mir gehts auch mit leerzeichen... vlt hast du ne alte version von pil?
Jabber: tayce@jaim.at
BasterTWO
User
Beiträge: 75
Registriert: Donnerstag 25. Oktober 2007, 20:03

Also ich habe meine von http://www.pythonware.com/products/pil/. Davon die Version 1.1.6 als Source für Debian.

Welche Version verwendest du oder meinst du die Version von dieser FreeFont Lib, da habe ich die von denn Debian Paketen.

Viele Grüße
BasterTWO
Tayce
User
Beiträge: 56
Registriert: Sonntag 22. April 2007, 18:26
Wohnort: München
Kontaktdaten:

Pil Version = 1.1.6-2 (-2 fuer 2 aenderungen von archlinux)
freetype2 Version = 2.3.5-1
Jabber: tayce@jaim.at
BasterTWO
User
Beiträge: 75
Registriert: Donnerstag 25. Oktober 2007, 20:03

Ok da haben wir den Fehler ich habe:

freetype2 Version = 2.2.1-5

Kann irgendwo das Paktet mir einer neueren Version downloaden oder wo gibt es den Source.

Viele Grüße
BasterTWO
lunar

BasterTWO hat geschrieben:Kann irgendwo das Paktet mir einer neueren Version downloaden
Eventuell mal die Debian Backports durchstöbern...
oder wo gibt es den Source.
http://www.google.de
BasterTWO
User
Beiträge: 75
Registriert: Donnerstag 25. Oktober 2007, 20:03

Tach,
könnte mir jemand erklären wie ich ambesten die libfreetyps packete aus dem testing installiere, da ich mir letztes mal mein System zerschossen habe.

Viele Grüße
BasterTWO
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Du hast Debian stable und willst Pakete aus testing installieren? Wenn ja, dann hast du wohl alle Warnungen großzügig übersehen, hmm? Denn das ist nicht so möglich und Testing mit Stable zu mischen ist keine gute Idee.

Daher: Entweder Testing nutzen oder Backports, etwa von backports.org. Wenn es dort keine gibt, dann kannst du deine eigenen Backports basteln, jedoch muss ich dich warnen - einen Backport zu bauen, der nicht alles kaputt macht ist gar nicht so einfach. Man muss auf jeden Fall den Debian Maint-Guide gelesen haben und die Anweisungen von backports.org befolgen. Und auch dann kann der Backport nicht funktionieren, weil er eine andere API hat und andere Programme in deiner Distribution nicht mehr funktionieren.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
BasterTWO
User
Beiträge: 75
Registriert: Donnerstag 25. Oktober 2007, 20:03

Hallo,
ich habe noch eine abschliesende Frage, wie kann man die Schriftfarbe auf Weiß ändern ???

PS: Mein Server Anbieter hat mir die neue Version installiert.

Viele Grüße
BasterTWO
Antworten