Bild-im-Bild und Text-im-Bild mit Rails, file_column und RMagick
Update: Teil 2 ist fertig.
Gerade haben wir bei autoki Badges eingeführt - kleine Banner, die sich auf Blogs, Foren etc. einbinden lassen, und auf denen neben dem jeweiligen Auto des Mitglieds die URL zu seinem oder ihrem Profil zu sehen ist:
Im folgenden Posting werde ich erklären, wie wir das ganze umgesetzt haben. Ziel war es, einfach einzubindende Grafiken zu generieren. Eine Alternative wäre Flash gewesen, jedoch lässt sich Flash an vielen Stellen (vor allem als Signatur in Foren) nicht einbinden.
Wir brauchten also eine Lösung, die uns für jedes Auto mehrere Banner mit jeweils einem Foto und Text darauf automatisch erstellt. Für die Skalierung der Bilder benutzen wir das file_column-Plugin für Rails, das auf RMagick , den Ruby-Bindings für ImageMagick, aufsetzt,. Damit lassen sich sehr einfach skalierte und beschnittene Versionen einer Grafik erzeugen, indem man in einem Rails-Model, nennen wir es mal Auto, ein Attribut als file_column-Attribute markiert:
Um die verschiedenen Bildgrößen zu erzeugen, genügt es, mittels :version die gewünschten Größen anzugeben:
Dieser Code erzeugt zwei Versionen: :large passt unter Beibehaltung der Seitenverhältnisse in einen Rahmen von 480×480 Pixeln, :thumb hat eine Breite von 238 Pixeln und eine daran angepaste Höhe.
Alles ganz schön und nett, aber um damit Banner zu produzieren, kommen wir nicht umhin, file_column ein wenig zu hacken erweitern. Unser Problem lässt sich in 3 Schritte aufteilen:
- das Autobild herunterskalieren, so dass es auf den Banner passt,
- das verkleinerte Bild in ein Banner-Template-Bild kopieren,
- die URL des Autoprofils in das Bild schreiben
Schritt eins können wir bereits lösen:
Mit Hilfe von :crop wird das Bild zusätzlich beschnitten, damit es garantiert 52×46 Pixel groß ist.
Um nun das Bild in das Banner-Template zu platzieren, verwenden wir folgende Syntax:
Soll heißen: Das Autobild wird an der Stelle 3/2 in das Bild badge_1.gif kopiert. Wie schon erwähnt, funktioniert das so erstmal nicht. Nachdem wir die Methode transform_image in der Datei magick_file_column.rb des file_column-Plugins folgendermaßen angepasst haben, aber schon:
Diese Modifikation setzt voraus, dass unser Banner-Template badge_1.gif in public/composites/liegt. Mittels der RMagick-composite-Methode wird das Auto mit zwei Zeilen Code in den Banner kopiert.
Sieht doch schonmal ganz nett aus oder? Und wie das mit dem Text funktioniert, erkläre ich im nächten Post
Das ist nämlich etwas komplizierter….
Tags: autoki, badge, banner, caption, composite, file_column, rails, rmagick, ruby, text, widget

June 13th, 2007 at 3:08 pm
Hab ich was übersehen, oder steht der zweite Teil noch aus?
June 13th, 2007 at 3:26 pm
ähm, ja, der steht noch aus. kommt demnächst. oder einfach mal am 5.7. bei der ruby user group berlin vorbeischauen, da erzähl ich das dann nochmal live. die slides wird es dann auch hier geben.
wenn du eine spezifische frage hast, kann ich sie aber vielleicht auch einfach gleich beantworten.
June 13th, 2007 at 3:39 pm
Leider ist Berlin nicht gerade der nächste Weg aus der heimlichen Hauptstadt…:-)
Nö, keine spezifische Frage, hätte mich nur mal interessiert.
June 13th, 2007 at 3:46 pm
okay, dann stay tuned - spaetestens am wochenende, versprochen.
June 16th, 2007 at 2:32 pm
[...] ersten Teil habe ich gezeigt, wie man mit file_column in Rails automatisch andere Bilder zu einem Bild [...]