void getcharacter(void);
/* Global Vars */
char s[6];
FILE *text;
/* Main Program */
int main(int argc, char **argv) {
/* Variables */
FILE *in, *out;
gdImagePtr im;
int c,x,y;
int r1, g1, b1;
int r2=-1, g2=-1, b2=-1;
int needclosefont = 0;
char code = 1;
/* Program header */
printf("------------------------------");
printf( "png2html 1.1");
printf( "------------------------------\n");
printf("Note:\tThis program assumes that 1 pixel should equal 1 character.\n");
printf("\tBut characters are taller than they are wide, so you may want to\n");
printf("\tresize the image first.\n\n");
/* Check for errors... */
if (argc < 4) {
fprintf(stderr, "Usage: %s imagefile.png textfile.txt output.html compatibility\n", argv[0]);
fprintf(stderr, "\tWhere compatibility is either 0, 1 or 2\n");
fprintf(stderr, "\t0 = Small Source, but uncompatibile with some browsers\n");
fprintf(stderr, "\t1 = Medium Size, works with almost anything.\n");
fprintf(stderr, "\t2 = Large Source, strict HTML.\n\n");
exit(1);
};
in = fopen(argv[1], "rb");
if (!in) {
fprintf(stderr, "%s does not exist!\n", argv[1]);
exit(1);
};
if (strncmp(argv[2],"-",1)==0)
text = stdin;
else
text = fopen(argv[2],"r");
if (!text) {
fprintf(stderr, "%s does not exist!\n", argv[2]);
exit(1);
};
if (strncmp(argv[3],"-",1)==0) /* If argument is "-" then output to stdout */
out = stdout;
else
out = fopen(argv[3],"w");
if (!out) {
fprintf(stderr, "%s could not be opened for writing!\n", argv[3]);
exit(1);
};
if (argc == 5) {
code = atoi(&argv[4][0]);
if ((code != 0) && (code != 1) && (code != 2))
fprintf(stderr, "Compatibility level not recognized... using 1.\n");
};
im = gdImageCreateFromPng(in);
fclose(in);
/* HTML Header */
fprintf(out, "\n\n%s\n\n\n", argv[1]);
fprintf(out, "\n");
fprintf(out, "\n");
fprintf(out, "\n");
fprintf(out, "\n\n");
for (y=0;yred[c];
g1 = im->green[c];
b1 = im->blue[c];
if ((r1 != r2) || (g1 != g2) || (b1 != b2)) {
if (code != 0)
if (needclosefont) {
fprintf(out, "");
needclosefont = 0;
};
if (code == 2)
fprintf(out, "", r1, g1, b1);
else
fprintf(out, "", r1, g1, b1);
r2 = r1; /* Contitionally putting in the FONT Tag reduces */
g2 = g1; /* HTML size _DRASTICLY_ */
b2 = b1;
needclosefont = 1;
};
getcharacter();
fprintf(out, "%s", s);
};
fprintf(out, "\n");
};
fprintf(out, "
\n\n\n");
gdImageDestroy(im); /* Clean up stuff */
fclose(text);
fclose(out);
return 0;
}
/* Grab a character from the text file and make sure it's valid */
void getcharacter() {
int c;
c = getc(text);
if (c == EOF) {
fseek(text,0,SEEK_SET); /* When we reach the EOF, go to beginning */
c = getc(text);
};
if (c < 33) {
getcharacter(); /* Recursivly get a new character */
return;
};
if (c > 126) {
getcharacter(); /* Recursivly get a new character */
return;
};
if (c == 60) {
sprintf(s, "<"); /* The '<' will screw up HTML */
return;
};
if (c == 62) {
sprintf(s, ">"); /* The '>' will screw up HTML */
return;
};
sprintf(s,"%c",c); /* Write the character(s) to the string */
}