myaac/tools/signature/gd.class.php
2017-05-01 20:05:36 +02:00

340 lines
8.5 KiB
PHP

<?PHP
defined('MYAAC') or die('Direct access not allowed!');
/**
* @author Christopher Eklund
* @copyright MadPHP.org 2009
* @version 2.4.5
**/
class MadGD
{
public $textConfig = array( 'font' => 2, 'size' => 9, 'color' => 'FFFFFF', 'shadow' => true );
public $textBold = array( 'font' => 3, 'size' => 9, 'color' => 'FFFFFF', 'shadow' => true );
public $testMode = false;
public $background = null;
public $extension = null;
public $instance = null;
public $equipment = array(
'pos' => array(
'x' => 339,
'y' => 3
),
'x' => array( ),
'y' => array( )
);
public $x = 0;
public $y = 0;
public $l = 0;
/**
* @access public
* @return null
**/
public function __construct( $path = null )
{
if ( $path != null )
{
$this->setBackground( $path );
}
$this->setEquipments( );
}
/**
* @access public
* @return null
**/
private function setEquipments( )
{
$equipments = array(
'amulet' => array( 1, 15 ),
'helmet' => array( 38, 1 ),
'backpack' => array( 76, 15 ),
'lefthand' => array( 1, 52 ),
'armor' => array( 38, 38 ),
'righthand' => array( 75, 52 ),
'ring' => array( 1, 89 ),
'legs' => array( 38, 75 ),
'ammunition' => array( 75, 89 ),
'boots' => array( 38, 112 )
);
foreach( $equipments as $eq => $positions )
{
$this->equipment['x'][$eq] = $this->equipment['pos']['x'] + $positions[0];
$this->equipment['y'][$eq] = $this->equipment['pos']['y'] + $positions[1];
}
}
/**
* @param string $path
* @access public
* @return instance
**/
public function setBackground( $path )
{
$this->background = $path;
$this->extension = strtolower( pathinfo( $path, PATHINFO_EXTENSION ) );
switch( $this->extension )
{
case MADGD_PNG:
$this->instance = imagecreatefrompng( $this->background );
break;
case MADGD_GIF:
$this->instance = imagecreatefromgif( $this->background );
break;
case MADGD_JPG:
case MADGD_JPEG:
$this->instance = imagecreatefromjpeg( $this->background );
break;
}
return $this->instance;
}
/**
* @param string $image
* @param integer $x
* @param integer $y
* @access public
* @return null
**/
public function setEquipmentBackground( $image, $x = false, $y = false )
{
if ( $x )
{
$this->equipment['pos']['x'] = $x;
}
if ( $y )
{
$this->equipment['pos']['y'] = $y;
}
$this->setEquipments( );
return $this->addIcon( $image )->setPosition( $this->equipment['pos']['x'], $this->equipment['pos']['y'] );
}
/**
* @param string/int $regular
* @param string/int $bold
* @param int $size
* @param string $color
* @param boolean $shadow
* @access public
* @return null
**/
public function setDefaultStyle( $regular = 2, $bold = 3, $size = 9, $color = 'FFFFFF', $shadow = true )
{
$this->textConfig = array( 'font' => $regular, 'size' => $size, 'color' => $color, 'shadow' => $shadow );
$this->textBold = array( 'font' => $bold, 'size' => $size, 'color' => $color, 'shadow' => $shadow );
}
/**
* @param string $text
* @param array $style
* @access public
* @return instance
**/
public function addText( $text, $style = array( ) )
{
foreach( $this->textConfig as $key => $value )
{
if ( !array_key_exists( $key, $style ) )
{
$style[$key] = $value;
}
}
return new MadGDText( $this, array( $text, $style ) );
}
/**
* @param string $icon
* @access public
* @return instance
**/
public function addIcon( $icon, $width = null, $height = null )
{
return new MadGDIcon( $this, $icon, $width, $height );
}
/**
* @param string $hex
* @param boolean/int $index
* @access public
* @return array $hex
**/
public function HexRGB( $hex, $index = false )
{
if ( !is_array( $hex ) )
{
$hex = preg_replace( '/#/', null, $hex );
if ( strlen( $hex ) == 6 )
{
$hex = array(
hexdec( substr( $hex, 0, 2 ) ),
hexdec( substr( $hex, 2, 2 ) ),
hexdec( substr( $hex, 4, 2 ) )
);
}
}
return ( in_array( $index, array( 0, 1, 2 ) ) ? $hex[$index] : $hex );
}
/**
* @param string $path
* @access public
* @return null
**/
public function display( $path = false )
{
if ( !$this->testMode )
{
if ( !$path )
{
header( 'Content-Type: image/png' );
imagepng( $this->instance, '', 9 );
}
else
{
imagepng( $this->instance, $path, 9 );
}
imagedestroy( $this->instance );
unset( $this );
}
}
}
class MadGDText
{
private $parent = null;
private $text = null;
private $style = array( );
/**
* @param instance $parent
* @param array $object
* @access public
* @return null
**/
public function __construct( $parent, $object )
{
$this->parent = $parent;
$this->text = $object[0];
$this->style = $object[1];
}
/**
* @param int $x
* @param int $y
* @access public
* @return null
**/
public function setPosition( $x = MADGD_STACK, $y = 5 )
{
$textSize = ( !is_int( $this->style['font'] ) ? imagettfbbox( $this->style['size'], 0, $this->style['font'], $this->text ) : null );
$this->parent->x = ( $x === MADGD_STACK ? $this->parent->x + $this->parent->l + $y : $x );
$this->parent->y = ( $x === MADGD_STACK ? $this->parent->y : $y );
$this->parent->l = ( is_int( $this->style['font'] ) ? imagefontwidth( $this->style['font'] ) * strlen( $this->text ) : $textSize[2] );
if ( is_int( $this->style['font'] ) )
{
if ( $this->style['shadow'] )
{
imagestring( $this->parent->instance, $this->style['font'], $this->parent->x + 1, $this->parent->y + 1, $this->text, imagecolorallocate( $this->parent->instance, 0, 0, 0 ) );
}
imagestring( $this->parent->instance, $this->style['font'], $this->parent->x, $this->parent->y, $this->text, imagecolorallocate( $this->parent->instance, $this->parent->HexRGB( $this->style['color'], 0 ), $this->parent->HexRGB( $this->style['color'], 1 ), $this->parent->HexRGB( $this->style['color'], 2 ) ) );
}
else
{
if ( $this->style['shadow'] )
{
imagettftext( $this->parent->instance, $this->style['size'], 0, $this->parent->x + 1, $this->parent->y + 11, imagecolorallocate( $this->parent->instance, 0, 0, 0 ), $this->style['font'], $this->text );
}
imagettftext( $this->parent->instance, $this->style['size'], 0, $this->parent->x, $this->parent->y + 10, imagecolorallocate( $this->parent->instance, $this->parent->HexRGB( $this->style['color'], 0 ), $this->parent->HexRGB( $this->style['color'], 1 ), $this->parent->HexRGB( $this->style['color'], 2 ) ), $this->style['font'], $this->text );
}
}
}
class MadGDIcon
{
public $extension = null;
public $instance = null;
public $parent = null;
public $height = null;
public $width = null;
public $icon = null;
/**
* @param instance $parent
* @param string $icon
* @param int $width
* @param int $height
* @access public
* @return null
**/
public function __construct( $parent, $icon, $width, $height )
{
$this->parent = $parent;
$this->height = $height;
$this->width = $width;
$this->icon = $icon;
$this->extension = strtolower( pathinfo( $this->icon, PATHINFO_EXTENSION ) );
}
/**
* @param int $x
* @param int $y
* @access public
* @return null
**/
public function setPosition( $x = MADGD_STACK, $y = 5 )
{
$this->parent->x = ( $x === MADGD_STACK ? $this->parent->x + $this->parent->l + $y : $x );
$this->parent->y = ( $x === MADGD_STACK ? $this->parent->y : $y );
list( $imageWidth, $imageHeight ) = getimagesize( $this->icon );
$this->parent->l = $imageWidth;
switch( $this->extension )
{
case MADGD_PNG:
$this->instance = imagecreatefrompng( $this->icon );
break;
case MADGD_GIF:
$this->instance = imagecreatefromgif( $this->icon );
break;
case MADGD_JPG:
case MADGD_JPEG:
$this->instance = imagecreatefromjpeg( $this->icon );
break;
}
return imagecopyresampled( $this->parent->instance, $this->instance, $this->parent->x, $this->parent->y, 0, 0, ( $this->width != null ? $this->width : $imageWidth ), ( $this->height != null ? $this->height : $imageHeight ), $imageWidth, $imageHeight );
}
}
define( 'MADGD_PNG', 'png' );
define( 'MADGD_JPG', 'jpg' );
define( 'MADGD_JPEG', 'jpeg' );
define( 'MADGD_GIF', 'gif' );
define( 'MADGD_STACK', 'stack' );
define( 'X_SLOT', 'X_SLOT_' );
define( 'Y_SLOT', 'Y_SLOT_' );