#if 0 /*─────────────────────────────────────────────────────────────────╗ │ To the extent possible under law, Justine Tunney has waived │ │ all copyright and related or neighboring rights to this file, │ │ as it is written in the following disclaimers: │ │ • http://unlicense.org/ │ │ • http://creativecommons.org/publicdomain/zero/1.0/ │ ╚─────────────────────────────────────────────────────────────────*/ #endif #include "libc/dce.h" #include "libc/log/log.h" #include "libc/runtime/gc.internal.h" #include "libc/stdio/stdio.h" #include "libc/x/x.h" #include "net/http/escape.h" #include "net/http/http.h" #include "third_party/getopt/getopt.h" #include "third_party/stb/stb_image.h" #define USAGE \ " [FLAGS] IMG...\n\ Utility for printing HTML tags.\n\ \n\ FLAGS\n\ \n\ -h Help\n\ -a Wrap with tag\n\ -u Embed data:base64 URI\n" int scale; bool linktag; bool datauri; bool sizeonly; void PrintUsage(int rc, FILE *f) { fputs("Usage: ", f); fputs(program_invocation_name, f); fputs(USAGE, f); exit(rc); } void PrintImg(const char *path) { size_t n; int opt, i, yn, xn, cn, w, h; void *img, *pix, *src, *mime; if (!(img = gc(xslurp(path, &n)))) exit(2); if (!(pix = gc(stbi_load_from_memory(img, n, &xn, &yn, &cn, 0)))) exit(3); if (linktag) { printf("", path); } src = path; if (datauri) { src = xasprintf("data:%s;base64,%s", FindContentType(path, -1), gc(EncodeBase64(img, n, &n))); } w = (xn + (1 << scale) / 2) >> scale; h = (yn + (1 << scale) / 2) >> scale; if (sizeonly) { printf("width=\"%d\" height=\"%d\"", w, h); } else { printf("\"[%s]\"\n", w, h, path, src); } if (linktag) { printf(""); } printf("\n"); } int main(int argc, char *argv[]) { if (!NoDebug()) ShowCrashReports(); int i; while ((i = getopt(argc, argv, "?huas01234")) != -1) { switch (i) { case '0': case '1': case '2': case '3': case '4': scale = i - '0'; break; case 's': sizeonly = true; break; case 'a': linktag = true; break; case 'u': datauri = true; break; case '?': case 'h': PrintUsage(0, stdout); default: PrintUsage(1, stderr); } } if (optind == argc) { PrintUsage(1, stderr); } for (i = optind; i < argc; ++i) { PrintImg(argv[i]); } }