NAME
    CSS::SpriteBuilder - CSS sprite builder.
SYNOPSIS
        use CSS::SpriteBuilder
        my $builder = CSS::SpriteBuilder->new( [%args] );
        $builder->build(
            sprites => [{
                file   => 'sample_sprite_%d.png',
                images => [
                    { file => 'small/Add.png', [ %options ] },
                ],
                [ %options ],
            }],
        );
        $build->write_css('sprite.css');
        Or
        $builder->build(config => 'config.xml');
        $build->write_css('sprite.css');
DESCRIPTION
    This module generate CSS sprites with one of these modules:
    Image::Magick or GD.
    It has many useful settings and can be used for sites with complex
    structure.
METHODS
  new(<%args>)
    my $builder = CSS::SpriteBuilder->new(<%args>);
    Create instance.
    Valid arguments are:
    *   source_dir [ = undef ]
        Specify custom location for source images.
    *   output_dir [ = undef ]
        Specify custom location for generated images.
    *   image_quality 0..100 [ = 90 ]
        Specify image quality for generated images (for JPEG only).
    *   max_image_size [ = 65536 ]
        Specify max size of images that will be used to generate a sprite.
    *   max_image_width [ = 2000 ]
        Specify max width of images that will be used to generate a sprite.
    *   max_image_height [ = 2000 ]
        Specify max height of images that will be used to generate a sprite.
    *   max_sprite_width [ = 2000 ]
        Specify max width of sprite. When sprite has no free space, than
        creates a new sprite with addition of a suffix to the sprite name.
        Opera 9.0 and below have a bug which affects CSS background offsets
        less than -2042px. All values less than this are treated as -2042px
        exactly.
    *   max_sprite_height [ = 2000 ]
        Specify max height of sprite.
    *   margin [ = 0 ]
        Add margin to each image.
    *   transparent_color [ = undef ]
        Set transparent color for image, for example: 'white', 'black', ....
    *   is_background [ = 0 ]
        If is_background flag is '0' will be generated CSS rule such as:
        'width:XXXpx;height:YYYpx;'.
    *   layout [ = 'packed' ]
        Specify layout algorithm (horizontal, vertical or packed).
    *   css_selector_prefix [ = '.spr-' ]
        Specify CSS selector prefix. For example, for an image
        "img/icon/arrow.gif" will be generated selector such as
        ".spr-img-icon-arrow".
    *   css_url_prefix [ = '' ]
        Specify prefix for CSS url. For example: background-image:
        url('css_url_prefixsample_sprite.png')
    *   is_add_timestamp [ = 1 ]
        If parameter set to '1' than timestamp will be added for CSS url.
        For example: background-image: url('sample_sprite.png?12345678')
  build(<%args>)
    Build sprites.
        $builder->build(<%args>);
    This method returning structure like:
        {
            'sample_sprite_1.png' => [
                {
                    'y' => 0,
                    'width' => 32,
                    'selector' => '.spr-small-add',
                    'is_background' => 0,
                    'x' => 0,
                    'height' => 32,
                    'image' => 'small/Add.png',
                    'repeat' => 'no'
                },
                ...
            ],
            ...
        }
    Valid arguments are:
    *   sprites
        Specify sprite list.
            $builder->build(
                sprites => [
                    {
                        file               => 'horizontal_%d.png',
                        layout             => 'horizontal',
                        max_sprite_width   => 1000,
                        ...
                        images => [
                            { file => 'small/*.png', is_repeat => 1, ... },
                            { file => 'small/*.gif' },
                            { file => 'small/a.jpg', is_background => 1 },
                        ],
                    },
                    {
                        file                => 'sprite_%d.png',
                        max_sprite_width    => 1000,
                        css_selector_prefix => '#spr-',
                        ...
                        images => [
                            { file => 'small/Add.png', is_repeat => 1, ... },
                        ],
                    },
                ],
            );
    *   config
        Specify XML config filename (it requires XML::LibXML module).
            $builder->build(config => 'config.xml');
        Example of config.xml:
            
                
                    20000
                    packed
                    .spr-
                    /sprite/
                
                
                    
                        
                        
                        
                    
                    
                        
                        
                        
                    
                    
                        
                        
                        
                    
                
            
  write_css([])
    Write CSS to file. When filename parameter is not specified than this
    method returning a string.
        $builder->write_css('sprite.css');
  write_xml([])
    Write CSS sprites info structure into XML format (it requires
    XML::LibXML module). When filename parameter is not specified than this
    method returning a string.
        $builder->write_xml('sprite.xml');
    Example of sprite.xml:
        
            
                
            
        
  write_html([])
    Write HTML sample page. When filename parameter is not specified than
    this method returning a string.
  get_sprites_info()
    This method returning structure like:
        {
            'sample_sprite.png' => [
                {
                    'y' => 0,
                    'width' => 32,
                    'selector' => '.spr-small-add',
                    'is_background' => 0,
                    'x' => 0,
                    'height' => 32,
                    'image' => 'small/Add.png',
                    'repeat' => 'no'
                },
                ...
            ],
            ...
        }
AUTHOR
        Yuriy Ustushenko, 
COPYRIGHT AND LICENSE
    Copyright (C) 2013 Yuriy Ustushenko
    This library is free software; you can redistribute it and/or modify it
    under the same terms as Perl itself.