Als großer Fan des Rubik's Cube und der coolen Kunst habe ich daran gearbeitet, beides zu kombinieren, um ein paar wirklich coole Sachen zu machen. Lösen von Rubiks Miniaturwürfeln, um rudimentäre Pixel bei der Bildung von Rubiks Würfelkunst zu bilden. Beispiele für solche Kunstwerke finden Sie unter folgendem Link: http://google.com/search?q=rubik%27s+cube+art
Der Zweck dieses Code Golf besteht nun darin, Code zu erstellen, der ein Bild als Eingabe akzeptiert und es dann auf folgende Weise konvertiert:
Das Bild wird zunächst auf websichere Graustufenfarben reduziert. Der Grund dafür ist, dass wir die websichere Graustufenpalette (dh 000000, 333333, 666666, 999999, CCCCCC und FFFFFF) isolieren müssen. Ein Algorithmus zur kolorimetrischen Konvertierung in Graustufen ist verfügbar unter: http://en.wikipedia.org/wiki/Grayscale#Colorimetric_.28luminance-preserving.29_conversion_to_grayscale , falls Sie dies als Inspiration verwenden möchten.
Man würde dann die Graustufen auf die entsprechenden Farben rendern. Kurz gesagt: 000000 bezieht sich auf Rubiks Blau, 333333 auf Rubiks Rot, 666666 auf Rubiks Grün, 999999 auf Rubiks Orange, CCCCCC auf Rubiks Gelb und FFFFFF auf Rubiks Weiß.
Ich würde es vorziehen, wenn der resultierende Code von der Palette des Fotos direkt in Rubiks Farben gerendert werden kann. Die zweistufige Methode von der Konvertierung in web-sichere Graustufen und dann in die entsprechende Rubik-Palette dient nur dazu, Ihnen eine Vorstellung von der Logik zu geben, die hinter dem Prozess steckt.
Die tatsächlichen RGB-Werte für die Rubik-Palette müssen den folgenden Angaben entsprechen:
- Rot: # C41E3A
- Grün: # 009E60
- Blau: # 0051BA
- Orange: # FF5800
- Gelb: # FFD500
- Weiß: #FFFFFF
Um Ihnen ein Beispiel zu geben, habe ich Abraham Lincolns Kopf aus dem folgenden Bild abgeschnitten und den Algorithmus so gerendert, dass er Folgendes ergibt :
Das Raster ist vorhanden, damit Sie sehen können, wie die einzelnen Rubik-Miniaturwürfel konfiguriert werden müssten, um das Bild zu erstellen. Die wahre Größe des resultierenden Bildes beträgt 45 x 45 Pixel, was bedeutet, dass (45/3) * (45/3) = 15 * 15 = 225 Miniaturwürfel von Rubik verwendet würden, um dieses Bild zu erstellen. Ich erwarte nicht, dass Sie das resultierende Bild mit einem Gitter präsentieren, wie ich es habe.
Das ist also erforderlich:
Das von diesem Algorithmus zu verarbeitende Bild muss x Pixel breit und y Pixel hoch sein, sodass x und y ein Vielfaches von 3 sind. Dies erleichtert das Rendern als Teil eines Rubik's Cube-Mosaiks. Wenn Ihr Bild sehr groß ist, empfiehlt es sich, es vor der Verarbeitung auf etwa 45 x 45 bis 75 x 75 zu verkleinern. Beachten Sie, dass diese Größenänderungskomponente OPTIONAL ist.
Das Bild muss in die sextakolorierte Rubik-Cube-Palette konvertiert werden, um das Mosaik zu erstellen.
Das resultierende Bild muss nach der Verarbeitung eine gültige Grafikdatei sein. Um zu beweisen, dass Ihr Code funktioniert, führen Sie ihn gegen ein Bild eines Präsidenten der Vereinigten Staaten von Amerika oder eines bekannten Hollywood-Stars aus. Ich habe in meinem Beispiel bereits Abraham Lincoln verwendet, daher kann dieser Präsident nicht mehr verwendet werden. Stellen Sie sicher, dass Sie die Sprache, die Sie verwendet haben, die Byteanzahl sowie den Präsidenten / Prominenten angeben, der zum Testen Ihres Codes verwendet wurde, einschließlich vor und nach den Aufnahmen ...
Jeder Beitrag muss einen eindeutigen Präsidenten / Prominenten als Testfall haben. Ich akzeptiere keine Duplikate. Dadurch wird sichergestellt, dass keine doppelten Ergebnisse zum Testen verschiedener Codeeinträge verwendet werden. Es ist alles sehr gut zu sagen, dass Ihr Code funktioniert, es ist eine andere Sache, um es zu beweisen.
5. Kürzester Code gewinnt.
Ich ändere dies in einen Beliebtheitswettbewerb. Ich möchte lieber sehen, wer dies tun kann, ohne an der Byte-Zählung teilnehmen zu müssen. Also werde ich dies zusammen mit einer Prämie nach dem 28. Februar 2014 vergeben.
quelle
#000000 => #0051BA
Antworten:
Imagemagick (108)
Version: ImageMagick 6.8.7-7 Q16 x86_64 27.11.2013
Der folgende Aufruf:
wo
input
undoutput
müssen für die Eingabe und Ausgabe Dateinamen geändert werden.Ich habe nur die Zeichen zwischen
-resize
und gezählt#FFF"
. Wenn Sie der Meinung sind, dass dies ungültig ist, können Sie dies gerne kommentieren.Ich habe Lenna als Bild benutzt (sie ist in einem Playboy aufgetreten, und jeder, der das tut, sollte als Hollywood-Berühmtheit gelten, oder?)
Eingang:
Ausgabe:
Ausgabe vergrößert:
Anmerkungen: Gemäß den imagemagick-Dokumenten kann eine Anweisung nicht mehr als einen bedingten Operator enthalten, der Aufruf scheint jedoch weiterhin einwandfrei zu funktionieren. Daher wurde dies wahrscheinlich behoben und die Dokumente wurden einfach nicht aktualisiert.
Laufende Identifizierung auf dem Ergebnisbild (um zu zeigen, dass die Farben in der Tat in Ordnung sind):
Wenn Sie denken, Lenna zählt nicht zu den richtigen Prominenten, dann ist hier Bruce Willis:
quelle
fx
Teils in einer Sprache mit besserer Ausdruckskraft noch weiter komprimiert werden können. Und diese Sprachen haben auch native Image-Unterstützung (so dass keine Zeichen verloren gehen, wenn Sie imagemagick / gd / etc. Importieren müssen)Mathematica
Wir werden mit einer quadratischen Region aus einer US-Briefmarke mit Greta Garbo arbeiten. Es wird als bezeichnet
j
.Die Funktion f akzeptiert 3 Parameter:
i
was sich auf das Bild beziehtrs
, die Rastergrößem
Eine boolesche Variable, die angibt, ob Netzlinien verwendet werden sollen. (Die Standardeinstellung ist True).Verwenden der Rastergrößen 15, 30, 45 und 75:
Ich kann mir nicht vorstellen, dass jemand den Würfel einer Rubrik mit so vielen Stücken macht! Trotzdem interessante Übung.
Mit Farben spielen
Dies ist aus einem früheren Eintrag. Der Code ist etwas anders.
Graphics
wird anstelle von verwendetArrayPlot
. Wir verwenden auch den vollen Stempel, obwohl er nicht quadratisch ist.Es gibt 6! = 720 Permutationen der Rubrikenfarben.
Im Folgenden wird das mittlere Bild der oberen Reihe angezeigt (stellen Sie 6 Bilder unten ein). Wenn die Graustufenwerte von dunkel bis hell angeordnet sind, sind die Farben {r, gr, b, o, y, w}. Andere Variationen funktionieren trotzdem.
i
ist das Originalbild in Graustufen.i
ist das ursprüngliche Graustufenbild der vollständigen Greta Garbo-Marke.Rasterize[garbo,RasterSize->75
Rastert das Bild in ein 75 x 75-Array.ColorQuantize[<>, 6]
reduziert die Graustufenwerte auf einen Satz von 6.ImageData
Ruft das Datenarray aus dem Bild ab. es kommt auf den Kopf.Reverse
Kippt das Datenfeld und damit das Bild mit der rechten Seite nach oben.garboColors
sind die 6 Graustufenwerte im quantisierten Bild.Graphics[Raster
zeigt das endgültige Bild an.rubrikColors
sind RGB-Werte der 6 Rubrik Würfelfarben.Verschiedene Farbpermutationen von Rot, Grün, Blau, Orange, Gelb und Weiß sind angegeben.
Und der Code:
Garbos in Hülle und Fülle
Hier sind 72 (von 720) Bildern von Greta Garbo, die die Würfelfarben der 6 Abschnitte verwenden. Manche Bilder funktionieren besser als andere, findest du nicht?
quelle
Reverse
könnte beseitigt werden und das Bild auf den Kopf stellen, aber ich sehe keine anderen Möglichkeiten. Mathematica ist ausdrucksstark, verwendet jedoch große Wörter. Jemand, der sich mit Bildern auskennt, könnte wahrscheinlich die Codegröße ein wenig verringern, aber ich bezweifle, dass sie Ihren Imagemagick-Code übertreffen könnten.i
Halten Sie das Originalbild.gr
steht für Rubrik's grün.g
bezieht sich auf die gerasterten und quantisierten Bilddaten für das Graustufenbild.Smalltalk (Smalltalk / X),
289139 *Eingabe: i; Ausgabe: r
Eingang:
Ausgabe:
vergrößert:
(für alle Jugendlichen: das ist NICHT Madonna ;-)
[*] Ich habe die Vergrößerung nicht auf 75x75 (die erste Zeile) gezählt - hätte eine bereits veränderte Größe als Eingabe verwenden können. Hoffe das ist ok mit dir.
quelle
Postscript und TRUE Rubik Farben! ;-)
Nun, diese Lösung ist hier ein wenig unangebracht, da sie sich auf einen hochspezialisierten Bereich beschränkt. Aber nach viel Frust mit zB "Weird Numbers Question" (da ich nicht in der Lage war, etwas praktisch funktionierendes zu produzieren) entschied ich mich, etwas zu veröffentlichen und zog es so aus meinem Stapel von halbfertigen Skizzen heraus und machte es präsentabel.
Die Lösung nutzt die Tatsache aus, dass in der ersten Überarbeitung dieser Frage die erforderlichen Farben durch Verknüpfung mit einer Site definiert werden, in der eindeutig angegeben ist, dass Pantone (R) -Farben verwendet werden sollen und RGB-Farben nur Näherungswerte sind. Dann dachte ich, warum sollte ich Annäherungen machen, wenn ich echte Farben machen kann? - :)
Dieser Code soll als zB gespeichert
rubik.ps
und dann mit der üblichen Beschwörung an Ghostscript weitergeleitet werden:Es wartet dann in der nächsten Zeile auf die Eingabe des JPG-Dateinamens zB
Wenn alles gut geht, wird die Ausgabe in einer
out.psd
Datei gespeichert.Die Eingabe muss im quadratischen RGB-JPEG-Format (beliebig groß) erfolgen, die Ausgabe erfolgt in PSD-Format mit Sonderfarbkanälen. Sie benötigen Photoshop, um die Datei anzuzeigen. Wenn Sie das GS-Gerät
psdcmyk
auf ein anderes Gerät umstellen, wird nichts Nutzbares erzeugt. JPEG als Eingabe - weil der Postscript-Interpreter den Datenstrom direkt daraus decodieren kann. Quadratische Form - da das Programmsqrt
die Breite (und Höhe) des Bildes anhand der Länge der Zeichenfolge ermittelt.Die ersten Zeilen definieren die Ausgabebildgröße (kann von Standard 75 geändert werden) und die Farbpalette (Farben und deren Anzahl können ebenfalls geändert werden). Alles andere ist nicht fest programmiert, denke ich.
Was ist los? Ein Strom von RGB-Triplets wird im laufenden Betrieb in eine Folge von Graustufenwerten konvertiert (mit einer einfachen Formel). Das übliche 8-Bit-Halbtonbildwörterbuch wird erstellt und verwendet, um 5 identische Bilder in 5
Separation
Farbräumen übereinander zu malen . Der Trick besteht darin, Übertragungsfunktionen vor jedem Aufruf desimage
Operators anzuwenden . Beispiel: Bei gelber Farbe gibt diese Funktion 0 für Eingabewerte nur im Bereich von 0,167 bis 0,333 und 1 für andere Werte zurück.Eingang:
Screenshot der in Photoshop geöffneten Ausgabe 75x75, 800% vergrößert:
Und Photoshop-Kanäle-Palette:
quelle
C #
Sie müssen es mit 3 Parametern ausführen:
foo.exe 75 d:\test.jpg d:\out.png
Wo
75
ist max. width / heightd:\test.jpg
ist die Eingabedatei undd:\out.png
die Ausgabedatei.Ausgabe für verschiedene Bilder in diesem Wettbewerb:
Meine eigene Berühmtheit:
Ausgabe:
Andere Größen (größer als 75 x 75) führen jedoch zu besseren Bildern:
Und wenn wir bei den Präsidenten bleiben:
Da dies kein (mehr?) Codegolf ist, habe ich mich nicht darum gekümmert, den Code zu stark zu "minimieren". Da in den Anweisungen nicht ausdrücklich erwähnt wurde, dass das Bild die gleiche Breite wie die Höhe (Quadrat) haben muss, habe ich mich nicht darum gekümmert, es zu beschneiden. Ich tun , aber sicher, dass das Bild ein Vielfaches von 3 Pixel breit / hoch. Wenn Sie quadratische Bilder wünschen, verwenden Sie quadratische Eingaben . Der Algorithmus ist alles andere als optimal.
Ein paar mehr (da die Leute Hot Chicks / Internet Heroes mehr befürworten )
quelle
Brainfuck
Dies erfordert einen BF-Interpreter / Compiler, der -1 als EOF hat und der mehr als 8-Bit-Zellen hat, WENN eines der roten Pixel 255 ist. Andernfalls wird es vorzeitig beendet, da es nicht in der Lage sein wird, zwischen EOF und Wert 0xFF zu unterscheiden . Mit jitbf haben Sie alles, was die Maschine als Ganzzahl hat, und können dies tun, um -1 als EOF zu erzwingen:
Das gerenderte Bilddateiformat ist die vollständige RGB-PNM-Datei (P6), roh als Option in Gimp.
Es wird nur der grüne Kanal verwendet (eine der vielen Möglichkeiten, ein Farbbild in Graustufen umzuwandeln). Der Wert wird um 43 verringert, ohne dass der Wert unter Null verringert wird, um herauszufinden, welche Rubiks-Farbe verwendet werden soll, und ein Schalter gibt die richtige RBG-Farbe aus, die entspricht.
Bild von Angelina Jolie von Hackers (1995) auf 75x75 verkleinert und mit der Applikation verarbeitet:
Gleiche, nur ich habe die Originalgröße verwendet :
Und da ich hellsichtig bin, ist hier auch ein Präsident:
quelle
Ziel c
Ich habe diese Herausforderung letzte Nacht gesehen und hatte eine etwas verwirrende Zeit damit
-[NSArray indexOfObject:inSortedRange:options:usingComparator:]
, daher die Verzögerung.Ich habe es auf meinem iPad so ausgeführt:
Vorher Nachher
Vorher Nachher
quelle
Python
Format:
python rubik.py <input> <max_cubes> <output>
.Wandelt Pixel in Graustufen um, indem der vorgeschlagene Algorithmus verwendet wird.
Eingang:
(Quelle: ilmamilio.it )
Ausgabe mit
max_cubes = 25
:Ausgabe mit
max_cubes = 75
:Ausgabe mit
max_cubes = 225
:quelle