--- /dev/null
+/*
+
+Command line tool to convert between png <> qoi format
+
+Requires "stb_image.h" and "stb_image_write.h"
+Compile with:
+ gcc qoiconv.c -std=c99 -O3 -o qoiconv
+
+Dominic Szablewski - https://phoboslab.org
+
+
+-- LICENSE: The MIT License(MIT)
+
+Copyright(c) 2021 Dominic Szablewski
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files(the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and / or sell copies
+of the Software, and to permit persons to whom the Software is furnished to do
+so, subject to the following conditions :
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
+*/
+
+
+#define STB_IMAGE_IMPLEMENTATION
+#define STBI_ONLY_PNG
+#define STBI_NO_LINEAR
+#include "stb/stb_image.h"
+
+//#define STB_IMAGE_WRITE_IMPLEMENTATION
+//#include "stb_image_write.h"
+
+#define QOI_IMPLEMENTATION
+#include "phoboslab/qoi.h"
+
+
+#define STR_ENDS_WITH(S, E) (strcmp(S + strlen(S) - (sizeof(E)-1), E) == 0)
+
+int main(int argc, char **argv) {
+ if (argc < 3) {
+ printf("Usage: qoiconv <infile> <outfile>\n");
+ printf("Examples:\n");
+ printf(" qoiconv input.png output.qoi\n");
+ printf(" qoiconv input.qoi output.png\n");
+ exit(1);
+ }
+
+ stbi_set_flip_vertically_on_load(1);
+
+ void *pixels = NULL;
+ int w, h, channels;
+ if (STR_ENDS_WITH(argv[1], ".png")) {
+ pixels = (void *)stbi_load(argv[1], &w, &h, &channels, 4);
+ }
+ else if (STR_ENDS_WITH(argv[1], ".qoi")) {
+ qoi_desc desc;
+ pixels = qoi_read(argv[1], &desc, 0);
+ channels = desc.channels;
+ w = desc.width;
+ h = desc.height;
+ }
+
+ if (pixels == NULL) {
+ printf("Couldn't load/decode %s\n", argv[1]);
+ exit(1);
+ }
+
+ int encoded = 0;
+ if (STR_ENDS_WITH(argv[2], ".png")) {
+ //encoded = stbi_write_png(argv[2], w, h, channels, pixels, 0);
+ }
+ else if (STR_ENDS_WITH(argv[2], ".qoi")) {
+ encoded = qoi_write(argv[2], pixels, &(qoi_desc){
+ .width = w,
+ .height = h,
+ .channels = 4,
+ .colorspace = QOI_SRGB
+ });
+ }
+
+ if (!encoded) {
+ printf("Couldn't write/encode %s\n", argv[2]);
+ exit(1);
+ }
+
+ free(pixels);
+ return 0;
+}