Hi,
habe mir grade meine TextGenerator-Klasse, die mir Texte grafisch ausgibt um eine Button-Funktion erweitert. 3 Bilder müssen dafür übergeben werden, der linke Rand des Buttons, der Hintergrund der gestreckt werden soll, sowie der rechte Rand.
Mittels dieser drei Bilder wird ein Buttonbild (abhängig von der Textlänge) generiert, das wiederum von der Grundfunktion des Skriptes als Hintergrundbild für den Text verwendet wird.
Ich rate und schummel mich monentan ganz gut durch die GD-Funktionen durch. Problem ist leider momentan die Transparenz in GIFs zu erhalten.
Ich erstelle zunächst mittels imageCreateTrueColor() das neue Bild und versuche danach mittels imageColorTransparent() und imageColorAllocate() irgendwas zusammenzuwursten, aber so richtig verstehe ich das Prinzip beider Funktionen nicht (trotz Manual).
Der Vollständigkeit halber hier der Quellcode der Methode (der relevante Teil ist direkt über dem 1. imageCopy()):
habe mir grade meine TextGenerator-Klasse, die mir Texte grafisch ausgibt um eine Button-Funktion erweitert. 3 Bilder müssen dafür übergeben werden, der linke Rand des Buttons, der Hintergrund der gestreckt werden soll, sowie der rechte Rand.
Mittels dieser drei Bilder wird ein Buttonbild (abhängig von der Textlänge) generiert, das wiederum von der Grundfunktion des Skriptes als Hintergrundbild für den Text verwendet wird.
Ich rate und schummel mich monentan ganz gut durch die GD-Funktionen durch. Problem ist leider momentan die Transparenz in GIFs zu erhalten.
Ich erstelle zunächst mittels imageCreateTrueColor() das neue Bild und versuche danach mittels imageColorTransparent() und imageColorAllocate() irgendwas zusammenzuwursten, aber so richtig verstehe ich das Prinzip beider Funktionen nicht (trotz Manual).
Der Vollständigkeit halber hier der Quellcode der Methode (der relevante Teil ist direkt über dem 1. imageCopy()):
PHP-Code:
<?php
// button ist ein Array dessen drei Elemente die Pfade zu den drei relevanten Grafiken für den Button sind)
function _prepareButtonBackground()
{
$options = $this->_options->get('button');
$images = array();
for ($i = 0; $i < 3; ++$i) {
$image = array();
// size
$image['size'] = getImageSize($options[$i]);
// image-type
switch ($image['size'][2]) {
case IMAGETYPE_GIF : $image['image-type'] = 'gif'; break;
case IMAGETYPE_JPEG : $image['image-type'] = 'jpeg'; break;
case IMAGETYPE_PNG : $image['image-type'] = 'png'; break;
}
$image['function'] = 'imageCreateFrom' . ucfirst($image['image-type']);
if (!function_exists($image['function'])) {
$image['function'] = 'imageCreateFromPng';
}
// resource
$image['resource'] = call_user_func($image['function'], $options[$i]);
$images[] = $image;
}
$textWidth = $this->_options->get('padding-left') + ($this->_size[2] - $this->_size[0]) + $this->_options->get('padding-right');
$textHeight = $this->_options->get('padding-top') + ($this->_size[1] - $this->_size[7]) + $this->_options->get('padding-bottom');
$buttonWidth = $images[0]['size'][0] + $textWidth + $images[2]['size'][0];
$buttonHeight = max($images[0]['size'][1], $textHeight, $images[2]['size'][1]);
$button = imageCreateTrueColor($buttonWidth, $buttonHeight);
$bg = $this->_options->get('background-color');
imageColorAllocate($button, imageColorTransparent($button));
// copies the left (index=0) image into the button dummy
imageCopy($button, // destination resource
$images[0]['resource'], // source resource
0, 0, // destination position (x/y)
0, 0, // source position (x/y)
$images[0]['size'][0], $images[0]['size'][1]); // source size (w/h)
// copies the background (index=1) image into the dummy
imageCopyResized($button, // destination resource
$images[1]['resource'], // source resource
$images[0]['size'][0], 0, // destination position (x/y)
0, 0, // source position (x/y)
$textWidth, $images[1]['size'][1], // destination size (w/h)
$images[1]['size'][0], $images[1]['size'][1]); // source size (w/h)
// copies the right (index=2) image into the dummy
imageCopy($button, // destination resource
$images[2]['resource'], // source resource
$buttonWidth - $images[2]['size'][0], 0, // destination position (x/y)
0, 0, // source position (x/y)
$images[2]['size'][0], $images[2]['size'][1]); // source size (w/h)
// output
$imagesType = $this->_options->get('image-type');
$bgImage = rtrim($this->_options->get('cache-path'), '/');
$bgImage = $bgImage . '/button_' . md5(serialize($options)) . '.' . $imagesType;
if ($imagesType == 'jpg') {
imageJpeg($button, $bgImage, $this->_options->get('image-quality'));
} else {
$function = 'image' . ucfirst($imagesType);
if (!function_exists($function)) {
$function = 'imagePng';
}
call_user_func($function, $button, $bgImage);
}
imageDestroy($images[0]['resource'];
imageDestroy($images[1]['resource'];
imageDestroy($images[2]['resource'];
$this->_options->set('background-image', $bgImage);
$this->_options->set('padding-left', $this->_options->get('padding-left') + $images[0]['size'][0]);
$this->_options->set('padding-right', $this->_options->get('padding-right') + $images[2]['size'][0]);
}
?>
Kommentar