Вход Регистрация
Файл: DESURE-dcms-f12de01ac63e/sys/plugins/classes/sprite.class.php
Строк: 116
<?php

class sprite_icon
{
    public 
$path;
    public 
$w$h// размеры
    
public $x$y// позиция в спрайте
    
protected $_image;

    function 
__construct($path)
    {
        
$this->path $path;
        
$info getimagesize($this->path);
        
$this->$info[0];
        
$this->$info[1];
    }

    function 
getImage()
    {
        if (!
$this->_image)
            
$this->_image imagecreatefromstring(file_get_contents($this->path));
        return 
$this->_image;
    }
}

/**
 * Class sprite
 * @property sprite_icon[] _icons
 */
class sprite
{
    protected 
$_icons = array();
    protected
        
$_width 0// ширина спрайта
        
$_height 0// высота спрайта
        
$_max_width 512// максимальная высота спрайта
        
$_top_index 0// позиция для вставки следующей иконки
        
$_left_index 0// позиция для вставки следующей иконки

    
public $class_prefix 'DCMS_';

    function 
__construct()
    {

    }

    function 
addImages($array)
    {
        foreach (
$array AS $path)
            
$this->addImage($path);
    }

    function 
addImage($path)
    {
        try {
            
$icon = new sprite_icon($path);
            
$this->_icons[] = $icon;
        } catch (
Exception $e) {
            return 
false;
        }


        return 
true;
    }

    function 
cmp($i1$i2)
    {
        if (
$i1->$i2->h)
            return 
1;
        if (
$i1->$i2->h)
            return -
1;
        return 
0;
    }

    function 
bindIndexes()
    {
        
usort($this->_icons, array($this'cmp'));

        
$this->_width 0;
        
$this->_left_index 0;
        
$this->_top_index 0;
        
$this->_height 0;

        for (
$i 0$i count($this->_icons); $i++) {
            
$icon $this->_icons[$i];

            if (
$this->_left_index $icon->$this->_max_width) {
                
$this->_left_index 0;
                
$this->_top_index $this->_height;
            }

            
$icon->$this->_left_index;
            
$icon->$this->_top_index;

            
$this->_width max($this->_width$this->_left_index $icon->w);
            
$this->_height max($this->_height$this->_top_index $icon->h);

            
$this->_left_index += $icon->w;
        }
    }

    function 
saveSpriteImage($path)
    {
        
$img imagecreatetruecolor($this->_width$this->_height);
        
$black imagecolorallocate($img000);
        
imagecolortransparent($img$black);
        
imagealphablending($imgfalse);
        
imagesavealpha($imgtrue);
        foreach (
$this->_icons AS $icon) {
            
imagecopy($img$icon->getImage(), $icon->x$icon->y00$icon->w$icon->h);
        }
        
imagepng($img$path);
    }

    function 
saveSpriteCss($path$sprite_src$class_prefix)
    {
        
$css '.' $class_prefix 'icon{' "n";
        
$css .= 'display: inline-block;' "n";
        
$css .= 'overflow: hidden;' "n";
        
$css .= 'background-image: url(' $sprite_src ');' "n";
        
$css .= '}' "n";

        foreach (
$this->_icons AS $icon) {
            
$css .= '.' implode('.'self::getClassName($icon->path$class_prefix)) . "{n";
            
$css .= 'width: ' $icon->'px;' "n";
            
$css .= 'height: ' $icon->'px;' "n";
            
$css .= 'background-position: -' $icon->'px -' $icon->'px;' "n";
            
$css .= "}n";
        }
        
file_put_contents($path$css);
    }

    static function 
getClassName($path$prefix '')
    {
        
$name basename($path'.png');
        
$name str_replace(array('.''@'), array('_dot_''_at_'), $name);
        return array(
$prefix 'icon'$name);
    }
}
Онлайн: 2
Реклама