Ankündigung

Einklappen
Keine Ankündigung bisher.

GD: Transparenz erhalten

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • 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]);
        }
    ?>

  • #2
    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

    Kommentar


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

      Edit: Danke hat so geklappt.

      Kommentar

      Lädt...
      X