Erstellen Sie ein Programm oder eine Funktion, die den Dateinamen als Argument verwendet oder von der Standardeingabe liest und die folgende Aufgabe ausführt:
- Liest das Bild aus einer PNG-Datei (Name als Argument angegeben).
- Vertauschen Sie die Farben in diesem Bild, sodass beispielsweise Dunkelgrün (0, 75, 30) zu (255, 180, 225) wird (da 255-0 = 255, 255-75 = 180 und 255-30 = 225). Sie sollten den Alpha-Kanal-Wert nicht ändern.
- Gib das Bild in eine Datei mit dem Namen
a.png
(im PNG-Format) aus oder zeige es im GUI-Fenster.
Das ist Code-Golf . Es gelten Standardlücken.
code-golf
graphical-output
image-processing
Hannes Karppila
quelle
quelle
Antworten:
ImageMagick
display -fx
, 371824BytesDas ImageMagick-Tool
display
mit demfx
Parameter kann das obige Programm auf eine als Parameter angegebene PNG anwenden und die Ergebnisse auf dem Bildschirm anzeigen.Schauen Sie sich meinen Beitrag auf Meta zu ImageMagick als Programmiersprache an. Dort schrieb ich einen Prime Tester als Proof of Concept.
Re-Byte-Zählung
display -fx code filename
entsprichtperl -e code filename
, wo wir traditionell nurcode
für Länge zählen.quelle
Pyth,
161513 BytesAusgänge zu
a.png
.Danke an Jakube für 2 Bytes!
quelle
~
oder ähnliches)?.w-LLL255'z\a
. Aber frag mich nicht, wie das funktioniert oder warum duLLL
etwas brauchst und nicht wieLMM
.MATL , 10 Bytes
Es gibt fünf verschiedene PNG- Unterformate , je nachdem, wie die Farben codiert werden. Keiner von ihnen scheint "optionaler" zu sein als die anderen. Ich habe die flexibelste gewählt
Truecolor
, bei der jedes Pixel eine beliebige Farbe haben kann. Der obige Code unterstützt auch dasTruecolor with alpha
Ignorieren des Alphakanals.So ermitteln Sie das Farbunterformat einer PNG-Datei: Suchen Sie nach der Bytefolge
[73 72 68 82]
am Anfang der Datei. und das zehnte Byte von dort hat einen der fünf Werte in der oben verlinkten Tabelle .Wie der Code funktioniert
Ziemlich einfach:
Beispiel
Ich konnte nicht widerstehen, mich invertiert zu sehen, also lud ich dieses Bild (das im Unterformat ist
Truecolor with alpha
) herunter , ließ den Code laufen (zweite Zeile ist Benutzereingabe)und bekam
quelle
Java, 295
quelle
java.io.File
?import java.io.*;
, speichert keine Bytes, sondern erhöht die Größe.R, 124 Bytes
Liest den Dateinamen über stdin (
readline()
) ein.Beispiel Eingabe / Ausgabe mit dem ersten PNG, das ich auf diesem Computer gefunden habe :)
quelle
CSS, 19 Bytes
http://output.jsbin.com/suqayudoyu
quelle
Tcl, 176 Bytes
Lädt die PNG über den
photo
Bildtyp, ruft die Bilddaten ab, konvertiert jede Zeile und Farbe durch Subtrahieren von #FFFFFF und schreibt die Datei zurück auf die Festplatte (als "a.png").Verwenden Sie TrueColor PNGs, um die besten Ergebnisse zu erzielen, da Tk versucht, die gleiche Farbauflösung wie die Quellbilddaten zu verwenden.
Fügen Sie hinzu, um das Bild ohne Stichprobenprobleme anzuzeigen
bis zum Ende. (Dies ist natürlich länger als die Option zum Speichern von Datenträgern.)
quelle
foreach
durchlmap
Mathematica, 140 Bytes
quelle
Import[#]
aufImport@#
und für ändernColorCombine[Most@#]
.ColorNegate@*Import
nicht eine vollständige Antwort?cmd + IrfanView, 19 Zeichen
Gerade die teure Alternative von Sparr ‚s Antwort .
quelle
Julia,
9479 BytesDies ist ein vollständiges Programm, das einen Dateinamen als Befehlszeilenargument verwendet und die angegebene Datei mit dem invertierten Bild überschreibt. Es setzt voraus , dass die
FileIO
undImage
Paket installiert werden. Letzteres muss jedoch nicht importiert werden.Rufen Sie das Programm über die Kommandozeile wie folgt auf
julia filename.jl /path/to/image.png
.Ungolfed:
Beispiel:
quelle
Python + PIL, 85 Bytes
Dies definiert eine anonyme Funktion, die einen Dateinamen als Zeichenfolge verwendet und das resultierende Bild in speichert
a.png
.Testlauf:
quelle
from PIL import Image as I
, gefolgt durch das ErsetzenImage
in der Funktion mitI
import Image
funktioniert und eine ganze Menge Bytes wegnimmtfrom PIL.Image import*
eval
läuft die Funktion gegen alle "Bänder", einschließlich der Alpha-Band. Folgendes erhalteC + stb_image + stb_image_write,
175162 Bytes (oder + 72 =247234)Meine erste Einsendung auf dieser Seite.
Könnte wohl ein paar Bytes abschneiden. Die
stb_*
Implementierung muss entweder in einer separaten Bibliothek oder am Anfang dieser Datei erfolgen mit:Ich habe es nicht in die Zählung aufgenommen, da es im Wesentlichen Teil der Bibliothek ist (insbesondere, wenn es separat kompiliert wurde). +72 Bytes, um dies bei Bedarf hinzuzufügen.
Update 1:
Realisiert, dass nur eine Funktion (im Gegensatz zu einem gesamten Programm) akzeptabel ist und 15 Bytes wegnimmt. Die alte Implementierung (die ein gesamtes Programm ist) dient als Referenz:
quelle
Java,
300298 Bytesquelle
MATLAB / Octave, 31 Bytes
Code:
Beispiel:
Erläuterung:
Lesen Sie das Bild
x
aus einer Grafikdatei, ergänzen Sie das Bild und zeigen Sie es dann an.quelle
x
vordefiniert ist, was nicht zulässig ist. Sie können es mit in eine Lambda-Funktion für +4 Bytes verwandeln@(x)
.FFmpeg, 10 Bytes
Bearbeiten: Nehmen Sie ein Stichwort aus @ Sparrs Antwort
(Wenn das obige Feld zusammen mit dem Bildnamen an ffplay übergeben wird, wird das negierte Bild angezeigt.)
Das Obige wird als Batch-Datei gespeichert.
quelle
Schläger 282 Bytes
Mehr lesbare Form:
Verwendung:
quelle
Golang, 311 Bytes
ungolfed
quelle
Python 2 + OpenCV , 55 Byte
Die OpenCV-Bibliothek verwendet NumPy-Arrays zum Lesen, Verarbeiten und Schreiben von Bildern. Unten sehen Sie ein Beispiel für dieses Skript, das ein auf mozilla.org gefundenes Bild invertiert .
Alle Kanäle, einschließlich des Alphakanals, werden invertiert. Dies ist problematisch für Bilder mit Transparenz. Wie @Mego jedoch ausführte, ist die Unterstützung des Alpha-Kanals optional.
Unten finden Sie eine kommentierte 82-Byte-Version, die den Alphakanal verarbeitet.
Wie unten gezeigt, wird das Umkehren des Firefox-Logos ordnungsgemäß gehandhabt, während der transparente Hintergrund beibehalten wird.
quelle