Gerador de sprite sheets CSS
Gerador de sprite sheets CSS grátis. Junta até 500 imagens num PNG com classes CSS background-position ou um atlas de texturas JSON, sem enviar nada.
Imagens
- Tamanho da folha
- Espaço ocupado
Como criar uma sprite sheet
- Larga as tuas imagens na zona de largar, ou clica nela para as escolher. São aceites PNG, SVG, WebP, JPG e os outros formatos que o teu navegador consegue ler, até 500 imagens. Cada ficheiro aparece na lista Imagens com o seu tamanho; o botão × remove uma imagem e Remover todas as imagens limpa a lista.
- Escolhe uma Disposição: Grelha, Compacta (folha mais pequena), Faixa horizontal ou Faixa vertical. Com Grelha, Colunas (0 = automático) define o número de colunas.
- Define o Espaçamento (px) entre sprites (2 por omissão) e marca Tamanho em potência de dois (256, 512, 1024…) se o teu motor de jogo ou a tua GPU o exigirem.
- Escolhe o Ficheiro de dados: CSS (classes com background-position), JSON (mapa de fotogramas) ou CSS e JSON. Ajusta o Nome do ficheiro e o Prefixo das classes CSS (ambos «sprite» por omissão).
- Confirma a pré-visualização, o Tamanho da folha e o Espaço ocupado e clica em Transferir ZIP (PNG + dados) ou Transferir só o PNG. O Código gerado também pode ser copiado diretamente.
As imagens são descodificadas no teu navegador e nada é enviado. Um SVG sem largura e altura próprias é rasterizado com o lado maior a 256 px.
Escolher uma disposição
- Grelha dá a cada imagem uma célula do tamanho da maior imagem. Com colunas automáticas, a grelha fica aproximadamente quadrada. É simples e previsível, e ideal quando todos os sprites têm o mesmo tamanho, como num tileset.
- Compacta (folha mais pequena) usa empacotamento em prateleiras: as imagens são ordenadas da mais alta para a mais baixa e colocadas da esquerda para a direita, em filas. A ferramenta experimenta muitas larguras de folha e fica com a que tem menor área, tendo em conta o arredondamento a potências de dois quando essa opção está ativa. É a melhor para ícones de tamanhos variados.
- Faixa horizontal e Faixa vertical colocam as imagens numa única linha ou coluna, pela ordem em que as adicionaste. É o que muitos leitores de animação esperam para os fotogramas.
A folha não pode ultrapassar 16 384 px por lado nem cerca de 16,7 megapíxeis, o limite que os navegadores conseguem desenhar.
Usar o CSS
O CSS contém uma classe base com a folha como background-image e no-repeat, e depois uma classe por sprite com o nome do respetivo ficheiro: home.png passa a sprite-home. Os nomes ficam em minúsculas, os acentos são removidos, os outros caracteres passam a hífenes, e os duplicados recebem -2, -3.
<link rel="stylesheet" href="sprite.css">
<span class="sprite sprite-home"></span>
<span class="sprite sprite-search"></span>
Cada classe de sprite define width, height e um background-position com deslocamentos negativos. Um sprite em x = 40, y = 20 recebe background-position: -40px -20px: a folha inteira é deslocada 40 px para a esquerda e 20 px para cima dentro do elemento, por isso só esse sprite aparece na caixa do elemento. O espaçamento impede que os sprites vizinhos apareçam quando a página tem zoom ou quando uma textura é filtrada.
Ecrãs de alta densidade (high-DPI): desenha as imagens com o dobro do tamanho de apresentação, gera a folha, acrescenta à classe base um background-size igual a metade do tamanho da folha e divide por dois as larguras, alturas e deslocamentos. A ferramenta não gera isto; é um ajuste manual.
Os sprites ainda são úteis com HTTP/2?
Os sprites foram inventados para poupar pedidos HTTP. Com a multiplexagem do HTTP/2, muitos ficheiros pequenos carregam quase tão depressa como um só, por isso o ganho para os sites é muito menor, e os ícones SVG ou as fontes de ícones são muitas vezes melhores para ícones escaláveis. As sprite sheets continuam a ser o padrão nos jogos 2D e nos fotogramas de animação: uma única textura significa menos trocas de textura na GPU e um só ficheiro para carregar.
Perguntas frequentes
As minhas imagens são enviadas para algum servidor?
Não. Tudo é descodificado, empacotado e codificado no teu navegador. As imagens nunca saem do teu dispositivo.
Que motores de jogo conseguem ler o JSON?
O JSON usa o formato «JSON hash» do TexturePacker: um objeto frames indexado pelo nome do ficheiro, cada um com frame (x, y, w, h), rotated: false, trimmed: false e sourceSize, mais meta.image e meta.size. O Phaser, o PixiJS e muitos outros motores carregam-no diretamente.
A transparência é mantida?
Sim. A folha é um PNG, por isso os píxeis transparentes continuam transparentes. O xadrez da pré-visualização só mostra onde a folha está vazia.
Porquê usar tamanhos em potência de dois?
As GPU mais antigas e o WebGL 1 precisam de texturas em potência de dois para mipmaps e modos de repetição, e alguns motores ainda as esperam. A opção arredonda a folha para cima: por exemplo, 300 × 70 px passa a 512 × 128 px.
Os sprites são aparados ou rodados?
Não. Cada imagem é colocada tal como está, com as suas margens transparentes, e nunca é rodada, por isso as posições correspondem exatamente aos ficheiros originais.
Ferramentas relacionadas
- Dividir imagem e criar grelha Divide uma imagem numa grelha de partes para o Instagram, um panorama ou um cartaz para imprimir, com pré-visualização dos cortes. Grátis, sem envio.
- Criador de GIF Cria um GIF animado a partir de várias imagens ou de um vídeo curto. Ordena os frames, define atrasos, repetição, tamanho, cores e dithering.
- Criador de colagens de fotos Faz uma colagem com 2 a 9 fotos em grelha ou mosaico, arrasta as fotos para as células, ajusta cada uma e exporta em PNG ou JPG.
- Gerador de favicon Cria o favicon.ico, ícones PNG, o apple-touch-icon e o site.webmanifest a partir de uma imagem ou emoji, com etiquetas HTML prontas. ZIP, sem envio.