C99 (usando SDL e SDL_ttf), 414 354 346 - 15% = 294,1
#include<SDL_ttf.h>
#define Q(P)char*q=#P;P
Q(
i=5;main(){for(SDL_Surface*s=SDL_SetVideoMode(2048,80,SDL_Init(SDL_INIT_VIDEO),TTF_Init());i--;SDL_SaveBMP(s,"q.bmp"))SDL_BlitSurface(TTF_RenderText_Blended(TTF_OpenFont("q.ttf",9),(char*[]){"#include<SDL_ttf.h>","#define Q(P)char*q=#P;P","Q(",q,")"}[i],(SDL_Color){~0}),0,s,&(SDL_Rect){0,16*i});}
)
Isso é muito feio sem mais quebras de linha, mas infelizmente elas precisam estar ausentes. A função de renderização de texto não agrega caracteres de controle, portanto, qualquer quebra de linha no código deve ser renderizada manualmente na saída.
Aqui está o mesmo código, mas com algumas quebras de linha extras para legibilidade:
#include<SDL_ttf.h>
#define Q(P)char*q=#P;P
Q(
i=5;main(){for(SDL_Surface*s=SDL_SetVideoMode(2048,80,
SDL_Init(SDL_INIT_VIDEO),TTF_Init());i--;SDL_SaveBMP(s,"q.bmp"))
SDL_BlitSurface(TTF_RenderText_Blended(TTF_OpenFont("q.ttf",9),
(char*[]){"#include<SDL_ttf.h>","#define Q(P)char*q=#P;P","Q(",q,")"}[i],
(SDL_Color){~0}),0,s,&(SDL_Rect){0,16*i});}
)
Infelizmente, isso também não adiciona quebras de linha à saída gráfica:
A saída ainda é legível, embora com saída de 9 pontos e a cor vermelha da fonte, seja um pouco estridente. Você pode melhorá-lo à custa de um personagem substituindo o 9
por 12
. (Observe que a dimensão da imagem resultante é codificada para 2048x80. Para acomodar as diferenças em várias fontes, um pouco de excesso foi adicionado à margem direita e à esquerda, o suficiente para que uma fonte de tamanho 12 ainda caiba confortavelmente Se você deseja aumentar ainda mais, as dimensões provavelmente precisarão ser alteradas também.)
O comando para criar o programa é:
gcc -Wall -o imgquine imgquine.c -lSDL_ttf `sdl-config --cflags --libs`
O programa assume que existe um arquivo de fonte chamado q.ttf
no diretório atual quando executado. Eu cuidei disso de antemão executando o seguinte comando (que deve funcionar nos mais modernos Linuxes):
ln -s `fc-match --format='%{file}' sans` ./q.ttf
Lembre-se de importar sua própria fonte TrueType favorita.
Após a execução do programa, a saída da imagem será criada no diretório atual, em um arquivo chamado q.bmp
. Infelizmente, os arquivos de bitmap do Windows são o único formato de saída que este programa fornece. Adicionar mais formatos de saída exigiria vinculação em mais bibliotecas.
Observe que este programa tira proveito da sintaxe do C99 para a introdução de valores literais não simples, reduzindo significativamente o número de variáveis que precisam ser definidas. Isso é algo que mais jogadores C devem aproveitar.