Welche Farbe ist das?

9

Sie müssen ein Programm spielen, das einen Dateinamen als Eingabe verwendet, und Sie müssen ausgeben, welche Farbe die Datei hat.

Die Datei hat eine dieser Erweiterungen, aber Ihr Programm muss nur eine unterstützen. Bitte sagen Sie, welche in Ihrer Antwort.

  • .jpg
  • .png
  • .svg
  • .gif
  • .bmp

Und nun zum klassischen Layout.

Eingang

Ein Dateiname mit einer der oben genannten Erweiterungen.

Sie können stattdessen auch ein Bildobjekt oder ein bereits codiertes Bild aufnehmen.

Ausgabe

Die einzige Farbe in dieser Datei ist ein 6-stelliger Hex-Code mit einem optionalen führenden #z#000000 ist Schwarz.

Sie können auch eine Liste / ein Tupel / eine Zeichenfolge ausgeben, die / die die Dezimal- oder Hexadezimalwerte der RGB-Farbe enthält, mit einem klaren, nicht numerischen Trennzeichen, z , | etc

Möglicherweise geben Sie die Transparenz nicht aus.

Wenn die Datei nicht nur eine Farbe hat, müssen Sie einen falschen Wert ausgeben, der nicht vorhanden ist, #000000und beenden, ohne etwas zu drucken STDERR. Auf diese Weise können Sie die Datei nicht einfach öffnen und den RGB-Wert des ersten Pixels abrufen.

Regeln

  • Der Hex-Code muss nur ausgegeben werden, wenn die Datei nur eine Farbe hat.
  • Die Datei besteht aus 500x500Pixeln
  • Die Pixel haben alle eine Transparenz von 0%.
  • Dies ist also gewinnt der kürzeste Code!

Beispiele

Caird Coinheringaahing
quelle
7
Die Datei, die nicht alle eine Farbe hat, scheint mir nur eine unnötige Komplikation zu sein. Und ein Falsey-Wert in stark typisierten Sprachen, z. B. C #, kann nur a sein bool. Für diesen Fall würde ich ein stringfür den Normalfall und boolfür den nicht normalen Fall zurückgeben, eingewickelt in ein object. Ist das in Ordnung oder kann ich eine leere Zeichenfolge oder ähnliches zurückgeben?
TheLethalCoder
5
Außerdem schlage ich vor, Ihre Bilder auf i.stack.imgur.com hochzuladen (mein Programm kann das Bild nicht von Pasteboard entfernen)
user41805
1
Wir haben einen Standardstandard für die Bildeingabe, den Sie in unserem Meta hier finden . Es unterscheidet sich nicht wesentlich von dem, was Sie haben, aber Sie möchten möglicherweise einen Link zu dem von Ihnen bereitgestellten Link erstellen.
Pavel
6
@Ilikemydog Es ist wichtig. Wenn die Ausgabe "Die einzige Farbe in dieser Datei" lautet, gehen die Antwortenden davon aus, dass das Bild eine einzige Farbe enthält. Dann widersprechen die Regeln dem. Auf der anderen Seite wäre es viel klarer, wenn der Ausgabeabschnitt so etwas wie "Die einzige Farbe in dieser Datei oder einen anderen falschen Wert als ... wenn das Bild mehr als eine Farbe enthält" lautet. Oder, wie xnor es so treffend ausdrückt, es ist verwirrend, wenn der Körper der Herausforderung eine Sache sagt, aber ein späterer Teil eine andere sagt
Luis Mendo
2
Sollen wir davon ausgehen, dass alle Dateien immer 3-Kanal-RGB-Dateien (jeweils 8 Bit) sind?
Octopus

Antworten:

6

MATL , 15 12 Bytes

Yi6Bed~?2MYm

Getestet mit den in der Challenge angegebenen ".png" -Bildern. Es funktioniert wahrscheinlich auch mit anderen Erweiterungen. Die Eingabe kann ein Dateiname oder eine URL des Bildes sein.

Die Ausgabe erfolgt durch durch Leerzeichen getrennte Dezimalwerte R, G, B oder die leere Zeichenfolge (die falsch ist), wenn mehr als eine Farbe vorhanden ist.

Beispiel mit ersten und letzten Testfällen:

Geben Sie hier die Bildbeschreibung ein

Erläuterung

Yi      % Implicitly input filename. Read image as an M×N×3 array
6B      % Push [true true false] (6 in binary)
e       % Reshape. This collapses firsts two dimensions. Gives an (M*N)×3 array
d       % Consecutive diferences down each column. Gives an an (M*N-1)×3 array
~?      % If all those differences are zero (this means there is a single color)
  2M    %   Push the (M*N)×3 array again
  Ym    %   Mean of each column
        % Implicit end
        % Implicitly display
Luis Mendo
quelle
Hat dies die Prüfung für das Falsey-Bild?
TheLethalCoder
1
@ TheLethalCoder Gelöst. Vielen Dank für das Heads-up
Luis Mendo
You may also take an image object or already encoded image instead.OP aktualisiert kann möglicherweise Bytes speichern ...
TheLethalCoder
@ TheLethalCoder Danke. Ich denke nicht, dass es bei dieser Antwort hilft, es sei denn, ich könnte das M×N×3Array direkt eingeben, was wahrscheinlich nicht das ist, was das OP bedeutet
Luis Mendo
1
12 Bytes?! Nun, heilige Hölle!
Shaggy
4

Bash + Core-Utils + Imagemagick, 60

a=(`convert $1 txt:|sort -uk3`)
((${#a[@]}-9))||echo ${a[2]}

Gibt die Farbe aus, wenn eine Farbe vorhanden ist, und nichts, wenn mehr als eine Farbe vorhanden ist.

  • convert $1 txt: liest die Eingabedatei und gibt sie als Textdatei aus, speziell in diesem Format:
# ImageMagick-Pixelaufzählung: 500.500.255, srgba
0,0: (245,236,236,1) # F5ECEC srgba (245,236,236,1)
1,0: (245,236,236,1) # F5ECEC srgba (245,236,236,1)
2,0: (245,236,236,1) # F5ECEC srgba (245,236,236,1)
3,0: ​​(245,235,235,1) # F5EBEB srgba (245,235,235,1)
4,0: (245,235,235,1) # F5EBEB srgba (245,235,235,1)
  • sort -uk3sortiert dies eindeutig nach der dritten Spalte. Diese Ausgabe ist einem Array zugeordneta

  • ((${#a[@]}-9)) testet, ob das Array NICHT die Länge 9 hat

  • Wenn das Array NICHT NICHT die Länge 9 hat (dh die Länge 9 hat), wird das Element 2 (0-basiert) ausgegeben, das die eindeutige Farbe hat.

Digitales Trauma
quelle
1
Oh mein Gott, das ist beeindruckend.
MD XF
4

JavaScript (ES6) + HTML, 315 289 243 218 217 215 211 210 208 Byte

Wenn Sie überprüfen, ob alle Pixel identisch sind, werden viele Bytes hinzugefügt . Es ist nicht viel größer als damals, als ich nur die Farbe des ersten Pixels überprüft habe - glücklich damit :)

Nimmt die URL (absolute, relative, Daten oder etwas , das als das verwendet werden kann , srceines img) der Bilddatei als Eingabe. Gibt die RGB-Farbe als durch Kommas getrennte Zeichenfolge oder 0für Falsey aus. Getestet mit PNG-Dateien, sollte aber auch mit JPG & GIF funktionieren.

u=>(a=[...Array(c.width=c.height=500)]).map((_,x)=>a.map((_,y)=>(v=""+[(d=g.getImageData(x,y,1,1).data)[0],d[1],d[2]],h=x&y?v!=h?0:h:v)),i.src=u,(g=c.getContext`2d`).drawImage(i,0,0))&&h
<img id=i><canvas id=c

Versuch es

Erfordert das Hinzufügen eines Abschlusses >für das canvasElement, um in einem Snippet arbeiten zu können. Da das Abrufen von Bildern aus externen Quellen zu einem Fehler führen würde, werden im Folgenden stattdessen Base-64-Daten-URLs als Eingabe verwendet. Kommentieren Sie die letzte Zeile aus, um auf verschiedene Farben zu testen, indem Sie ein Bild verwenden, das aus den 4 Testfarben besteht.

f=
u=>(a=[...Array(c.width=c.height=500)]).map((_,x)=>a.map((_,y)=>(v=""+[(d=g.getImageData(x,y,1,1).data)[0],d[1],d[2]],h=x&y?v!=h?0:h:v)),i.src=u,(g=c.getContext`2d`).drawImage(i,0,0))&&h
console.log(f("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAfQAAAH0AQMAAADxGE3JAAAAA1BMVEUWwpMvG5UqAAAANUlEQVR42u3BMQEAAADCIPun9lkMYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA5fQAAASJ0bysAAAAASUVORK5CYII"))
//console.log(f("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAfQAAAH0AgMAAAC2uDcZAAAADFBMVEWLFsIWwpOVkJCE8Az9F2TyAAABB0lEQVR42uzNIQEAMAwDsEk8ucmTS9xElAwkBlI3cipit9vtdrvdbrfb7Xa73W632+12u91ut9vtdrvdbrfb7Xa73W632+12u91ut9vtdrvdbrfb7Xa73W632+12u91ut9vtdrvdbrfb7Xa73W632+12u91ut9vtdrvdbrfb7Xa73W632+12u91uX72/yO+I3W632+12u91ut9vtdrvdbrfb7Xa73W632+12u91ut9vtdrvdbrfb7Xa73W632+12u91ut9vtdrvdbrfb7Xa73W632+12u91ut9vtdrvdbrfb7Xa73W632+12u91ut9vtdrvdPhu1fdT2UdtHbR+1fdT2UdsHs+0AqVGfBnNZ7+UAAAAASUVORK5CYII"))
<img id=i><canvas id=c>

Zottelig
quelle
A filename with one of the above extensions.-> Sind Sie sicher, dass Sie das Bild als codierte Zeichenfolge verwenden können, anstatt es aus einer Datei zu laden?
TheLethalCoder
1
@ TheLethalCoder, nein! : D Und jetzt, wo Sie es sagen, kann ich sehen, wie ich ein paar Bytes sparen kann :)
Shaggy
You may also take an image object or already encoded image instead.OP aktualisiert kann möglicherweise Bytes speichern ...
TheLethalCoder
@TheLethalCoder, ich konnte "data:image/png;base64,"+meinen Code heraushacken, indem ich stattdessen Eingaben als URL nahm.
Shaggy
3

Python 2, 80 Bytes

from PIL import Image
i=Image.open(input()).getcolors(1)
print i and i[0][1][:3]

PIL.Image verfügt über eine getcolors-Funktion, die zurückgibt, Nonewenn die Anzahl der Farben größer als der Parameter ist, und ein Histogramm der Farben in einer [(pixels, (r,g,b,a)), ...]Struktur zurückgibt .

Gábor Fekete
quelle
You may also take an image object or already encoded image instead.OP aktualisiert kann möglicherweise Bytes speichern ...
TheLethalCoder
@TheLethalCoder Also sollte ich dann ein bereits geöffnetes Bild annehmen und einfach schreiben print i and i[0][1][:3]?
Gábor Fekete
Ich würde annehmen, dass Sie den Aufruf zum
Abrufen von
3

Mathematica, 55 51 Bytes

-4 dank CalculatorFeline

+0 für das Refactoring in die volle Funktion.

Verwenden des Mathematica-Bildobjekts als Eingabe - Import["filename.png"].

If[Length@#==1,#,0]&@Union[Join@@ImageData@#]&

Gibt 0 zurück, wenn nicht alle eine Farbe. Gibt den Dezimalwert der Farbe aus, wenn nur einer.

Erläuterung:

                                 ImageData@# & - Convert input into 2D array of RGB values
                           Join@@              - Join the array into 1D array f RGB values
                     Union[                 ]  - Union all the RGB values
   Length@#        &@                          - Find length of the union of arrays
If[        ==1,#,0]                            - Check if its 1, return it if true, return 0 if not
Ian Miller
quelle
a==1== a<2und Join@@entspricht ~Flatten~1in diesem Fall. (Join-Pausen, wenn die Liste Nichtlisten enthält.)
CalculatorFeline
Standardmäßig ist eine vollständige Funktion oder ein Programm erforderlich. Um ein bereits dekodiertes Bildobjekt zu verwenden, müssten Sie meiner Meinung nach noch etwas tun wieIf[Length@#==1,#,0]&@Union[ImageData@#~Flatten~1]&
Julian Wolf
Ich habe den Kommentar des OP falsch interpretiert You may also take an image object or already encoded image instead.. Werde Dich auf dem Laufenden halten.
Ian Miller
@CalculatorFeline Danke für den Hinweis Join@@.
Ian Miller
2

Java 8+, 331 165 119 Bytes

i->{Integer j=i.getRGB(0,0),k=500,l;for(;k-->0;)for(l=500;l-->0;)if(i.getRGB(k,l)!=j)return"";return j.toHexString(j);}

-Viele Bytes danke an @LethalCoder für die Aktualisierung einer Regeländerung, die viel Golfen ermöglichte
-46 Bytes dank @KevinCruijssen und behobenem Tippfehler

HyperNeutrino
quelle
You may also take an image object or already encoded image instead.OP aktualisiert kann möglicherweise Bytes speichern ...
TheLethalCoder
@ TheLethalCoder Oh perfekt. Vielen Dank!
HyperNeutrino
Ich weiß, es ist eine Weile her, aber einige Dinge zum Golfen (ohne die Java 7-Version zu ändern) : Object f(java.awt.image.BufferedImage i){Integer j=i.getRGB(0,0),k=500,l;for(;k-->0;)for(l=500;l-->0;)if(i.getRGB(k,l)!=i)return"";return j.toHexString(j);}. Durch Ändern der Java - Version 8+, können Sie auch ändern Object f(java.awt.image.BufferedImage i)zu i->. Außerdem glaube ich , Sie einen Tippfehler gemacht haben: sollte nicht if(i.getRGB(k,l)!=i)sein , !=jstatt?
Kevin Cruijssen
@ KevinCruijssen Danke. Und ja, ich glaube schon: P
HyperNeutrino
1
@HyperNeutrino Sie haben vergessen, es auf Java 8 (oder höher) zu ändern. ;)
Kevin Cruijssen
1

Python 2 , 123 85 Bytes

from PIL import Image
c=Image.open(input()).getdata()
print len(set(c))<2and c[0][:3]
Stange
quelle
You may also take an image object or already encoded image instead.OP aktualisiert kann möglicherweise Bytes speichern ...
TheLethalCoder
Ich würde vom PIL-Import * erwarten, dass er ein paar Bytes spart (oder alternativ PIL importiert und dann c = PIL.Image), es sei denn, ich übersehen etwas
Foon
@Foon PIList eine Ausnahme für die Einfuhr, können Sie nicht tun , from PIL import*nochPIL.
Rod
Vielen Dank; wusste das nicht oder vergaß es zumindest
Foon
Inkonsistenz ist schrecklich :(
CalculatorFeline
1

C #, 163 128 125 Bytes

b=>{var c=b.GetPixel(0,0);for(int w=500,h;w-->0;)for(h=500;h-->0;)if(b.GetPixel(w,h)!=c)return"";return c.R+" "+c.G+" "+c.B;}

3 Bytes dank @Kevin Cruijssen gespeichert.

Wenn wir nicht zusätzlich prüfen müssten, ob das Bild die gleichen Farben hat, sind dies nur 55 Bytes:

b=>{var c=b.GetPixel(0,0);return c.R+" "+c.G+" "+c.B;};
TheLethalCoder
quelle
Ich weiß, es ist eine Weile her, aber: b=>{var c=b.GetPixel(0,0);for(int w=500,h;w-->0;)for(h=500;h-->0;)if(b.GetPixel(w,h)!=c)return"";return c.R+" "+c.G+" "+c.B;}(-3 Bytes)
Kevin Cruijssen
0

Mathematica, 112 Bytes

Bild

i = Importiere @ "c: \ a.png";

If[Length@DominantColors@i==1,"#"<>StringPadLeft[IntegerString[Most@PixelValue[i,{1,1},"Byte"],16],2,"0"],False]
J42161217
quelle
You may also take an image object or already encoded image instead.OP aktualisiert kann möglicherweise Bytes speichern ...
TheLethalCoder
in Ordnung. Ich habe einige
Änderungen
Ist Hex in Kleinbuchstaben akzeptabel?
user202729
Most@PixelValue[i, {1, 1}, "Byte"]spart einige Bytes.
user202729
103 Bytes: If[Length@Tally[a=i~ImageData~"Byte"]<2,"#"<>StringPadLeft[Most@a[[1,1]]~IntegerString~16,2,"0"],False]- Verwenden Sie Ihre ImageData-Funktion. Wusste nicht, dass es das gibt.
user202729
0

Bash + ImageMagick, 100 Bytes

i=$(expr `identify -format "%k" $1` = 1)&&convert $1 -format "%c" histogram:info:-|grep -o "#......"

Getestet mit .png, sollte auch mit den anderen Formaten funktionieren. Die Ausgabe für ein polychromatisches Bild ist einfach eine leere Zeichenfolge.

3141
quelle
Sie können die Anführungszeichen aus den Formatbezeichnern entfernen. Ist auch ((`identify -format %k $1`-1))||kürzer als i=$(expr `identify -format "%k" $1` = 1)&&.
Digitales Trauma
0

C 224 205 Bytes

m[3],i;
main(c,v)char**v;{
void*s=fopen(v[1],"r");
for(;i<54;i++)getc(s);
m[2]=getc(s);m[1]=getc(s);*m=getc(s);
for(i=0;i<500*500;i++)if((c=getc(s))!=m[i%3]&&~c)exit(puts("0"));
printf("%d,%d,%d",*m,m[1],m[2]);}

Nimmt eine 500x500-Bitmap als Befehlszeilenargument. Druckt das RGB der Datei, z. B. 255,255,255oder0 wenn die Datei nicht konstant ist. Stürzt wahrscheinlich schwer ab, wenn keine Datei bereitgestellt wird.

Interessante Punkte zu beachten:

  • Verwendet void*anstelle von FILE*zu vermeiden, einschließlich<stdio.h>
  • Verwendet eine einfache for Schleife mit, i%3um festzustellen, ob alle Bytes gleich sind
  • Kann sein sehr sein gut gespielt werden, ich habe 50 Bytes gespielt, während ich diese Antwort geschrieben habe
  • BMP speichert Farben als BGR, sodass sie mehr oder weniger rückwärts gelesen werden
MD XF
quelle
0

JavaScript + HTML, 143 + 23 = 166 Bytes

u=>(i.src=u,s=C.width=C.height=500,c=C.getContext`2d`,c.drawImage(i,0,0),d=c.getImageData(0,0,s,s).data,!d.some((n,i)=>n-d[i%4])&&d.slice(0,3))
<img id=i><canvas id=C>

Versuch es:

f=
u=>(i.src=u,s=C.width=C.height=500,c=C.getContext`2d`,c.drawImage(i,0,0),d=c.getImageData(0,0,s,s).data,!d.some((n,i)=>n-d[i%4])&&d.slice(0,3))

console.log(
    f('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAfQAAAH0AQMAAADxGE3JAAAAA1BMVEUWwpMvG5UqAAAANUlEQVR42u3BMQEAAADCIPun9lkMYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA5fQAAASJ0bysAAAAASUVORK5CYII'),
    f('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAfQAAAH0AgMAAAC2uDcZAAAADFBMVEWLFsIWwpOVkJCE8Az9F2TyAAABB0lEQVR42uzNIQEAMAwDsEk8ucmTS9xElAwkBlI3cipit9vtdrvdbrfb7Xa73W632+12u91ut9vtdrvdbrfb7Xa73W632+12u91ut9vtdrvdbrfb7Xa73W632+12u91ut9vtdrvdbrfb7Xa73W632+12u91ut9vtdrvdbrfb7Xa73W632+12u91uX72/yO+I3W632+12u91ut9vtdrvdbrfb7Xa73W632+12u91ut9vtdrvdbrfb7Xa73W632+12u91ut9vtdrvdbrfb7Xa73W632+12u91ut9vtdrvdbrfb7Xa73W632+12u91ut9vtdrvdPhu1fdT2UdtHbR+1fdT2UdsHs+0AqVGfBnNZ7+UAAAAASUVORK5CYII')
)
<img id=i><canvas id=C>

Weniger Golf:

u => {
    i.src = u
    s = C.width = C.height = 500
    c = C.getContext('2d')
    c.drawImage(i, 0, 0)
    d = c.getImageData(0, 0, s, s).data
    return d.every((n,i) => n == d[i % 4]) && d.slice(0,3)
}
darrylyeo
quelle
0

PowerShell, 79 Byte

param($b)if(!($c=499..0*500|%{$b|% G*l $_ $y;$y+=!$_}|gu).Rank){$c.R;$c.G;$c.B}

Weniger Golf-Testskript:

$f = {

    param($b)
    $c=499..0*500|%{$b.GetPixel($_,$y);$y+=!$_}|gu
    if(!$c.Rank){
        $c.R;$c.G;$c.B
    }

}

@(
    ,("22 194 147", "https://cdn.pbrd.co/images/8bawQk5kM.png")
    ,("139 22 194", "https://cdn.pbrd.co/images/8b9foR0H6.png")
    ,("149 144 144","https://cdn.pbrd.co/images/8baglmIE8.png")
    ,("132 240 12", "https://cdn.pbrd.co/images/8b9Uhhovn.png")
    ,("",           "https://cdn.pbrd.co/images/8bb4DeKx3.png")

) | % {
    $expected,$s = $_

    $binData = [System.Net.WebClient]::new().DownloadData($s)
    $memoryStream = [System.IO.MemoryStream]::new($binData)
    $bitmap = [System.Drawing.Bitmap]::FromStream($memoryStream)

    $sw = [System.Diagnostics.Stopwatch]::StartNew()
    $result = &$f $bitmap
    "$("$result"-eq$expected): $($sw.Elapsed): $result"
}
  • Anmerkung 1 : Ausdruck 499..0*500bedeutet: 500-mal in einem Bereich von 499 bis 0 wiederholen
  • Anmerkung 2 : Ausdruck $b|% G*l $_ $y ist Abkürzung für $b.GetPixel($_,$y). Dieser Trick ist nützlich beim Gofing, verlangsamt aber den Code.

Ausgabe mit $b|% G*l $_ $y:

True: 00:01:45.4904622: 22 194 147
True: 00:01:56.4208157: 139 22 194
True: 00:01:46.7629439: 149 144 144
True: 00:01:48.1999005: 132 240 12
True: 00:01:55.8579935:

Ausgabe mit $b.GetPixel($_,$y):

True: 00:00:05.7637937: 22 194 147
True: 00:00:06.8743244: 139 22 194
True: 00:00:08.7456055: 149 144 144
True: 00:00:08.5942450: 132 240 12
True: 00:00:06.6495706:

Erläuterung:

  • Das Skript erstellt ein Array für jede Pixelfarbe.
  • Es gilt das Skript gu(Alias ​​für Get-Unique ) auf das Farbarray angewendet.
  • Wenn das Ergebnis von huein einzelnes Element ist (Eigenschaft rankhat nur Wert für ein Array), wird der Dezimalwert von R, G, B dieses Elements ausgegeben
mazzy
quelle
0

Python 2 + OpenCV + NumPy: 66 Zeichen

Farben.py

import numpy as N
def c(i):p=i[0,0];print(p[::-1],"")[N.any(i-p)]

test.py

import cv2
from colors import c

c(cv2.imread('16C293.png'))
c(cv2.imread('84F00C.png'))
c(cv2.imread('8B16C2.png'))
c(cv2.imread('959090.png'))
c(cv2.imread('falsy.png'))

Ergebnis:

18:14 ~/colors $ python test.py
[ 22 194 147]
[132 240  12]
[139  22 194]
[149 144 144]

18:15 ~/colors $ 

OpenCV kann ein Bild lesen und als N-dimensionales Array zurückgeben. Mit NumPy wird das erste Pixel gegen die anderen getestet und entweder die RGB-Werte ausgedruckt oder leer.

Dana
quelle
0

PHP, 88 Bytes

function($i){return~-imagecolorstotal($i)?0:sprintf("#%06x",imagecolorsforindex($i,0));}

Die anonyme Funktion verwendet eine indizierte PHP-Bildressource als Parameter, nimmt Farbe im ersten Palettensteckplatz an, gibt den Farbcode oder 0 zurück.

Programm, 96 Bytes

imagecolorstotal($i=imagecreatefromgif($argv[1]))-1||sprintf("#%06x",imagecolorsforindex($i,0));

Nimmt den GIF-Dateinamen aus dem Argument, druckt den Farbcode oder nichts. Laufen Sie mit php -r '<code>' <filename.gif>.

für Echtfarbenbilder 113 112 Bytes

function($i){for(;$p<25e4;$p++)$r[$c=imagecolorat($i,$p%500,$p/500)]=1;return~-count($r)?0:sprintf("#%06x",$c);}

wie oben, erfordert jedoch ein Echtfarbenbild.

Programm, 122 116 Bytes

for(;$p<25e4;$p++)$r[$c=imagecolorat(imagecreatefrompng($argv[1]),$p%500,$p/500)]=1;count($r)-1||printf("#%06x",$c);

wie oben, erfordert jedoch eine PNG-Datei.

Titus
quelle