Wie können Sie dynamisch verschiedene Muster auf Bilder in einer Webseite setzen?

7

ich habe

  1. Ein Haufen Stoffmuster (einfache jpg-Dateien)
  2. Ein Bild für jeden Buchstaben des Alphabets (weißer Hintergrund)

Ich möchte im Wesentlichen eine ähnliche Seite haben: Ссылка

Aber anstatt es als statische Seite zu haben, möchte ich, dass ein Benutzer in der Lage ist:

  1. Geben Sie einen Namen ein
  2. Wählen Sie ein Muster (eine der jpg-Dateien)

und dann wird der Name in diesem Muster angezeigt.

Offensichtlich könnte ich separate JPGs für jede Kombination von Buchstaben erstellen (momentan habe ich ein JPG für jeden Buchstaben mit weißer Hintergrundfarbe) und Muster, aber ich wollte herausfinden, ob es eine elegantere Art der Codierung gab es fügt dynamisch ein Bild auf den Buchstaben in der anderen Seite.

BEARBEITEN: In meinem ersten Post ging ich davon aus, dass dies ein Frontend-Ding (Javascript) sein müsste, aber wenn es das einfacher macht (wie einige Leute gefragt haben was?) ist das Backend), mein Backend ist ein asp.net-mvc. Wenn es also eine Lösung gibt, diese auf der Serverseite aufzubauen und zum Client zu schicken, bin ich mehr als glücklich, das auch zu benutzen.

    
leora 04.11.2009, 06:22
quelle

9 Antworten

15

Sie können Hintergrundbilder mithilfe von CSS auf Bilder anwenden und dann eine Ladung transparenter PNG-Bilder für die Buchstaben verwenden.

Ich habe es verspottet:

%Vor%

und Sie können es in Aktion sehen .

alt text http://www.dumension.co.uk/files/1/SO /A.png & lt; Dies ist einer der Buchstabenausschnitte (schwer zu sehen!)

alt text http://www.dumension.de/files/1/SO /leaves.png und eines der Hintergrundmuster.

Ich habe mich bei G gelangweilt, also kann man nur Wörter schreiben, die die Buchstaben enthalten, es ist auch ein bisschen faul, da es nur Großbuchstaben und nur zwei Muster gibt, aber hoffentlich sollte es genug sein, um dir eine Idee zu geben

    
MalphasWats 10.11.2009, 16:13
quelle
11

Sie können die ImageMagick-Bibliotheken verwenden, um beliebige Kombinationen von Überlagerungen zu erstellen, die Sie und die Herzen Ihrer Benutzer wünschen. Auf diese Weise sind Sie nicht auf etwas Einfaches beschränkt, das mit CSS erreicht werden kann.

ImageMagick-Beispiele

    
Artem Russakovskii 04.11.2009 06:34
quelle
6

Der einfachste Weg, dies über Javascript zu tun, ist wahrscheinlich, eine Bildmaske für jeden Buchstaben zu haben und sie auf ein Muster anzuwenden. Mit Bildmaske meine ich ein einfaches Bild komplett schwarz (oder weiß, oder was auch immer Sie bevorzugen) mit einem "ausgeschnittenen" transparenten Teil in der Form des Buchstabens. Sie können dies einfach über die Musterdatei legen, um den gewünschten Effekt zu erhalten.

%Vor%

Sie können die img src und div background url dynamisch ändern, um Muster und Buchstaben zu wechseln. Sie können auch dynamisch divs basierend auf Benutzereingaben erstellen.

Beachten Sie, dass dies in IE6 aufgrund des transparenten PNG nicht einfach funktioniert.

Alternativ könnten Sie das Bild dynamisch auf dem Server generieren, indem Sie etwas wie gd verwenden, was ein bisschen aufwendiger, aber letztendlich flexibler ist.

    
deceze 04.11.2009 06:33
quelle
4

Damit Benutzer ihren eigenen Namen eingeben können, benötigen Sie ein Textfeld. Sie benötigen außerdem eine Schaltfläche, die eine JavaScript-Funktion auslöst, die den Wert des Textfelds überprüft und die Buchstabenbilder rendert.

Sie können den folgenden Code verwenden, um die Buchstaben zu erstellen. Sie benötigen ein Textfeld mit der ID 'textfield' und einem div, um die Ergebnisse mit der ID 'output' zu rendern, die Sie natürlich ändern können. Ich empfehle, ein select-Element zu verwenden, um die Musteroptionen zu speichern (#patternChooser in diesem Beispiel)

%Vor%

Sie können das folgende CSS verwenden, um eine bestimmte Positionierung auf die Buchstaben anzuwenden (passen Sie die Breite und Höhe der Bilder an):

%Vor%

Sie müssen Ihre Bilder wie folgt benennen: flowerpattern_a.png, brickpattern_j.png, etc.

Wenn Sie möchten, dass die Buchstaben in Echtzeit angezeigt werden, können Sie Javascript verwenden, um ein onkeyup () auszulösen Funktion, die das letzte Zeichen des Textfelds überprüft und ein Element dafür erstellt.

Sprites

Sie können auch ein Sprite verwenden, um die Leistung zu erhöhen. Legen Sie alle Bilder für die Buchstaben in ein Bild. Sie legen dieses Bild als Hintergrund für jeden Buchstaben fest. Schnelles Lesen von CSS-Sprites: Ссылка Sie können background-image: url(sprite.png); zum obigen CSS-Snippet hinzufügen. Anstatt nur ein backgroundImage mit Javascript zu setzen, müssen Sie die Hintergrundposition des Buchstabens ( letter.style.background-position = '100px 200px' )

festlegen

Schrifteinbettung

Wenn Sie Schriftarten verwenden müssen: Es gibt viele Schrifteinbettungsoptionen wie Schriftschnitt und Cufon . Am angenehmsten finde ich die Verwendung von font-face . Es ist schnell und der Text wird sich wie jeder andere Text verhalten.

Wenn Sie Ihre .TTF Truetype-Schriftart erhalten haben, müssen Sie die Schriftart für die Verwendung mit Internet Explorer in .EOT konvertieren. Sie können auch SVG-Fonts für die vollständige Browserabdeckung hinzufügen. Es ist eigentlich sehr einfach: Fügen Sie einfach das folgende Snippet oben auf Ihrem Stylesheet ein:

%Vor%

Der Vorteil dieser Technik ist, dass sie einfach zu bedienen ist und Sie wie jeder andere Text auf Ihrer Website die volle Kontrolle über den gerenderten Text haben. Sie können die Schriftgröße, den Buchstabenabstand usw. einstellen. Hier finden Sie eine gute Lektüre über font-face font Einbetten . Sie können Microsoft WEFT oder TTF2EOT , um .EOT-Schriftarten zu erstellen.

Zum Beispiel könnte Ihr Code so aussehen.

Javascript

%Vor%

HTML

%Vor%

CSS

%Vor%

Jetzt müssen Sie nur die Schriftarten konvertieren und in Ihr Stylesheet importieren.

Natürlich können Sie sich auch für eine andere Schrifteinbettungsmethode entscheiden. Hier finden Sie einen Artikel über Optionen zum Einbetten von Schriftarten , aber ein schneller Google wird es Ihnen zeigen die Optionen auch.

    
richard 09.11.2009 18:42
quelle
1

Wenn Sie etwas im Backend verwenden dürfen, hier ist eine Java-Lösung. Sie brauchen nur die Schriftart (name.ttf), mit der Sie die Buchstaben eingeben, aber ich nehme an, Sie haben es:

(dies ist in einer Servlet-doGet-Methode enthalten)

%Vor%     
Bozho 10.11.2009 08:40
quelle
1

Selbst auf dem Server ist dies kein triviales Problem, da es nicht möglich ist, eine direkte Fill () -Methode mit einer Farbmaske zu erstellen, was genau das ist, was Sie brauchen.

Ich würde eher die vorhandenen Pixel durchlaufen, einen Lookup durchführen und das Musterpixel in das resultierende Bild schreiben, wenn das Buchstabenbild nicht weiß ist:

%Vor%

Und dann finden Sie ein Benennungsschema, um diese auf der Festplatte nach der Erstellung zwischenzuspeichern, so dass Sie nur jedes Muster & lt; - & gt; Buchstabenkombination einmal rendern müssen.

    
Radu094 11.11.2009 08:57
quelle
1

GDI + funktioniert unter ASP.NET einwandfrei. (WPF verwendet, aber dann wurde mit einem Service Pack gebrochen. Nicht sicher, ob es jetzt wieder funktioniert).

Das Erstellen von Images serverseitig ist ziemlich einfach - der Trick besteht darin, sie mit clientseitigen Anforderungen zu verknüpfen. Ich habe eine Stack-Darstellung benutzt - mein Artikel hier:

Ссылка

    
stusmith 11.11.2009 09:03
quelle
1

Nachdem ich mit OO (dem Poster) bestätigt hatte, wollte ich Flash in den Mix werfen.

Flash hat den Vorteil, dass es wirklich schönes Anti-Aliasing und geniale Typografieunterstützung (besonders seit CS4) hat. Sie können wählen, ob Sie die gesamte Schnittstelle in Flash verwenden möchten, wo Sie die gemusterten Buchstaben direkt eingeben, oder ob swf das Ergebnis entsprechend den Parametern rendern soll, die den Namen und das Muster angeben.

Ich persönlich würde die ganze Sache in Flash machen und die Schnittstelle mit den optionalen Mustern mit zum Beispiel JSON versorgen. Aber die grundlegendsten Schritte, die Sie ergreifen könnten, sind

Erstellen Sie ein Formular mit der Eingabe für den Namen und einem Auswahlfeld für die Muster

Anzeige der Flash-Datei mit Parametern patterntype.swf? name = flash & amp; pattern = disco.png

Das Grundkonzept besteht darin, den Text als Maske für das Muster festzulegen. Ich habe einen schnellen Test im Flash gemacht, um die Leistung des Tilings des Musters zu testen (und ob es tatsächlich funktionieren würde)

%Vor%

Wenn alles nach den Wünschen des Benutzers ist, können Sie ein neues Bitmap-Objekt aus dem Ergebnis erstellen und die Daten an den Server senden, der die Daten direkt in eine Bitmap-Datei schreiben kann (jpeg ist auch möglich).

Ein paar Dinge, die Flash ein bisschen mehr verkaufen könnten:

  • Sie können den Text
  • drehen
  • Verwenden Sie exotische Schriftarten
  • benutze verschiedene Muster pro Buchstabe
  • skaliere den Text
  • verwenden benutzerdefinierte Bildfilter
  • Bewegung im 3D-Raum (x, y, z Translationsrotation, Perspektive)
  • Speichern Sie das Ergebnis als Bild
Les 13.11.2009 22:39
quelle
0

Lesen Sie den Link unten hier finden Sie die dynamischen Ladedetails mit Beispiel Ссылка

    
Sachin Chourasiya 10.11.2009 08:25
quelle

Tags und Links