ASCII ist der Name eines der ursprünglichen Zeichen Kodierungen . Eine Zeichencodierung ordnet Zahlen Zeichenformen zu; Die Zahl 65 ist ein Großbuchstabe A im ASCII-Schema. ASCII erlaubt nur etwa 95 druckbare Zeichen und ist sehr US-zentriert. Aber in den Anfängen der Computertechnik, bevor Bilder erfunden wurden, gab es sie ASCII-Art . Oft auf einem Fernschreiber auf gelbem Papier gedruckt, verwendet JMP blaues Papier.

Walt Disney, Quellbild hier . Danke Wikipedia!
Dieses Skript verwendet Funktionen in JMP 13. Das erste Bit des Codes richtet einige Parameter ein; Sie werden an den Anfang des Skripts verschoben, um das Optimieren der Einstellungen zu vereinfachen.
fontsize = 6; // bigger font has more variation in pixel density but ... is bigger
fontname = "Courier New"; // monospaced fixed width is important for display
fontcolor = RGB Color( 0, 0, 0 ); // black. the characters never go completely black;
backgroundcolor = RGB Color( .75, 1, 1 ); // tinting the background helps darken the image
nlines = 100; // height of result, with big font you'll be scrolling
url = "https://upload.wikimedia.org/wikipedia/commons/d/df/Walt_Disney_1946.JPG";
// grab an image. Thanks wikipedia!
image = Open( url );
Erstellen Sie als Nächstes eine Datentabelle, die beschreibt, wie hell oder dunkel jedes Zeichen in der Schriftart ist. Diese Tabelle hat vier Spalten, und jede ist eine Formelspalte. Der Code Spalte verwendet die Zeilennummer (plus 31), um einen ASCII-Code zu erstellen. Der verkohlen Spalte wandelt den Code in das druckbare Zeichen um, indem sie eine Ein-Element-Matrix des Codes erstellt, diese in Binär umwandelt und diese in Zeichen umwandelt. Unten sehen Sie ein weiteres Beispiel. Der Bitmap Spalte ist eine Ausdrucksspalte, die Bilder der Zeichen enthält. Und zum Schluss das Wichtige nSchwarz Spalte enthält die Anzahl der schwarzen Pixel im Zeichen; Es ruft die Pixelmatrix ab und addiert sie. Da die Zeichen geglättet sind, ist das Ergebnis keine Ganzzahl, aber das macht es noch besser! Nur das rote Pixelarray wird aus der Bitmap abgerufen, da alle drei r,g,b-Arrays für schwarzen Text auf weißem Hintergrund identisch sein sollten.
// build a table of ascii codes, sorted by pixel density
dt = New Table( "ASCII",
Add Rows( 95 ), // space thru just before rub-out
New Column( "code", numeric, formula( Row() + 31 ) ), // space is 32
New Column( "char", Character, "Nominal", Formula( Blob To Char( Matrix To Blob( code::code, "uint", 1, "big" ) ) ) ), // num to ascii
New Column( "bitmap", Expression, formula( Text Box( char, <<SETFONTSIZE></SETFONTSIZE>
Entfernen Sie einige Zeilen aus der Tabelle. Wenn keine Vokale vorhanden sind, werden ablenkende Buchstabenkombinationen möglicherweise nicht angezeigt, und bei einigen Zeichen, wie z. Ich habe die Schleife rückwärts geschrieben, weil ich dachte, ich würde Zeilen auf dem Weg löschen. Dann habe ich herausgefunden, wie selectRows und deleteRows funktionieren.
// remove vowels so words don't appear, and a couple of off-center characters so empty spots don't appear
For( r = N Rows( dt ), r >= 1, r--,
If( Contains( "AEIOUYaeiouy_`", dt:char[r] ),
dt << selectrows( r )
)
);
dt << DeleteRows;
Komme jetzt in die Nähe. Skalieren Sie das Bild (oben geladen), stellen Sie sicher, dass es Graustufen sind, und verwenden Sie jedes Graustufenpixel, um einen Buchstaben aus der Tabelle auszuwählen. Da NRows(dt) in der Indexberechnung verwendet wird, werden die gelöschten Zeilen berücksichtigt. Die Variable Indizes enthält eine 2D-Matrix von Zeilennummern (Indizes) in der Datentabelle. Matrixmagie in der letzten Zeile; dt:code[ ] ist eine 1D-Matrix, aber durch eine 2D-Matrix indiziert. Das Ergebnis ist eine 2D-Matrix aus nachgeschlagenen Codes.
// prepare the image, size, grayscale, look up letters for pixels
{oldx, oldy} = image << getsize; // need the old size to make a scale factor for resizing
image << scale( (nlines * 1.3) / oldx, nlines / oldy ); // stretch horz because font stretches vert
{r, g, b} = image << getPixels( "rgb" ); // in case the image isn't gray scale
gray = .30 * r + .59 * g + .11 * b; // 0..1 gray scale with 0:black and 1:white
indexes = Round( 1 + (N Rows( dt ) - 1) * gray ); // get indexes into the data table (descending needed here!)
codes = dt:code[indexes]; // the heavy lifting is in this line: get the ascii codes (still numbers)
An diesem Punkt ist das Bild fertig; es muss nur angezeigt werden. Dadurch wird ein JMP-Fenster mit Anzeigefeldern erstellt, die gezwungen sind, dieselbe Schriftart mit fester Breite zu enthalten, für die die Datentabelle geplant war. Sie sehen wieder die blobToChar/MatrixToBlob-Konstruktion, aber diesmal mit mehreren Codes/Zeichen aus einer Zeile der Codematrix. r,0 bedeutet alle Spalten der Zeile r.
// generate the displaybox tree
vl = V List Box( Button Box( url, Web( url ), <<UNDERLINESTYLE></UNDERLINESTYLE>
Das ist es.