Вход Регистрация
Файл: core/asido/class.driver.gd_hack.php
Строк: 151
<?php
/**
* @author Kaloyan K. Tsvetkov <kaloyan@kaloyan.info>
* @license http://opensource.org/licenses/lgpl-license.php GNU Lesser General Public License Version 2.1
* @package Asido
* @subpackage Asido.Driver.GD
* @version $Id: class.driver.gd_hack.php 7 2007-04-09 21:09:09Z mrasnika $
*/

/////////////////////////////////////////////////////////////////////////////

/**
* @see Asido_Driver_GD
*/
require_once ASIDO_DIR "/class.driver.gd.php";

/////////////////////////////////////////////////////////////////////////////

/**
* Asido GD(GD2) driver with some of the unsupported methods hacked via some work-arounds.
*
* @package Asido
* @subpackage Asido.Driver.GD
*/
Class Asido_Driver_GD_Hack Extends Asido_Driver_GD {

    
// -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

    /**
    * Make the image greyscale
    *
    * @param Asido_TMP &$tmp
    * @return boolean
    * @access protected
    */
    
function __grayscale(&$tmp) {

        
// the longer path: do it pixel by pixel
        // 
        
if (parent::__grayscale(&$tmp)) {
            return 
true;
            }

        
// create 256 color palette
        //
        
$palette = array();
        for (
$c=0$c<256$c++) {
            
$palette[$c] = imageColorAllocate($tmp->target$c$c$c);
            }

        
// read origonal colors pixel by pixel
        //
        
for ($y=0$y<$tmp->image_height$y++) {
            for (
$x=0$x<$tmp->image_width$x++) {

                
$rgb imageColorAt($tmp->target$x$y);

                
$r = ($rgb >> 16) & 0xFF;
                
$g = ($rgb >> 8) & 0xFF;
                
$b $rgb 0xFF;

                
$gs = (($r*0.299)+($g*0.587)+($b*0.114));
                
imageSetPixel($tmp->target$x$y$palette[$gs]);
                }
            }

        return 
true;
        }

    
/**
    * Vertically mirror (flip) the image
    * 
    * @param Asido_TMP &$tmp
    * @return boolean
    * @access protected
    */
    
function __flip(&$tmp) {
        
        
$t imageCreateTrueColor($tmp->image_width$tmp->image_height);
        
imageAlphaBlending($ttrue);

        for (
$y 0$y $tmp->image_height; ++$y) {
            
imageCopy(
                
$t$tmp->target,
                
0$y,
                
0$tmp->image_height $y 1,
                
$tmp->image_width1
                
);
            }
        
imageAlphaBlending($tfalse);

        
$this->__destroy_target($tmp);
        
$tmp->target $t;

        return 
true;
        }

    
/**
    * Horizontally mirror (flop) the image
    * 
    * @param Asido_Image &$image
    * @return boolean
    * @access protected
    */
    
function __flop(&$tmp) {

        
$t imageCreateTrueColor($tmp->image_width$tmp->image_height);
        
imageAlphaBlending($ttrue);

        for (
$x 0$x $tmp->image_width; ++$x) {
            
imageCopy(
                
$t,
                
$tmp->target,
                
$x0,
                        
$tmp->image_width $x 10,
                        
1$tmp->image_height
                        
);
            }
        
imageAlphaBlending($tfalse);

        
$this->__destroy_target($tmp);
        
$tmp->target $t;

        return 
true;
        }

    
// -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

    /**
    * Get canvas
    *
    * @param integer $width
    * @param integer $height
    * @param Asido_Color &$color
    * @return Asido_TMP
    * @access protected
    */
    
function __canvas($width$height, &$color) {
        
        
$t = new Asido_TMP;
        
$t->target imageCreateTrueColor($width$height);
        
        list(
$r$g$b) = $color->get();
        
imageFill($t->target11
            
imageColorAllocate($t->target$r$g$b)
            );
        
$t->image_width $width;
        
$t->image_height $height;

        return 
$t;
        }

    
/**
    * Generate a temporary object for the provided argument
    *
    * @param mixed &$handler
    * @param string $filename the filename will be automatically generated 
    *    on the fly, but if you want you can use the filename provided by 
    *    this argument
    * @return Asido_TMP
    * @access protected
    */
    
function __tmpimage(&$handler$filename=null) {

        if (!isset(
$filename)) {
            
$filename $this->__tmpfile();
            }

        
imageAlphaBlending($handler0);
        
imageSaveAlpha($handler1); 
        
imagePNG($handler$filename);
            
// ^
            // PNG: no pixel losts

        
return $this->prepare(
            new 
Asido_Image($filename)
            );
        }

    
// -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

    /**
    * Open the source and target image for processing it
    *
    * @param Asido_TMP &$tmp
    * @return boolean
    * @access protected
    */
    
function __open(&$tmp) {

        
$error_source false;
        
$error_target false;

        
// get image dimensions
        //
        
if ($i = @getImageSize($tmp->source_filename)) {
            
$tmp->image_width $i[0];
            
$tmp->image_height $i[1];
            }
        
        
// image type ?
        //
        
switch(@$i[2]) {
            
            case 
1:    // GIF
                
$error_source = (false == (
                    
$tmp->source = @imageCreateFromGIF(
                        
$tmp->source_filename
                        
)
                    ));

                
$error_target false == (
                    
$tmp->target imageCreateTrueColor(
                        
$tmp->image_width$tmp->image_height
                        
)
                    );
                
$error_target &= imageCopyResampled(
                    
$tmp->target$tmp->source
                    
0000,
                    
$tmp->image_width$tmp->image_height,
                    
$tmp->image_width$tmp->image_height
                    
);
                
                break;

            case 
2// JPG
                
$error_source = (false == (
                    
$tmp->source imageCreateFromJPEG(
                        
$tmp->source_filename
                        
)
                    ));
                
                
$error_target = (false == (
                    
$tmp->target imageCreateFromJPEG(
                        
$tmp->source_filename
                        
)
                    ));
                break;

            case 
3// PNG
                
$error_source = (false == (
                    
$tmp->source = @imageCreateFromPNG(
                        
$tmp->source_filename
                        
)
                    ));

                
$error_target = (false == (
                    
$tmp->target = @imageCreateFromPNG(
                        
$tmp->source_filename
                        
)
                    ));
                break;

            case 
15// WBMP
                
$error_source = (false == (
                    
$tmp->source = @imageCreateFromWBMP(
                        
$tmp->source_filename
                        
)
                    ));

                
$error_target = (false == (
                    
$tmp->target = @imageCreateFromWBMP(
                        
$tmp->source_filename
                        
)
                    ));
                break;

            case 
16// XBM
                
$error_source = (false == (
                    
$tmp->source = @imageCreateFromXBM(
                        
$tmp->source_filename
                        
)
                    ));

                
$error_target = (false == (
                    
$tmp->target = @imageCreateFromXBM(
                        
$tmp->source_filename
                        
)
                    ));
                break;

            case 
4// SWF

            
case 5// PSD

            
case 6// BMP

            
case 7// TIFF(intel byte order)

            
case 8// TIFF(motorola byte order)

            
case 9// JPC

            
case 10// JP2

            
case 11// JPX

            
case 12// JB2

            
case 13// SWC

            
case 14// IFF
                
            
default:
                
                
$error_source = (false == (
                    
$tmp->source = @imageCreateFromString(
                        
file_get_contents(
                            
$tmp->source_filename
                            
)
                        )
                    ));

                
$error_target = (false == (
                    
$tmp->source = @imageCreateFromString(
                        
file_get_contents(
                            
$tmp->source_filename
                            
)
                        )
                    ));
                break;
            }

        return !(
$error_source || $error_target);
        }

    
/**
    * Write the image after being processed
    *
    * @param Asido_TMP &$tmp
    * @return boolean
    * @access protected
    */
    
function __write(&$tmp) {

        
// try to guess format from extension
        //
        
if (!$tmp->save) {
            
$p pathinfo($tmp->target_filename);

            (
$tmp->save $this->__mime_metaphone[metaphone($p['extension'])])
                || (
$tmp->save $this->__mime_soundex[soundex($p['extension'])]);
            }

        
$result false;
        switch(
$tmp->save) {

            case 
'image/gif' :
                
imageTrueColorToPalette($tmp->targettrue256);
                
$result = @imageGIF($tmp->target$tmp->target_filename);
                break;
                
            case 
'image/jpeg' :
                
$result = @imageJPEG($tmp->target$tmp->target_filenameASIDO_GD_JPEG_QUALITY);
                break;
                
            case 
'image/wbmp' :
                
$result = @imageWBMP($tmp->target$tmp->target_filename);
                break;
            
            default :
            case 
'image/png' :

                
imageSaveAlpha($tmp->targettrue);
                
imageAlphaBlending($tmp->targetfalse);
            
                
$result = @imagePNG($tmp->target$tmp->target_filename);
                break;
            }
        
        @
$this->__destroy_source($tmp);
        @
$this->__destroy_target($tmp);

        return 
$result;
        }
    
    
// -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

    /**
    * Destroy the source for the provided temporary object
    *
    * @param Asido_TMP &$tmp
    * @return boolean
    * @access protected
    * @abstract
    */    
    
function __destroy_source(&$tmp) {
        return 
imageDestroy($tmp->source);
        }

    
/**
    * Destroy the target for the provided temporary object
    *
    * @param Asido_TMP &$tmp
    * @return boolean
    * @access protected
    * @abstract
    */    
    
function __destroy_target(&$tmp) {
        return 
imageDestroy($tmp->target);
        }

    
// -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

//--end-of-class--    
}

/////////////////////////////////////////////////////////////////////////////

?>
Онлайн: 1
Реклама