June 16, 2007 by alex
Im ersten Teil habe ich gezeigt, wie man mit file_column in Rails automatisch andere Bilder zu einem Bild hinzufügt, um z.B. Rahmen oder Hintergründe hinzuzufügen.
In diesem Teil geht es darum, auch Text in ein Bild schreiben zu können: Hierbei ergeben sich zwei Probleme. Zum einen muss der Text vom Model in die file_column-Klassen gelangen, zum anderen muss er dort via RMagick in das Bild gerendert werden. Das Ergebnis könnte dann z.B. so aussehen (autoki-Quartettkarte):
Fangen wir von hinten an, RMagick.
Die Beschreibung des Texts im Model soll folgendermaßen aussehen:
Hierbei soll an die Koordinaten 10/241 der text hello world in der Schriftgröße 9 und in Dunkelgrau gerendert werden.
Um den Text in unser Bild rendern zu können, erweitern wir wieder die transform_image
-Methode in der Datei magick_file_column.rb des file_column-Plugins:
Das war’s eigentlich auch schon - jetzt haben wir ein hello world in unserem Bild. Teil 2…
Neben statischem text wollen wir auch dynamische Inhalte in unsere Bilder rendern. Wie auf der Autokarte oben zu sehen, rendern wir hier den Namen und die Leistungsdaten des Autos, die bei autoki aus der Datenbank kommen.
Leider gibt es dabei ein kleines Problem: Die Definition der file_column-Bildgrößen hängen nicht an der Model-Instanz, sondern an der Model-Klasse, d.h. an der Stelle, an der wir die Texte definieren, stehen die Daten aus der Datenbank noch gar nicht zur Verfügung. Folgendes funktioniert also nicht.
Stattdessen müssen wir einen kleinen Umweg gehen, wir verwenden Procs, die erst zur Laufzeit der Anwendung den Text generieren:
Damit das ganze funktioniert, muss file_column noch etwas erweitert werden. Zum einen muss die add_text
-Methode die Procs aufrufen:
Zum anderen muss die Model-Instanz file_column zur Verfügung gestellt werden. Dazu erweitern wir die Methoden transform_with_magick
und create_magick_version_if_needed
um eine Parameter object
Zuletzt muss noch der Aufruf von create_magick_version_if_needed
in der Methode url_for_image_column
in der Datei file_column_helper.rb angepasst werden:
Das war’s. Wenn ich nichts vergessen habe, gibt’s jetzt dynamische Textinhalte in Bildern mit file_column. In einem nächsten Teil dann: Bilderkompression, Amazon S3 Backups.
Wie sehen uns beim Autoquartett.
P.S. Am 5.7. werde ich das ganze bei der Berlin Ruby User Group noch einmal live zeigen, kommt vorbei.
P.P.S. ich schreibe das hier gerade mit der neuen Beta von Safari 3. Vom User vergrößerbare Textareas - Gold wert mit Wordpress.