Ik heb een afbeelding (button) van 196x21 pixels. Nu zou ik graag er tekst op plaatsen, die ik met de URL dan erop kan zetten afbeelding.php?opschrift=Sitemasters... Maar kan iemand me zeggen hoe ik hieraan moet beginnen, dat de tekst (hoe lang die ook is) gecentreerd wordt op de afbeelding (heeft dus fixed breedte)? Ik heb lange tijd dit script gebruikt, maar dan past ie de breedte van de afbeelding aan aan de lente van de tekst...
<?
$tekst or die("<font face=\"Arial, Helvetica, sans-serif\">Er is geen tekst opgegeven om op de afbeelding te plaatsen...</font>"); // er moet tekst worden gepost anders afbreken
$hoogte = 28; // hoe hoog is de afbeelding in pixels
$breedte_kanten = 10; // hoe breed is de linker en rechter kant
$marge_kanten = 0; // hoe dicht mag de tekst bij de linker en rechter kant staan
$breedte_midden = 5; // wat is de breedte van de middelste image
$links = "links.png"; // Linkerkant van de image
$midden = "midden.png"; // Midden van de image dit is het stuk waar op geprint word
$rechts = "rechts.png"; // Rechterkant van de image
$lettertype = "/Trebuchet.ttf"; // Selecteer font om op image te printen
$lettergrootte = 12; // Geef hier de groote aan in pixels
//Calculeren
$tekst = stripslashes($tekst);
$tekst_box = imagettfbbox($lettergrootte, 0, $lettertype, $tekst);
$tekst_breedte = $tekst_box[2] - $tekst_box[0];
$afbeelding_breedte = $tekst_breedte + 2 * ($breedte_kanten - $marge_kanten);
$afbeelding_output = ImageCreate($afbeelding_breedte, $hoogte) or die("Kan geen afbeelding maken");
$afbeelding_links = ImageCreateFromPNG($links) or die("Kan linkerzijde niet openen : $links");
$afbeelding_midden = ImageCreateFromPNG($midden) or die("Kan middelste gedeelte niet openen : $midden");
$afbeelding_rechts = ImageCreateFromPNG($rechts) or die("Kan rechterzijde niet openen : $rechts");
for ($i =0; $i < $afbeelding_breedte / $breedte_midden; $i++) {
ImageCopy($afbeelding_output, $afbeelding_midden, $i * $breedte_midden, 0, 0, 0, $breedte_midden, $hoogte);
}
ImageCopy($afbeelding_output, $afbeelding_links, 0, 0, 0, 0, $breedte_kanten, $hoogte);
ImageCopy($afbeelding_output, $afbeelding_rechts, $afbeelding_breedte - $breedte_kanten, 0, 0, 0, $breedte_kanten, $hoogte);
for($i = 0; $i < imagecolorstotal($afbeelding_output); $i++) {
$colors = ImageColorsForIndex($afbeelding_output, $i);
$hsv = rgb2hsv($colors['red'], $colors['green'], $colors['blue']);
$hue = $hsv[0];
$sat = $hsv[1];
$val = $hsv[2];
$hue += $huerotation;
$rgb = hsv2rgb($hue, $sat, $val);
$rood = $rgb[0];
$groen = $rgb[1];
$blauw = $rgb[2];
ImageColorSet($afbeelding_output, $i, $rood, $groen, $blauw);
}
$tekstkleur = ImageColorAllocate($afbeelding_output, 102, 102, 102);
ImageTTFText($afbeelding_output, $lettergrootte, 0, $breedte_kanten - $marge_kanten, 19, $tekstkleur, $lettertype, $tekst);
header("Content-Type: image/png");
ImagePng($afbeelding_output);
function hsv2rgb($h, $s, $v) {
if ($s == 0) {
$r = $g = $b = $v;
return array($r * 255, $g * 255, $b * 255);
}
$h %= 360;
$h /= 60;
$i = floor($h);
$f = $h - $i;
$p = $v * (1 - $s);
$q = $v * (1 - $s * $f);
$t = $v * (1 - $s * (1 - $f));
switch($i) {
case 0:
$r = $v;
$g = $t;
$b = $p;
break;
case 1:
$r = $q;
$g = $v;
$b = $p;
break;
case 2:
$r = $p;
$g = $v;
$b = $t;
break;
case 3:
$r = $p;
$g = $q;
$b = $v;
break;
case 4:
$r = $t;
$g = $p;
$b = $v;
break;
default:
$r = $v;
$g = $p;
$b = $q;
break;
}
return array($r * 255, $g * 255, $b * 255);
}
function rgb2hsv($red, $green, $blue) {
$r = $red / 255;
$g = $green / 255;
$b = $blue / 255;
$min = min($r, $g, $b);
$max = max($r, $g, $b);
$v = $max;
$delta = $max - $min;
if ($max != 0) {
$s = $delta / $max;
} else {
$s = 0;
$h = -1;
return array($h, $s, $v);
}
if ($delta) {
if ($r == $max) {
$h = ($g - $b) / $delta;
} else if ($g == $max) {
$h = 2 + ($b - $r) / $delta;
} else {
$h = 4 + ($r - $g) / $delta;
}
} else {
$h = 0;
}
$h *= 60;
if ($h < 0) {
$h += 360;
}
return array($h, $s, $v);
}
?>
<?
$tekst or die("<font face=\"Arial, Helvetica, sans-serif\">Er is geen tekst opgegeven om op de afbeelding te plaatsen...</font>");// er moet tekst worden gepost anders afbreken
$hoogte=28;// hoe hoog is de afbeelding in pixels
$breedte_kanten=10;// hoe breed is de linker en rechter kant
$marge_kanten=0;// hoe dicht mag de tekst bij de linker en rechter kant staan
$breedte_midden=5;// wat is de breedte van de middelste image
$links="links.png";// Linkerkant van de image
$midden="midden.png";// Midden van de image dit is het stuk waar op geprint word
$rechts="rechts.png";// Rechterkant van de image
$lettertype="/Trebuchet.ttf";// Selecteer font om op image te printen
$lettergrootte=12;// Geef hier de groote aan in pixels
$tekst or die("<font face=\"Arial, Helvetica, sans-serif\">Er is geen tekst opgegeven om op de afbeelding te plaatsen...</font>"); // er moet tekst worden gepost anders afbreken
Warning: imagettftext(): supplied argument is not a valid Image resource
Warning: imagepng(): supplied argument is not a valid Image resource
Warning: imagedestroy(): supplied argument is not a valid Image resource
De afbeelding bestaat zeker, en ik heb toch ook alle parameters!
//EDIT: of als iemand me kan zeggen hoe de breedte van een tekst te berekenen ben ik ook al blij! Dan is het makkelijk uit te vissen wat de x-afstand moet zijn!