Ich habe einen Stempel für Fotos als svg-Graphik gebastelt und ein
Skript dazu, das Textvariable im Stempel setzt und dann den Stempel in
eine png-Graphik mit der Breite des Fotos umwandelt, die im letzten
Schritt unten ins das Foto geklatscht wird.
Das funktioniert so weit ganz schön, aber mit dem Essen kommt
bekanntlich der Appetit, denn für Querformat-Bilder produziert die
Methode übermäßig große Stempel, wenn der für Hochformat ausgelegt ist
und von Bildern mit "unorthodoxen" rechteckigen Formaten ganz zu
schweigen.
Man müßte also Elemente des Stempels skalieren und den (dunklen)
Hintergrund in der y-Achse verzerren, um den Stempel passend zum
Seitenverhältnis des Bildes zu skalieren.
Der Stempel selbst ist mit Inkscape gemacht - das geht nach etwas
Einarbeitung wirklich sehr schön. Allerdings sind die Koorinaten der
Elemente und die Transformationsmatrizen mit greulich krummen Werten
besetzt und zur manuellen Bearbeitung wäre es sehr schön, wenn man die
einzelnen Gruppen, aus denen der Stempel besteht, jeweils in den ++ -
Quadranten verschieben könnte, so daß die kleinste x- und y-Koordinate
jeweils 0 ist.
Dann könnte man die Transformationsmatrizen relativ einfach
modifizieren, um den gewollten Effekt zu bekommen.
Gibts irgendwelche Werkzeuge, mit denen man solche Transformationen
automatisch und gruppenweise machen kann?
Uhu Uhuhu schrieb:> Ich habe einen Stempel für Fotos als svg-Graphik gebastelt und ein> Skript dazu, das Textvariable im Stempel setzt und dann den Stempel in> eine png-Graphik mit der Breite des Fotos umwandelt, die im letzten> Schritt unten ins das Foto geklatscht wird.>> Das funktioniert so weit ganz schön, aber mit dem Essen kommt> bekanntlich der Appetit, denn für Querformat-Bilder produziert die> Methode übermäßig große Stempel, wenn der für Hochformat ausgelegt ist> und von Bildern mit "unorthodoxen" rechteckigen Formaten ganz zu> schweigen.>> Man müßte also Elemente des Stempels skalieren und den (dunklen)> Hintergrund in der y-Achse verzerren, um den Stempel passend zum> Seitenverhältnis des Bildes zu skalieren.>> Der Stempel selbst ist mit Inkscape gemacht - das geht nach etwas
Oje, Inkscape...
> Einarbeitung wirklich sehr schön. Allerdings sind die Koorinaten der> Elemente und die Transformationsmatrizen mit greulich krummen Werten> besetzt und zur manuellen Bearbeitung wäre es sehr schön, wenn man die> einzelnen Gruppen, aus denen der Stempel besteht, jeweils in den ++ -> Quadranten verschieben könnte, so daß die kleinste x- und y-Koordinate> jeweils 0 ist.>> Dann könnte man die Transformationsmatrizen relativ einfach> modifizieren, um den gewollten Effekt zu bekommen.>> Gibts irgendwelche Werkzeuge, mit denen man solche Transformationen> automatisch und gruppenweise machen kann?
Man kann Elemente zu Gruppen zusammenfassen (<g>) und Transformationen
auf die ganze Gruppe anwenden.
Was Inkscape erzeugt ist allerdings nicht wirklich hilfreich, weil es
die Trafos in jedes ELement kopiert, wie CSS-Eigenschaften übrigens
auch.
1) Beim Sodipodi-Zeug beim SChreiben von SVG deaktivieren,
brauch kein Mensch.
2) Rundungswerte für Koordinaten hochsetzen, 10 Nachkommastellen braucht
ebenfalls niemand, es sei denn bei komplett wahnsinnigen Zeichnungen
oder Skalierungen.
Falls du Trafos zerlegen willst, dafür gibt es Tools. Dürfte bei
rechtiwinkligen Trafos aber kein Problem sein.
Blöd ist, daß relative Linien und absolute Bezierkurven innerhalb eines
Pfades durcheinander gehen, wie Kraut und Rüben.
Der Sodipodi-Kram juckt wenig.
Inkscape-Einstellungen -> SVG Ausgabe -> Relative Koordinaten erlauben
deaktivieren. Erzwinge Kommandowiederholung deaktivieren kann ggf. auch
nützlich sein.
Ansonsten würde ich doch eher beim "Stempel-Prozess" ansetzen, man kann
doch meist dort eh eine Zielgröße angeben, wenn du also etwas mehr
Details über dein Skript verrätst kommt man eventuell zu einer
komfortableren Lösung als verändern der Eingangsdaten ...
Ich habe mir jetzt einfach zwei Stempel-Templates gemacht, eins für
Hoch- und eins für Querformat. (In der Q-Version sind einfach Logos und
Texte kleiner und der Hintergrund-Gradient entsprechend niedriger.)
Das Skript sieht jetzt nach, ob das Bild hoch- oder querformatig ist und
wählt dann das passende Template aus.
Mal sehen, ob das reicht.
Auf jeden Fall: die Möglichkeiten von svg beeindrucken. Stempel ohne
Skalierungsartefakte sehen einfach besser aus, als welche, die aus einer
Raster-Maske hingefrickelt sind.
Läubi .. schrieb:> Inkscape-Einstellungen -> SVG Ausgabe -> Relative Koordinaten erlauben> deaktivieren. Erzwinge Kommandowiederholung deaktivieren kann ggf. auch> nützlich sein.
Das scheint aber nur für neu gezeichnete Elemente zu wirken. Wenn man in
einer bestehenden Zeichnung die relativen Koordinaten verbietet und dann
abspeichert, bleiben die l-Elemente in einem Pfad relativ.
Ich glaub man muss einmal alles markieren und ein paar Pixel verschieben
bin aber nicht sicher, da das erst in irgendeiner Version neu
hinzugekommen ist, ich also mit einer Zeichnung gestartet bin welche
schon "richtige" Koordinaten hatte. Ob ich dann die Änderung nochmal
durchgeführt habe oder durch "verschieben" das Problem gelöst habe weiß
ich nicht mehr.
Für zukünftige Zeichnungen aber ggf. dennoch nützlich.
Nachdem ich mich etwas genauer mit svg beschäftigt habe, scheint es das
Einfachste zu sein, ein kleines Ruby-Skript zu schreiben, das Pfade
komplett ins Relativ-Format umrechnet. Die ganze Chose kann man dann
leicht im Editor zusammenstöpseln und mit Transformationsmatrizen
zurechtbiegen.
Der Stempel besteht aus einem Logo links unten, zwei Texten rechts
daneben und einem dritten Text am rechten unteren Bildrand. Unter Logo
und Texten liegt ein grauer Gradient, der unter den unteren 2/3 des
Logos liegt und nach rechts auf einer Bézierkurve so weit herunter geht,
daß der rechte Text auch gerade noch davon unterlegt ist - er soll den
notwendigen Kontrast bereitstellen, damit der Stempel nicht im Bild
ersäuft. Der Gradient wird mit einem Gauss-Filter weichgezeichnet und
wirkt auf einem Bild mit hellem Hintergrund wie ein Schatten.
Um diese Konstruktion unabhängig vom Bildformat zu bekommen, müßte der
linke Block so skaliert werden, daß er ~15% der Bildhöhe bekommt.
Entsprechend müßte der Text rechts auch nach diesem Maß skaliert werden
und wenn er am rechten Bildrand verankert ist, dann ist der skalierbare
Stempel perfekt.
Dann bleibt nur noch, die svg-Komponenten so aufzubauen, daß sie
möglichst einfach zu skalieren sind, dann könnte das Ganze in ein Skript
verpackt werden, dem man nur noch Datei und Parameter übergibt, um ein
in jedem Fall "schön" gestempeltes Bild zu bekommen.
Uhu Uhuhu schrieb:> Um diese Konstruktion unabhängig vom Bildformat zu bekommen, müßte der> linke Block so skaliert werden, daß er ~15% der Bildhöhe bekommt.> Entsprechend müßte der Text rechts auch nach diesem Maß skaliert werden> und wenn er am rechten Bildrand verankert ist, dann ist der skalierbare> Stempel perfekt.
Splitte doch die beiden Teile einfach in zwei Dateien, wieso so
umständlich. Dann in deinem "Stempel-Prozess" die gewünschten
Skalierungsfaktoren berechnen und beides skaliert und in den gewünschten
"Ecken" auf das Bild zeichnen lassen.
Das Skalieren an sich sollte die Lib (welche du ja partout nicht nennen
magst), eigentlich selbst übernehmen.
Läubi .. schrieb:> Splitte doch die beiden Teile einfach in zwei Dateien, wieso so> umständlich.
Gute Idee... Nur der durch eine Bézierkurve begrenzte Gradient, der
ausreichend Kontrast für Texte und Logo erzwingt, tanzt etwas as der
Reihe, denn der muß in x und y verschieden skaliert werden. (Im Moment
behelfe ich mir mit zwei Versionen des ganzen Stempels. Das klappt
einigermaßen, wenn das Bildformat vom gängigen Fotoformat nicht all zu
sehr abweicht und wenn es nicht gar zu klein ist, aber diese Randfälle
müßte man so oder so gesondert abhandeln.)
> Das Skalieren an sich sollte die Lib (welche du ja partout nicht nennen> magst), eigentlich selbst übernehmen.
Siehe Anhang.
Uhu Uhuhu schrieb:> diese Randfälle müßte man so oder so gesondert abhandeln
Das sit immer ein Problem, da muß man aber auch mal überlegen ob man
wirklich 2000x5 px Grafiken stampen muss ;-)
composite (http://www.imagemagick.org/script/composite.php) unterstützt
doch sogar Transformationsmatrizen, damit kann man doch so ziemlich
alles erschlagen. Ich würde auch mal sehen ob das nicht direkt SVG
versteht wenn ich das richtig sehe konvertierst du den Stempel erst in
ein PNG, das ist einerseits umständlich und andererseits ggf. ein
Qualitätsverlust.
Ansosnten wäre eine eSkript oder Programiersprache eventuell besser
geeigent als ein Shell-Skript auf lange Sicht.
Läubi .. schrieb:> Das sit immer ein Problem, da muß man aber auch mal überlegen ob man> wirklich 2000x5 px Grafiken stampen muss ;-)
So extrem ist das nicht, aber schon weniger schräge Verhältnisse bringen
kein ästhetisch akzeptables Resultat mehr - ich hoffe, du verstehst, was
gemeint ist ;-)
> Ich würde auch mal sehen ob das nicht direkt SVG> versteht wenn ich das richtig sehe konvertierst du den Stempel erst in> ein PNG, das ist einerseits umständlich und andererseits ggf. ein> Qualitätsverlust.
Das ist die Theorie. Die Praxis ist, daß composite mit dem Alfakanal von
svg nicht klar kommt.
Uhu Uhuhu schrieb:> mit dem Alfakanal von svg
Du meinst die Halbtransparenz bei Gradienten? Ansonsten gibt es bei SVG
keinen Alpha-Kanal. Wenn das so ist, würde ich mal einen Bugreport bei
Imagemagik eröffnen, mit Glück ist es dann in folgenden Versionen
gefixt.
Uhu Uhuhu schrieb:> aber schon weniger schräge Verhältnisse bringen kein ästhetisch> akzeptables Resultat mehr
Das war zwar extrem, aber auch "gutmütige Verhältnisse von 4:3 sind bei
40x30 Pixel sicher nicht brauchbar. Deshalb sollte man sich hier denke
ich auch auf sinnige Verhältnisse und Pixelgrößen einschränken anstatt
zu viel Zeit und Energie in ungewöhnliche Verhältnisse zu stecken.
Läubi .. schrieb:> Du meinst die Halbtransparenz bei Gradienten? Ansonsten gibt es bei SVG> keinen Alpha-Kanal.
Wie man das nennt, ist egal. Der Effekt ist jedenfalls, daß composite
der svg einen knalleweißen Hintergrund verpaßt und das Ganze dann in das
Zielbild hinein klatscht.
> Wenn das so ist, würde ich mal einen Bugreport bei> Imagemagik eröffnen, mit Glück ist es dann in folgenden Versionen> gefixt.
Das scheint ein ziemlich alter Hut zu sein - ich habe entsprechende
Hinweise auf dem Web gefunden.
Auffällig ist auch, daß Inkscape gemessen an den Möglichkeiten, die es
interaktiv bietet, nicht gerade über üppige Kommandozeilen-Möglichkeiten
verfügt, aber genau diese Lücke von Imagemagick perfekt abdeckt.
> Das war zwar extrem, aber auch "gutmütige Verhältnisse von 4:3 sind bei> 40x30 Pixel sicher nicht brauchbar.
Man könnte das Verhalten des Stempels in Richtung solcher Extremfälle
aber sehr schön modellieren, auch wenn man solche Winzbildchen nicht
sinnvoll bearbeiten kann. (Die brauchen eh keinen Klauschutz mehr...)