Ignore:
Timestamp:
01/20/08 23:13:25 (12 years ago)
Author:
ray
Message:

#1132 [ExtendedFileManager?] new Version

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/plugins/ImageManager/Classes/GD.php

    r709 r937  
    8383        $this->_get_image_details($image); 
    8484        $functionName = 'ImageCreateFrom' . $this->type; 
     85                 
    8586                if(function_exists($functionName)) 
    8687                { 
    8788                        $this->imageHandle = $functionName($this->image); 
     89                        if ( $this->type == 'png') 
     90                        { 
     91                                imageAlphaBlending($this->imageHandle, false); 
     92                                imageSaveAlpha($this->imageHandle, true); 
     93                        } 
    8894                } 
    8995    } // End load 
     
    158164    { 
    159165        if(function_exists('imagerotate')) { 
    160             $white = imagecolorallocate ($this->imageHandle, 255, 255, 255); 
     166            $white = imagecolorallocatealpha ($this->imageHandle, 255, 255, 255, 127); 
    161167                        $this->imageHandle = imagerotate($this->imageHandle, $angle, $white); 
    162168            return true; 
     
    165171        if ( $options==null ){ 
    166172            $autoresize = true; 
    167             $color_mask = array(255,255,0); 
     173            $color_mask = array(105,255,255); 
    168174        } else { 
    169175            extract( $options ); 
     
    240246        } 
    241247 
    242         $img2   = @imagecreate($width2,$height2); 
     248        $img2   = @$this->newImgPreserveAlpha( imagecreateTrueColor($width2,$height2) ); 
    243249 
    244250        if ( !is_resource($img2) ){ 
     
    253259        imagepalettecopy($img2,$img); 
    254260 
    255         $mask   = imagecolorresolve($img2,$color_mask[0],$color_mask[1],$color_mask[2]); 
    256  
     261       $mask = imagecolorallocatealpha ($img2,$color_mask[0],$color_mask[1],$color_mask[2],127); 
    257262        // use simple lines copy for axes angles 
    258263        switch((int)($angle)){ 
     
    344349        } 
    345350        if(function_exists('ImageCreateTrueColor')){ 
    346             $new_img =ImageCreateTrueColor($new_x,$new_y); 
     351           $new_img = $this->newImgPreserveAlpha( ImageCreateTrueColor($new_x,$new_y) ); 
    347352        } else { 
    348353            $new_img =ImageCreate($new_x,$new_y); 
    349354        } 
     355 
    350356        if(function_exists('ImageCopyResampled')){ 
    351357            ImageCopyResampled($new_img, $this->imageHandle, 0, 0, 0, 0, $new_x, $new_y, $this->img_x, $this->img_y); 
     
    353359            ImageCopyResized($new_img, $this->imageHandle, 0, 0, 0, 0, $new_x, $new_y, $this->img_x, $this->img_y); 
    354360        } 
     361 
    355362        $this->old_image = $this->imageHandle; 
    356363        $this->imageHandle = $new_img; 
     
    373380    { 
    374381        if(function_exists('ImageCreateTrueColor')){ 
    375             $new_img =ImageCreateTrueColor($new_width,$new_height); 
     382            $new_img =  $this->newImgPreserveAlpha(ImageCreateTrueColor($new_width,$new_height)); 
    376383        } else { 
    377384            $new_img =ImageCreate($new_width,$new_height); 
     
    434441        ImageGammaCorrect($this->imageHandle, 1.0, $outputgamma); 
    435442    } 
     443        function paletteToTrueColorWithTransparency() 
     444        { 
     445                $oldImg = $this->imageHandle; 
     446                $newImg = $this->newImgPreserveAlpha( imagecreatetruecolor($this->img_x,$this->img_y) ); 
     447                imagecopy($newImg,$oldImg,0,0,0,0,$this->img_x,$this->img_y); 
     448 
     449                $this->imageHandle = $newImg; 
     450        } 
     451         
     452        function newImgPreserveAlpha($newImg) 
     453        { 
     454                if ( $this->type == 'jpeg') return $newImg; 
     455                 
     456                // Turn off transparency blending (temporarily) 
     457                imagealphablending($newImg, false); 
     458                 
     459                // Create a new transparent color for image 
     460                if ( $transparent = imagecolortransparent($this->imageHandle) >= 0 ) 
     461                { 
     462                        if (imageistruecolor($this->imageHandle)) 
     463                        { 
     464                                $red = ($transparent & 0xFF0000) >> 16; 
     465                                $green = ($transparent & 0x00FF00) >> 8; 
     466                                $blue = ($transparent & 0x0000FF); 
     467                                $color_values = array('red' => $red, 'green' => $green, 'blue' => $blue); 
     468                        } 
     469                        else 
     470                        { 
     471                                $color_values = imagecolorsforindex($this->imageHandle,$transparent); 
     472 
     473                        } 
     474                        $color_values = imagecolorsforindex($this->imageHandle,$transparent); 
     475                        $color = imagecolorallocatealpha($newImg, $color_values['red'],$color_values['green'],$color_values['blue'], 127); 
     476                        $colort = imagecolorallocate($newImg, $color_values['red'],$color_values['green'],$color_values['blue']); 
     477                } 
     478                else 
     479                { 
     480                        $color = imagecolorallocatealpha($newImg, 252, 2, 252, 127); 
     481                        $colort = imagecolorallocate($newImg, 252, 2, 252); 
     482                } 
     483                imagecolortransparent($newImg,$colort); 
     484                 
     485                // Completely fill the background of the new image with allocated color. 
     486                imagefill($newImg, 0, 0, $color); 
     487                 
     488                // Restore transparency blending 
     489                imagesavealpha($newImg, true); 
     490                 
     491                return $newImg; 
     492        } 
     493         
     494        function preserveTransparencyForPalette() 
     495        { 
     496                $new_img = imagecreatetruecolor($this->img_x,$this->img_y); 
     497                $truecolor = imageistruecolor($this->imageHandle); 
     498                $transparent = imagecolorallocate($new_img, 252,2,252); // nasty pinkish purple that hopefully doesn't exist in the image 
     499 
     500                imagecolortransparent($new_img, $transparent); 
     501                for ($i=0;$i<$this->img_y;$i++) 
     502                { 
     503                        for ($j=0;$j<$this->img_x;$j++) 
     504                        { 
     505                                $c = imagecolorat($this->imageHandle,$j, $i); 
     506                                if ($truecolor) 
     507                                { 
     508                                        $a = ($c >> 24) & 0xFF; 
     509                                        $r = ($c >> 16) & 0xFF; 
     510                                        $g = ($c >> 8) & 0xFF; 
     511                                        $b = $c & 0xFF; 
     512                                        $color_values = array('red' => $r, 'green' => $g, 'blue' => $b, 'alpha' => $a); 
     513                                } 
     514                                else 
     515                                { 
     516                                        $color_values = imagecolorsforindex($this->imageHandle,$transparent); 
     517                                } 
     518                                if ($color_values['alpha'] >= 126) 
     519                                { 
     520                                        imagesetpixel($new_img, $j, $i, $transparent); 
     521                                } 
     522                                else 
     523                                { 
     524                                        imagesetpixel($new_img, $j, $i, $c); 
     525                                } 
     526                        } 
     527                } 
     528                $this->imageHandle = $new_img; 
     529        } 
    436530 
    437531    /** 
Note: See TracChangeset for help on using the changeset viewer.