[phpBB Debug] PHP Warning: in file [ROOT]/ext/tas2580/seourls/event/listener.php on line 213: Undefined array key "FORUM_NAME"
sleightofhand - Schriftersetzung reloaded. - Seite 2 - REDAXO Forum
Hallo,

Wir haben in letzter Zeit festgestellt, dass die Kommunikation via Slack viel schneller und zielführender ist als ein Beitrag im Forum. Aufgrund der neuen und besseren Möglichkeiten der Kommunikation haben wir uns entschlossen das Forum nur noch als Archiv zur Verfügung zu stellen. Somit bleibt es weiterhin möglich hier nach Lösungen zu suchen. Neue Beiträge können nicht mehr erstellt werden.

Wir empfehlen, für deine Fragen/Probleme Slack zu nutzen. Dort sind viele kompetente Benutzer aktiv und beantworten jegliche Fragen, gerne auch von REDAXO-Anfängern! Slack wird von uns sehr intensiv und meistens "rund um die Uhr" benutzt :-)
Selbst einladen kannst Du dich hier: https://redaxo.org/slack/
Benutzeravatar
littledave
Beiträge: 144
Registriert: 25. Jan 2006, 14:04
Wohnort: Coburg, Germany

15. Sep 2009, 20:52

Hey all,

Habe gerade sleightofhand leicht erweitert und ImageMagick integriert. Es ist jetzt möglich die gerenderte Überschriften zu drehen.

Beispiel:

Code: Alles auswählen

echo a561_sleightofhand(array(
    'text' => 'This is rotated text!',
    'font' => 'Gobbledegook.ttf',
    'color' => array(0,128,0), 
    'wordwrap' => '40',
    'size'=>'50',
    'rotateX' => '345',
    'spacing' => '1.2'
));

Download: http://bit.ly/sleightofhand

Dave

arez
Beiträge: 2
Registriert: 22. Sep 2009, 21:01

22. Sep 2009, 21:03

Hi Dave

Das Addon ist wirklich klasse!

Ist es auch möglich, eine Laufweite für den Text einzugeben?

Gruss Arez

Benutzeravatar
littledave
Beiträge: 144
Registriert: 25. Jan 2006, 14:04
Wohnort: Coburg, Germany

22. Sep 2009, 22:01

Hi arez,

Nein, das geht (noch) nicht. Sowas ist auch etwas tricky, da die ImageTTFText() Funktion Tracking nicht unterstützt.

Dave

arez
Beiträge: 2
Registriert: 22. Sep 2009, 21:01

23. Sep 2009, 18:04

Hi Dave

Hab kurz gegooglet und etwas zusammengestellt, allerdings noch nicht sehr ausführlich getestet.

In class.sleightofhand.inc.php fügte ich folgendes ein:

Code: Alles auswählen

function generate() {

...

$length = strlen($this->setting('text'));
folgenden Abschnitt habe ich ersetzt durch

Code: Alles auswählen

###############################################################
		## Render all lines
		$newY = 0;
		for($i=0; $i< count($lines); $i++)
		{	$newY=$y+($i * $this->setting('size') * $spacing);			
			
			if($this->setting('letter-spacing')){
			
				$line = $lines[$i];
				$pos = $x;

				$count = 0;
					//Buchstabenweise lesen
				while ($count < $length){
				     $letter = $line[$count];

				     $box = imagettfbbox($this->setting('size'), 0, $this->setting('fontpath').$this->setting('font'), $letter);

				     $l_size = abs($box[4] - $box[6]);

				     imagettftext($image, $this->setting('size'), 0, $pos, $newY, $foreground, $this->setting('fontpath').$this->setting('font'), $letter);
				 	 // $x um Breite des Buchstabens und Laufweite erweitern
					 $pos =  $pos + $l_size + $this->setting('letter-spacing');
					 $count++;
				}
				
			} else {
			
				ImageTTFText($image, $this->setting('size'), 0, $x, $newY, $foreground, $this->setting('fontpath').$this->setting('font'),  $lines[$i]);
			}
	        
			
		} 
Somit ist eine Art Laufweite möglich. Vielleicht kannst du das ja noch verbessern und evt ins Tool einbauen.

Gruss Arez

Benutzeravatar
elricco
Beiträge: 197
Registriert: 22. Jun 2007, 00:48
Wohnort: Bochum
Kontaktdaten: Website

Schreibschriften

15. Okt 2009, 17:23

Hallo Dave und alle anderen,

also ich habs jetzt mal getestet unter eine 4.1 Version, rennt einwandfrei.
Das einzige Problem ist, dass Schreibschriften zwar richtig gerendert, aber überlappenden Buchstaben teilweise oder ganz "ausradiert" werden.

In meinem konkreten Fall habe ich mal die Schriftart 'Bickham Script One.ttf' genutzt, und an den Stellen wo sich Buchstaben überlappen wirds weggerendert. Bsp.: "Willkommen" - die beiden L-Schlaufen fehlen, weil der folgende Buchstabe diesen Platz anscheinend benötigt.

Woran kann das liegen?
Wird der Alpha-Kanal für jeden Buchstaben einzeln gerendert?
Und kommt es deswegen zu diesen Überlappungsradierungen?

Gruß
euer Tim

Benutzeravatar
elricco
Beiträge: 197
Registriert: 22. Jun 2007, 00:48
Wohnort: Bochum
Kontaktdaten: Website

4. Nov 2009, 16:21

Hiho,

das Problem ist, dass bei der Funktion "ImageSaveAlpha" BOxen um die einzelnen Buchstaben gelegt werden. Ragt nun die Box des folgenden Buchstaben in die des vorhergehenden hinein, wird der Teil einfach gelöscht.

Ich hab das Ganze jetzt ein wenig abgeändert, leider muss mann dann allerdings eine Hintergrundfarbe angeben. (Muss ich noch als Aufruf in die Klasse einbauen.)

(Zeilenangaben Notepad++)
Ich habe dies:

Code: Alles auswählen

Zeile 109:
###############################################################
		## Create Alpha Channel
		$image = ImageCreateTrueColor($width+41,$newHeight+41);
		ImageSaveAlpha($image, true);
		ImageAlphaBlending($image, false); 
		$bg = ImageColorAllocateAlpha($image, 220, 220, 220, 127);
		$bg2 = $bg;
		ImageFill($image, 0, 0, $bg);
		$fg = $this->setting('color');
		$foreground = ImageColorAllocateAlpha($image, $fg[0], $fg[1], $fg[2], 0);
so geändert:

Code: Alles auswählen

###############################################################
		## Create Alpha Channel
		$image = ImageCreateTrueColor($width+41,$newHeight+41);
		$bg = ImageColorAllocate($image, 251, 243, 172);
		$bg2 = $bg;
		ImageFill($image, 0, 0, $bg);
    imagecolortransparent($image, $bg );
		$fg = $this->setting('color');
		$foreground = ImageColorAllocate($image, $fg[0], $fg[1], $fg[2]);
und dies auch noch:

Code: Alles auswählen

Zeile 205
// Make the background of the new image the same as the background of the old one.
//		ImageSaveAlpha($im2, true);
//		ImageAlphaBlending($im2, false); 
    imagecolortransparent($im2, $bg );
Den Code für den BG kann man dann ja genauso machen wie bei dem FG, halt nur anders nennen. Aber auf diese Art und Weise funktioniert es bei mir auch mit Schreibschriften.

Gruß,
euer Tim

Benutzeravatar
littledave
Beiträge: 144
Registriert: 25. Jan 2006, 14:04
Wohnort: Coburg, Germany

Fix

11. Nov 2009, 19:15

Hallo Tim,

kannst Du bitte die Datei austauschen und testen? Damit *sollte* das Problem behoben sein.

http://svn.daveholloway.co.uk/sleightof ... nd.inc.php


Schöne Grüße

Dave

Benutzeravatar
elricco
Beiträge: 197
Registriert: 22. Jun 2007, 00:48
Wohnort: Bochum
Kontaktdaten: Website

12. Nov 2009, 11:33

Hi Dave,

hab ich ausgetauscht und direkt mal mit zwei Schriften durchgetestet.
Der "Bickham Script One" und der "Downcome", sieht sehr gut aus,
da auch vorher bei der erodeten Downcome Teile überrendert wurden.

Sehr gute Arbeit
und vielen Dank.

Schöne Grüße,
Tim

Benutzeravatar
littledave
Beiträge: 144
Registriert: 25. Jan 2006, 14:04
Wohnort: Coburg, Germany

13. Nov 2009, 09:09

Super. Den Patch habe ich integriert. sleightofhand r10 kann hier heruntergeladen werden:

http://bit.ly/sleightofhand

Dave

Benutzeravatar
robcs
Beiträge: 7
Registriert: 19. Dez 2008, 12:45

13. Nov 2009, 14:21

Hallo Dave,

vielen Dank für das Addon. Super Sache!
Hatte bisher immer nur eine halbgare selbst gestrickte Sache als Modul eingesetzt ...

Eines ist mir aufgefallen, bei kleinen Schriftgrößen (<12) sieht die Glättung der Schrift ziemlich bescheiden aus ... ! Ist das nur bei so?!?
Eine mögliche Vorgehensweise um dieses Problem zu lösen (und eine gescheites Antialising zu erreichen) ist ja bei derartigen Skripts alle größenrelevanten Werte (Schriftgröße etc.) vorab z.B. um den Faktor 4 zu vergrößern und am Ende der Erstellung der Bildschrift das ganze wieder runter zu rechnen.

Ich habe mal etwas in der Art dilettantisch eingebaut, bei mir funzt es soweit gut ... allerdings kenne ich dein Skript nicht so gut, um zu wissen ob das auf diese Art und Weise geht (es ist aber so gut aufgebaut das der Einbau sehr gut ging ; )

Grüße
Robert

ps. die Stellen wo ich den Code ergänzt/verändert habe sind mit ANTIALIASING gekennzeichnet und es dreht sich nur um die Funktion generate()

Code: Alles auswählen

unction generate() {
		global $REX;
		
		$width = 0;
        $height = 0;
        $offset_x = 0;
        $offset_y = 0;
        $bounds = array();
        $image = "";
        
        // --- ANTIALIASING (new values for settings) ---
        $antialiasing = 4;
        $size_X = $this->setting('size') * $antialiasing;
        $spacing_X = $this->setting('spacing') * $antialiasing;
        // ---
        
		###############################################################
		## determine font height.
        $bounds = ImageTTFBBox($size_X, 0, $this->setting('fontpath').$this->setting('font'), "W"); // ANTIALIASING: $this->setting('size') >>> $size_X
		$font_height = abs($bounds[7]-$bounds[1]);		
		$bounds = ImageTTFBBox($size_X, 0, $this->setting('fontpath').$this->setting('font'), $this->setting('text')); // ANTIALIASING: $this->setting('size') >>> $size_X
		$width = abs($bounds[4]-$bounds[6]);
		$height = abs($bounds[7]-$bounds[1]);
		$offset_y = $font_height;
		$offset_x = 0;

		###############################################################
		## Deal with multiple lines
		$spacing = floatVal($spacing_X); // ANTIALIASING: $this->setting('spacing') >>> $spacing_X
		if ($spacing == 0 ) {
			$spacing = 1.4;
		}
		$x = $offset_x+20;
		$y = $offset_y+20;
		$lines=explode("\n",$this->setting('text'));
		for($i=0; $i< count($lines); $i++)
		{	$newY=$y+($i * $size_X * $spacing); // ANTIALIASING: $this->setting('size') >>> $size_X	
		}
		$newHeight = $newY + $font_height;
		
		
		
		
		###############################################################
		## Create Alpha Channel
		$image = ImageCreateTrueColor($width+41,$newHeight+41);
		ImageSaveAlpha($image, true);
		ImageAlphaBlending($image, false); 
		$bg = ImageColorAllocateAlpha($image, 220, 220, 220, 127);
		$bg2 = $bg;
		ImageFill($image, 0, 0, $bg);
		$fg = $this->setting('color');
		$foreground = ImageColorAllocateAlpha($image, $fg[0], $fg[1], $fg[2], 0);
		
		

		###############################################################
		## Render all lines
		$newY = 0;
		for($i=0; $i< count($lines); $i++)
		{	$newY=$y+($i * $size_X * $spacing);	// ANTIALIASING: $this->setting('size') >>> $size_X	
			ImageTTFText($image, $size_X, 0, $x, $newY, $foreground, $this->setting('fontpath').$this->setting('font'),  $lines[$i]); // ANTIALIASING: $this->setting('size') >>> $size_X
		}
		
		
		###############################################################
        ## Rotation
		$angle = $this->setting('rotateX');
		if ($angle>0) {
			$magic = new a561_magic;
			$image = $magic->rotate($image,$angle);
			$bg2 = imagecolorat($image, 5, 5);
		}
		
        
   		###############################################################
        ## Auto-Crop
		$p = array_fill(0, 4, 0);
		
		// Get the image width and height.
		$imw = imagesx($image);
		$imh = imagesy($image);
		
		// Set the X variables.
		$xmin = $imw;
		$xmax = 0;

		// Start scanning for the edges.
		for ($iy=0; $iy<$imh; $iy++){
			$first = true;
			for ($ix=0; $ix<$imw; $ix++){
				$ndx = imagecolorat($image, $ix, $iy);

				if ($ndx != $bg && $ndx !=$bg2){
					if ($xmin > $ix){ $xmin = $ix; }
					if ($xmax < $ix){ $xmax = $ix; }
					if (!isset($ymin)){ $ymin = $iy; }
					$ymax = $iy;
					if ($first){ $ix = $xmax; $first = false; }
				}
			}
		}

		$imw = 1+$xmax-$xmin; // Image width in pixels
		$imh = 1+$ymax-$ymin; // Image height in pixels
		
		// Make another image to place the trimmed version in.
		$im2 = imagecreatetruecolor($imw+$p[1]+$p[3], $imh+$p[0]+$p[2]);

		// Make the background of the new image the same as the background of the old one.
		ImageSaveAlpha($im2, true);
		ImageAlphaBlending($im2, false); 
		
	    // Copy it over to the new image.
	    imagecopy($im2, $image, $p[3], $p[0], $xmin, $ymin, $imw, $imh);
	    $image = $im2;
		
		// --- ANTIALIASING (downsampling) ---
		$imgw_X = imagesx($image);
		$imgh_X = imagesy($image);
		$image_antialised = imagecreatetruecolor($imgw_X / $antialiasing, $imgh_X / $antialiasing);
		ImageSaveAlpha($image_antialised, true);
		ImageAlphaBlending($image_antialised, false); 
		imagecopyresampled($image_antialised, $image, 0,0,0,0, $imgw_X / $antialiasing, $imgh_X / $antialiasing, $imgw_X, $imgh_X);
		// ---
		
		###############################################################
		## Cache the file
		ImagePNG($image_antialised, $this->setting('cachefile')); // ANTIALIASING: $image >>> $image_antialised
}

Benutzeravatar
littledave
Beiträge: 144
Registriert: 25. Jan 2006, 14:04
Wohnort: Coburg, Germany

13. Nov 2009, 16:21

Hi Robert!

Wow - Vielen Dank! Das werde ich gleich über das Wochenende testen und integrieren.


Dave

Goldfisch
Beiträge: 230
Registriert: 22. Sep 2004, 17:47
Wohnort: Aschaffenburg
Kontaktdaten: Website

25. Nov 2009, 11:51

Auf IE (6 und 7) erscheint die Headline als Link (Cursor), obwohl kein Mouseover oder Link definiert wurde.

Benutzeravatar
ralf.schlott
Beiträge: 625
Registriert: 5. Dez 2007, 21:22
Wohnort: Hamburch
Kontaktdaten: Website

5. Dez 2009, 01:48

Goldfisch hat geschrieben:Auf IE (6 und 7) erscheint die Headline als Link (Cursor), obwohl kein Mouseover oder Link definiert wurde.
So isses leider. IE8 ebenso...
- Danke für Redaxo! -
http://www.prenzlweb.de

Thomas.Skerbis
Beiträge: 1371
Registriert: 4. Aug 2006, 14:06
Wohnort: Rheinberg
Kontaktdaten: Website Twitter

7. Dez 2009, 10:43

Was mache ich falsch?
Egal welche ttf-Datei ich verwenden möchte es funktioniert nicht. ich erhalte keine Ausgabe.
Nur die mitgelieferten Schriften funktionieren.
Alle Schriften die ich versuche zu verwenden sind Windows Truetype Fonts

Benutzeravatar
ralf.schlott
Beiträge: 625
Registriert: 5. Dez 2007, 21:22
Wohnort: Hamburch
Kontaktdaten: Website

7. Dez 2009, 13:49

Wirklich den richtigen Ordner gewählt? Ich hatte die .ttf auch zuerst im falschen Ordner.
- Danke für Redaxo! -
http://www.prenzlweb.de

Thomas.Skerbis
Beiträge: 1371
Registriert: 4. Aug 2006, 14:06
Wohnort: Rheinberg
Kontaktdaten: Website Twitter

7. Dez 2009, 18:41

Danke. Das war's

stollinsky
Beiträge: 31
Registriert: 26. Okt 2005, 11:13
Wohnort: stuttgart

11. Dez 2009, 13:57

wirklich tolles addon! und so einfach einzubauen … Vielen Dank dafür!

ich habe gerade ein problem mit den schriften auf einer seite. nach dem Umzug von meinem Webspace auf den neuen wird auf einmal die Schrift gestreckt und wirkt fetter, obwohl alle Einstellungen gleich sind.
Wenn ich im Quellcode nachschaue ist das Bild in der generierten Navigation 1px größer als auf meinem webspace

Ich habe nun schon alles versucht: Addon ausgetauscht, neueste Version installiert, Servereinstellungen verglichen … Ich weiß nicht woran das liegen könnte.

Wenn man diese beiden Links in zwei Tabs nebeneinander öffnet, sieht man sehr gut die Veränderung der Schrift:

http://www.akademieregensburg.de
http://www.matthiasstolle.de/testsuite

Hat jemand eine Ahnung woran das liegen könnte?

Redaxo Version ist 4.2.1 und PHP Version ist 5.2.1

Benutzeravatar
Thomas.Blum
Entwickler
Beiträge: 5063
Registriert: 24. Aug 2004, 22:11
Wohnort: Dresden
Kontaktdaten: Website

11. Dez 2009, 14:16

Hej,

sieht für mich nach 2 unterschiedlichen Schnitten aus. Die eine Regular die andere Condensed.

vg Thomas

stollinsky
Beiträge: 31
Registriert: 26. Okt 2005, 11:13
Wohnort: stuttgart

11. Dez 2009, 14:50

hi thomas,

ich habe jetzt noch mal nachgeschaut. aber daran liegt es nicht. ich habe ja das ganze redaxo-paket von meinem Webspace runtergeladen, auf den neuen server hochgeladen und dann einen import eingespielt. Die Einstellungen im Template habe ich auch noch mal überprüft.
die schrift wird verzerrt (beim e von Akademie sieht man es ganz gut).
Die BoldVariante wäre sehr viel fetter (hab es gerade mal ausprobiert)
Es geht dabei scheinbar um einen pixel in der höhe.

matthias

Benutzeravatar
Richard.Laing
Beiträge: 2105
Registriert: 28. Aug 2005, 00:55
Wohnort: Brühl / Rheinland
Kontaktdaten: Website

14. Dez 2009, 15:30

hi dave
ich habe eine blank redaxo 4.2.1 genommen und leider wird der style nicht dem a tag mit übergeben...?

das kommt bei mir raus..

Code: Alles auswählen

<h1><a href="http://bit.ly/sleightofhand-site"><span class="soh" rel="./files/soh/soh-9a426258d0de92b89e573058d7bd943e.png,./files/soh/soh-051e6d2eb20d23693baed3d8d9889f84.png" style="width:143px;height:33px;background-image:url(./files/soh/soh-9a426258d0de92b89e573058d7bd943e.png)">Startseite</span></a></h1>
hier müßte dem a tag doch auch ein style display block etc.... mitgegeben werden oder?

gruß richy
REXvideo Videotutorials für Redaxo www.REXvideo.de
Webseite www.on-laing.de smokezig.de www.smokezig.de

Benutzeravatar
nuxx
Beiträge: 164
Registriert: 16. Dez 2005, 18:45
Wohnort: Kaputtgart 21

Real URL reloaded

2. Jan 2010, 16:53

Hallo,
hat jemand schon Erfahrung mit Real URL Reloaded und SOH ?
Ich stoße auf das Problem, daß ab der 2. Ebene die erzeugten Schriften nicht mehr angezeigt werden.

Rex 4.2.1 / Real URL remastered aktuelle Version / SOH aktuelle Version
mfg
Markus

Benutzeravatar
vibe
Beiträge: 3
Registriert: 29. Jan 2010, 11:54
Wohnort: Wien

29. Jan 2010, 12:24

Hi Dave,

ein tolles Add-On, vielen Dank dafür!

Ich habe aber das gleiche Problem wie Joachim...
gibt es da bereits eine Lösung dafür?

Gruß, vibe
Joachim.Dörr hat geschrieben:Was noch etwas ungünstig ist, ist dass die Texte nicht an der Grundlinie ausgerichtet wird - Grafiken mit Texten in einer Zeile sind dann unterschiedlich hoch z.b. "Home" und "Impressum" haben dann unterschiedliche Höhen da ja "Impressum" durch die Unterlänge von "p" entsprechend mehr Höhe benötigt als "Home" das nur Buchstaben auf der Grundlinie inne hat.

Benutzeravatar
littledave
Beiträge: 144
Registriert: 25. Jan 2006, 14:04
Wohnort: Coburg, Germany

29. Jan 2010, 13:47

Hi vibe,

Noch nicht. Ich habe aber vor mir das Addon wieder über das Wochenende anzuschauen.

lg

Dave

Benutzeravatar
Richard.Laing
Beiträge: 2105
Registriert: 28. Aug 2005, 00:55
Wohnort: Brühl / Rheinland
Kontaktdaten: Website

17. Feb 2010, 14:01

Hallo Dave,
ich habe es bis heute immer noch nicht geschafft sleightofhand ans laufen zu bringen, (hatte aber auch keine zeit ;) )
nach etwas wurschteln kommen nun die schriften an aber das bild hat einen schwarzen bg und is immer doppelt so hoch als die schrift.?

Code: Alles auswählen

<?php
// example category-list module (simplified)
$cats = OOCategory::getRootCategories();
echo '<ul>';
foreach ($cats as $cat) {
 echo '<li>';

	echo a561_sleightofhand(array(
		'text' => $cat->getValue('name'),
		'font' => 'arial.ttf', 
		'link' => $cat->getUrl(),		
		'prefix' => '',
		'suffix' => '',
		'color' => array(255,255,0), 
		'mouseover' => array(255,0,0),
		'size' => '14'

	));

	echo '</li>';
}
 echo '</ul>';
?>

Code: Alles auswählen

//ImageFill($im2, 0, 0, $bg); 
habe ich auskommentiert...

ich verwende nur eine andere schrift...
mit den beiliegenden schriften klappt es garnicht bei mir?

gruß richy
REXvideo Videotutorials für Redaxo www.REXvideo.de
Webseite www.on-laing.de smokezig.de www.smokezig.de

Benutzeravatar
littledave
Beiträge: 144
Registriert: 25. Jan 2006, 14:04
Wohnort: Coburg, Germany

sleightofhand r15

20. Mär 2010, 01:44

Hallo,

Sleightofhand r15 steht nun zum Download bereit.

Bugfixes/Features:
-----------------------
- SOH Funktioniert wieder mit PHP4.
- Qualität der Schriftrendering erhöht (danke robcs! http://forum.redaxo.de/sutra74521.html#74521). Qualität/Anti-aliasing kann man mit dem 'quality' Parameter einstellen: z.B. 'quality'=>10 (4=standard)
- Grundlinie-Bug behoben, Cropping optimiert (Siehe: http://forum.redaxo.de/sutra72388.html#72388)
- width:0px;height:0px; Parent-Element-Bug behoben.
- IE Cursor:hand-Bug behoben.
- Mouseovereffekte werden jetzt per background-position erzeugt (IE6 braucht immernoch zwei Bilder um die Mouseovers anzuzeigen).


aktuelle Version (r15): http://bit.ly/sleightofhand
alte Version (r12): http://rex.daveholloway.co.uk/files/soh ... -svn12.zip
Doku: http://bit.ly/sleightofhand-site


Viel Spaß mit dem Addon! Wie immer, Bugs bitte hier posten.

lg

Dave

Zurück zu „Allgemeines [R4]“