php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2007

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 11.06.2007, 15:45  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard GD: Transparenz erhalten

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()):
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($buttonimageColorTransparent($button));
        
        
// copies the left (index=0) image into the button dummy
        
imageCopy($button,                                        // destination resource
                  
$images[0]['resource'],                         // source resource
                  
00,                                           // destination position (x/y)
                  
00,                                           // 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)
                         
00,                                          // 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)
                  
00,                                          // 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]);
    }
?>
Zergling-new ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 12.06.2007, 00:32  
Erfahrener Benutzer
 
Registriert seit: 17.01.2006
Beiträge: 468
Slava
Standard

hi!
ich habe kaum erfahrung bei bildbearbeitung mit PHP, aber die beispiele von CIX88 finde ich einfach super.
http://www.cix88.de/cix_php/php_graf...z_text_tff.php
http://www.cix88.de/cix_php/php_graf...parent_gif.php
ich vermute, dass in ImageColorTransparent der 2-te parameter fehlt, der eine von dir vordefinierte farbe als durchsihtlich maskiert.
__________________
Slava
http://bituniverse.com
Slava ist offline  
Alt 12.06.2007, 10:53  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Dann kann ich die Farbe schwarz nie in transparenten GIFs mitverwenden? Das ist ja sehr merkwürdig..

Edit: Danke hat so geklappt.
Zergling-new ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
zeilenumbrüche bei aus datei gelesenem text erhalten Crypi PHP Tipps 2008 6 03.06.2008 16:57
Bilder mit Transparenz "umrahmen" Andreas PHP-Fortgeschrittene 11 21.12.2006 08:48
imagefillrectangle mit transparenz workaround? Promaetheus PHP Tipps 2006 2 20.10.2006 04:46
PNG verliert Transparenz mit imagerotate imagica PHP-Fortgeschrittene 3 20.06.2006 15:13
Zwei PNGs mit Transparenz in ein neues Bild koperen!? blik PHP Tipps 2006 2 16.04.2006 00:09
Leidiges Thema Transparenz HStev PHP Tipps 2007 1 11.11.2005 14:52
[Erledigt] Zeilenumbruch bleibt erhalten - trotz entfernen? PHP Tipps 2005-2 3 16.10.2005 02:22
transparenz bei png? PHP Tipps 2005-2 6 02.10.2005 14:53
Daten im Formular sollen erhalten bleiben 'progman' PHP Tipps 2005-2 11 02.09.2005 14:53
Variable über GET erhalten? PHP Tipps 2005-2 3 15.07.2005 18:04
0 soll erhalten bleiben Connar PHP Tipps 2005 6 11.04.2005 12:06
Kann man Textformatierung erhalten? PHP Tipps 2005 3 29.03.2005 13:09
Transparenz von Bildern Stümper HTML, Usability und Barrierefreiheit 8 11.02.2005 09:06
GIF als PNG ausgeben: Transparenz verlohren. PHP-Fortgeschrittene 7 21.11.2004 16:19
Image - Farbverlauf und Transparenz PHP-Fortgeschrittene 2 19.06.2004 21:06

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
transparenz erhalten bei indizierung, php gd transoarenz erhalten, php gd transparenz schrift, php gdi transparency

Alle Zeitangaben in WEZ +1. Es ist jetzt 05:33 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.