moebius-web

web based ansi art editor

moebius-web

public/scripts/savers.js


var Savers = (function () {
    "use strict";

    // function toANSFormat(input) {
    //     var highest, inputIndex, end, charCode, fg, bg, bold, blink, currentFg, currentBg, currentBold, currentBlink, attribs, attribIndex, output;
    // 
    //     function ansiColor(binColor) {
    //         switch (binColor) {
    //         case 1:
    //             return 4;
    //         case 3:
    //             return 6;
    //         case 4:
    //             return 1;
    //         case 6:
    //             return 3;
    //         default:
    //             return binColor;
    //         }
    //     }
    // 
    //     highest = getHighestRow(input);
    //     output = [27, 91, 48, 109];
    //     for (inputIndex = 0, end = highest * 80 * 3, currentFg = 7, currentBg = 0, currentBold = false, currentBlink = false; inputIndex < end; inputIndex += 3) {
    //         attribs = [];
    //         charCode = input[inputIndex];
    //         fg = input[inputIndex + 1];
    //         bg = input[inputIndex + 2];
    //         if (fg > 7) {
    //             bold = true;
    //             fg = fg - 8;
    //         } else {
    //             bold = false;
    //         }
    //         if (bg > 7) {
    //             blink = true;
    //             bg = bg - 8;
    //         } else {
    //             blink = false;
    //         }
    //         if ((currentBold && !bold) || (currentBlink && !blink)) {
    //             attribs.push([48]);
    //             currentFg = 7;
    //             currentBg = 0;
    //             currentBold = false;
    //             currentBlink = false;
    //         }
    //         if (bold && !currentBold) {
    //             attribs.push([49]);
    //             currentBold = true;
    //         }
    //         if (blink && !currentBlink) {
    //             attribs.push([53]);
    //             currentBlink = true;
    //         }
    //         if (fg !== currentFg) {
    //             attribs.push([51, 48 + ansiColor(fg)]);
    //             currentFg = fg;
    //         }
    //         if (bg !== currentBg) {
    //             attribs.push([52, 48 + ansiColor(bg)]);
    //             currentBg = bg;
    //         }
    //         if (attribs.length) {
    //             output.push(27, 91);
    //             for (attribIndex = 0; attribIndex < attribs.length; ++attribIndex) {
    //                 output = output.concat(attribs[attribIndex]);
    //                 if (attribIndex !== attribs.length - 1) {
    //                     output.push(59);
    //                 } else {
    //                     output.push(109);
    //                 }
    //             }
    //         }
    //         output.push(charCode);
    //     }
    //     return new Uint8Array(output);
    // }

    function imageDataToDataURL(imageData, noblink) {
        var bytes, i, j, flags;
        bytes = new Uint8Array((imageData.width * imageData.height * 2) + 11);
        flags = noblink ? 8 : 0;
        bytes.set(new Uint8Array([88, 66, 73, 78, 26, (imageData.width & 0xff), (imageData.width >> 8), (imageData.height & 0xff), (imageData.height >> 8), 16, flags]), 0);
        for (i = 0, j = 11; i < imageData.data.length; i += 3, j += 2) {
            bytes[j] = imageData.data[i];
            bytes[j + 1] = imageData.data[i + 1] + (imageData.data[i + 2] << 4);
        }
        return "data:image/x-bin;base64," + btoa(String.fromCharCode.apply(null, bytes));
    }

    return {
        "imageDataToDataURL": imageDataToDataURL
    };
}());

Download

raw zip tar