นี่สีอะไร


9

คุณต้องตีกอล์ฟโปรแกรมที่จะใช้ชื่อไฟล์เป็นอินพุตและคุณต้องเอาต์พุตไฟล์ที่เป็นสี

ไฟล์ดังกล่าวจะมีหนึ่งในส่วนขยายเหล่านี้ แต่โปรแกรมของคุณต้องการสนับสนุนเพียงหนึ่งไฟล์เท่านั้น โปรดพูดคำตอบข้อหนึ่งของคุณ

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

และตอนนี้กับรูปแบบคลาสสิก

อินพุต

ชื่อไฟล์ที่มีหนึ่งในส่วนขยายด้านบน

นอกจากนี้คุณยังสามารถนำวัตถุภาพหรือภาพเข้ารหัสแล้วแทน

เอาท์พุต

สีเดียวในไฟล์นั้นเป็นรหัสเลขฐานสิบหก 6 หลักที่มีตัวเลือกนำหน้า#เช่น#000000สีดำ

นอกจากนี้คุณยังสามารถส่งออกรายการ / ทูเปิล / สตริงที่มีค่าทศนิยมหรือฐานสิบหกของสี RGB พร้อมตัวคั่นที่ชัดเจนและไม่ใช่ตัวเลขเช่น , |ฯลฯ

คุณไม่สามารถส่งผ่านความโปร่งใส

หากไฟล์ที่ไม่ได้เป็นทุกสีหนึ่งคุณต้องการส่งออกมีมูลค่า falsy ที่ไม่ได้#000000และยุติโดยไม่ต้องSTDERRพิมพ์อะไรให้ นี่คือเพื่อให้คุณไม่สามารถเปิดไฟล์และรับค่า RGB ของพิกเซลแรก

กฎระเบียบ

  • รหัสฐานสิบหกจะต้องได้รับผลลัพธ์เท่านั้นหากไฟล์เป็นสีเดียวทั้งหมด
  • ไฟล์จะเป็น500x500พิกเซล
  • พิกเซลจะมีความโปร่งใส 0%
  • นี่คือ รหัสที่สั้นที่สุดชนะ!

ตัวอย่าง


7
ไฟล์ทั้งหมดไม่ใช่สีเดียวดูเหมือนว่าเป็นเรื่องยุ่งยากที่ไม่จำเป็นสำหรับฉัน และค่า falsey ในภาษาพิมพ์มั่นเช่น C # boolสามารถเป็น สำหรับกรณีนี้ผมจะกลับstringสำหรับกรณีปกติและสำหรับกรณีที่ไม่ปกติห่อในbool objectนี่เป็นเรื่องปกติหรือฉันสามารถส่งคืนสตริงว่างหรือคล้ายกันได้หรือไม่?
TheLethalCoder

5
นอกจากนี้ฉันขอแนะนำให้อัปโหลดภาพของคุณไปยัง i.stack.imgur.com (โปรแกรมของฉันไม่สามารถดึงภาพออกจากกระดาษแข็ง)
user41805

2
@ ฟีนิกซ์นั่นคือสิ่งที่ฉันถาม แต่มันก็โอเคเพราะนั่นไม่ใช่ค่าที่ไม่ถูกต้องใน C # และอาจเป็นภาษาที่พิมพ์ออกมาอื่น ๆ
TheLethalCoder

6
@Ilikemydog มันสำคัญ การพูดเอาต์พุตคือ "สีเดียวในไฟล์นั้น" ทำให้ผู้ตอบรับคิดว่าภาพจะมีสีเดียว จากนั้นกฎจะขัดแย้งกัน ในทางกลับกันมันจะมีความชัดเจนมากขึ้นถ้าส่วนเอาท์พุทอ่านอะไรบางอย่างเช่น "สีเดียวในไฟล์นั้นหรือค่าเท็จต่างจาก ... ถ้าภาพมีมากกว่าหนึ่งสี" หรือตามที่ xnor วางไว้อย่างเหมาะสมมันก็เกิดความสับสนเมื่อร่างของการท้าทายพูดสิ่งหนึ่ง แต่อีกส่วนหนึ่งกล่าวภายหลัง
Luis Mendo

2
เราจะสมมติว่าไฟล์ทั้งหมดจะเป็น 3 ช่องสัญญาณ (แต่ละ 8 บิต) ไฟล์ RGB หรือไม่
Octopus

คำตอบ:


6

MATL , 15 12 ไบต์

Yi6Bed~?2MYm

ทดสอบกับภาพ ".png" ที่ให้ไว้ในการท้าทาย มันอาจทำงานได้กับส่วนขยายอื่น ๆ ด้วย อินพุตอาจเป็นชื่อไฟล์หรือ URL ของภาพ

เอาต์พุตคือค่าทศนิยม R, G, B คั่นด้วยช่องว่างหรือสตริงว่าง (ซึ่งเป็นเท็จ) หากมีมากกว่าหนึ่งสี

ตัวอย่างที่มีกรณีทดสอบครั้งแรกและครั้งสุดท้าย:

ป้อนคำอธิบายรูปภาพที่นี่

คำอธิบาย

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

สิ่งนี้มีการตรวจสอบภาพปลอมหรือไม่?
TheLethalCoder

1
@TheLethalCoder แก้ไข ขอบคุณสำหรับการ
เฮ้อ

You may also take an image object or already encoded image instead.การอัปเดต OP อาจจะสามารถบันทึกไบต์ได้ ...
TheLethalCoder

@TheLethalCoder ขอบคุณ ฉันไม่คิดว่ามันจะช่วยได้ในคำตอบนี้ถ้าฉันไม่สามารถป้อนM×N×3อาร์เรย์โดยตรงซึ่งอาจไม่ใช่สิ่งที่ OP หมายถึง
Luis Mendo

1
12 ไบต์! ดีนรกศักดิ์สิทธิ์!
Shaggy

4

Bash + core-utils + Imagemagick, 60

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

ส่งออกสีหากมีหนึ่งสีและไม่มีอะไรหากมีมากกว่าหนึ่งสี

  • convert $1 txt: อ่านไฟล์อินพุตและเอาต์พุตเป็นไฟล์ข้อความโดยเฉพาะในรูปแบบนี้:
# การนับพิกเซล ImageMagick: 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 -uk3เรียงลำดับสิ่งนี้โดยไม่ซ้ำกันโดยคอลัมน์ที่สาม เอาต์พุตนี้ถูกกำหนดให้กับอาร์เรย์a

  • ((${#a[@]}-9)) ทดสอบว่าอาร์เรย์ไม่มีความยาว 9 หรือไม่

  • ถ้าอาร์เรย์ไม่มีความยาว 9 (เช่นมันมีความยาว 9) ดังนั้นองค์ประกอบเอาต์พุต 2 (ตาม 0) ซึ่งจะเป็นสีที่ไม่ซ้ำกัน


1
โอ้ฉันประทับใจมาก
MD XF

4

JavaScript (ES6) + HTML, 315 289 243 218 217 215 211 210 208 ไบต์

ตรวจสอบว่าพิกเซลทั้งหมดเหมือนกันเพิ่มจำนวนมากไบต์ ลงไปไม่ใหญ่กว่าตอนที่ฉันเพิ่งตรวจสอบสีของพิกเซลแรก - มีความสุขกับมัน :)

รับ URL (สัมบูรณ์สัมพันธ์ข้อมูลหรือสิ่งใดก็ตามที่สามารถใช้เป็นsrcของimg) ของไฟล์รูปภาพเป็นอินพุต ส่งออกสี RGB เป็นสตริงที่คั่นด้วยเครื่องหมายจุลภาคหรือ0สำหรับความเท็จ ทดสอบกับไฟล์ PNG แต่ควรใช้กับ JPG และ GIF ด้วย

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

ลองมัน

ต้องมีการเพิ่มขึ้นของการปิดที่>เกี่ยวกับcanvasองค์ประกอบในการที่จะทำงานในส่วนย่อย เมื่อดึงภาพจากแหล่งภายนอกจะทำให้เกิดข้อผิดพลาดต่อไปนี้จะใช้ URL ของฐานข้อมูล 64 เป็นอินพุตแทน ยกเลิกหมายเหตุบรรทัดสุดท้ายเพื่อทดสอบสีที่แตกต่างกันโดยใช้ภาพที่ประกอบด้วย 4 สีทดสอบ

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>


A filename with one of the above extensions.-> คุณแน่ใจหรือว่าคุณสามารถใช้รูปภาพเป็นสตริงที่เข้ารหัสแทนที่จะโหลดจากไฟล์?
TheLethalCoder

1
@TheLethalCoder ไม่! : D และตอนนี้ที่คุณพูดว่าฉันสามารถดูวิธีการที่ฉันสามารถบันทึกไม่กี่ไบต์ :)
ปุย

You may also take an image object or already encoded image instead.การอัปเดต OP อาจจะสามารถบันทึกไบต์ได้ ...
TheLethalCoder

@TheLethalCoder ฉันสามารถตัด"data:image/png;base64,"+รหัสของฉันด้วยการป้อนเป็น URL แทน
Shaggy

3

Python 2, 80 ไบต์

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

PIL.Image มีฟังก์ชั่น getcolors ซึ่งจะคืนค่าNoneถ้าจำนวนสีใหญ่กว่าพารามิเตอร์และส่งคืนฮิสโตแกรมของสีใน[(pixels, (r,g,b,a)), ...]โครงสร้าง


You may also take an image object or already encoded image instead.การอัปเดต OP อาจจะสามารถบันทึกไบต์ได้ ...
TheLethalCoder

@TheLethalCoder ดังนั้นฉันควรจะสมมติภาพที่เปิดอยู่แล้วและเพิ่งเขียนprint i and i[0][1][:3]?
Gábor Fekete

ฉันคิดว่าคุณต้องได้รับการเรียกสี
TheLethalCoder

3

Mathematica, 55 51 Bytes

-4 ต้องขอบคุณ CalculatorFeline

+0 สำหรับการปรับโครงสร้างใหม่ในฟังก์ชั่นเต็มรูปแบบ

ใช้วัตถุรูปภาพ Mathematica เป็นอินพุท - Import["filename.png"].

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

ส่งคืน 0 ถ้าไม่ใช่ทุกสี ส่งออกค่าทศนิยมของสีถ้าเพียงหนึ่ง

คำอธิบาย:

                                 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

a==1== a<2และJoin@@เทียบเท่ากับ~Flatten~1ในกรณีนี้ (เข้าร่วมหยุดพักหากรายการมีรายการที่ไม่ใช่)
CalculatorFeline

โดยค่าเริ่มต้นฟังก์ชั่นเต็มรูปแบบหรือโปรแกรมที่จำเป็น สำหรับการใช้วัตถุรูปภาพที่ถอดรหัสแล้วฉันเชื่อว่าคุณยังคงต้องทำอะไรเช่นนี้If[Length@#==1,#,0]&@Union[ImageData@#~Flatten~1]&
Julian Wolf

ฉันตีความความคิดเห็นของ OP ผิดYou may also take an image object or already encoded image instead.ไป จะอัปเดต
เอียนมิลเลอร์

@CalculatorFeline Join@@ขอบคุณสำหรับคำแนะนำเกี่ยวกับ
เอียนมิลเลอร์

2

Java 8+, 331 165 119 ไบต์

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);}

-a จำนวนมากต้องขอบคุณ @LethalCoder สำหรับการอัปเดตฉันเกี่ยวกับการเปลี่ยนแปลงกฎที่อนุญาตสำหรับการเล่นกอล์ฟจำนวนมาก
-46 ไบต์ขอบคุณ @KevinCruijssen และการพิมพ์ผิดที่คงที่


You may also take an image object or already encoded image instead.การอัปเดต OP อาจจะสามารถบันทึกไบต์ได้ ...
TheLethalCoder

@TheLethalCoder โอ้สมบูรณ์แบบ ขอบคุณ!
HyperNeutrino

ฉันรู้ว่ามันได้รับในขณะที่ แต่บางสิ่งบางอย่างกอล์ฟ (โดยไม่ต้องเปลี่ยน Java 7 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);}รุ่น): โดยการเปลี่ยน Java รุ่น 8+ คุณยังสามารถเปลี่ยนไปObject f(java.awt.image.BufferedImage i) i->นอกจากนี้ผมคิดว่าคุณได้พิมพ์ผิด: ไม่ควรif(i.getRGB(k,l)!=i)จะ!=jแทน?
Kevin Cruijssen

@KevinCruijssen ขอบคุณ และใช่ฉันคิดว่าฉันทำ: P
HyperNeutrino

1
@HyperNeutrino คุณลืมเปลี่ยนเป็น Java 8 (หรือสูงกว่า) ;)
Kevin Cruijssen

1

Python 2 , 123 85 ไบต์

from PIL import Image
c=Image.open(input()).getdata()
print len(set(c))<2and c[0][:3]

You may also take an image object or already encoded image instead.การอัปเดต OP อาจจะสามารถบันทึกไบต์ได้ ...
TheLethalCoder

ฉันคาดหวังจากการนำเข้า PIL * เพื่อบันทึกไม่กี่ไบต์ (หรือมิฉะนั้นนำเข้า PIL แล้ว c = PIL.Image) เว้นแต่ฉันจะมองเห็นบางสิ่งบางอย่าง
Foon

@Foon PILเป็นข้อยกเว้นที่จะนำเข้าที่คุณไม่สามารถทำfrom PIL import*มิได้PIL.
ร็อด

ขอบคุณ; ไม่ทราบว่าหรืออย่างน้อยก็ลืมมัน
Foon

ความไม่สอดคล้องกันนั้นน่ากลัว :(
เครื่องคิดเลข

1

C #, 163 128 125 ไบต์

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 ไบต์ขอบคุณ @Kevin Cruijssen

หากเราไม่จำเป็นต้องมีการตรวจสอบเพิ่มเติมสำหรับภาพที่เป็นสีเดียวกันนี่เป็นเพียง 55 ไบต์:

b=>{var c=b.GetPixel(0,0);return c.R+" "+c.G+" "+c.B;};

ฉันรู้ว่ามันใช้เวลานานแล้ว แต่: 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 ไบต์)
Kevin Cruijssen

0

Mathematica, 112 ไบต์

ภาพ

I = นำเข้า @ "C: \ a.png";

If[Length@DominantColors@i==1,"#"<>StringPadLeft[IntegerString[Most@PixelValue[i,{1,1},"Byte"],16],2,"0"],False]

You may also take an image object or already encoded image instead.การอัปเดต OP อาจจะสามารถบันทึกไบต์ได้ ...
TheLethalCoder

ตกลง. ฉันทำการเปลี่ยนแปลงบางอย่าง
ขอบคุณ

Hex ตัวพิมพ์เล็กยอมรับได้หรือไม่
user202729

Most@PixelValue[i, {1, 1}, "Byte"]จะบันทึกบางไบต์
user202729

103 ไบต์: If[Length@Tally[a=i~ImageData~"Byte"]<2,"#"<>StringPadLeft[Most@a[[1,1]]~IntegerString~16,2,"0"],False]- ใช้ฟังก์ชั่น ImageData ของคุณ ไม่ทราบว่ามีอยู่จริง
user202729

0

Bash + ImageMagick, 100 ไบต์

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

ทดสอบกับ. png ควรทำงานกับรูปแบบอื่นเช่นกัน เอาต์พุตสำหรับภาพหลายสีเป็นเพียงสตริงว่าง


คุณสามารถลบเครื่องหมายคำพูดจากตัวระบุรูปแบบ นอกจากนี้ยังจะสั้นกว่า((`identify -format %k $1`-1))|| i=$(expr `identify -format "%k" $1` = 1)&&
Digital Trauma

0

C, 224 205 ไบต์

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]);}

รับบิตแมป 500x500 เป็นอาร์กิวเมนต์บรรทัดคำสั่ง พิมพ์ RGB ของไฟล์เช่น255,255,255หรือ0ถ้าไฟล์นั้นไม่คงที่ อาจล่มได้ไม่ดีหากไม่มีไฟล์มาให้

จุดที่น่าสนใจที่ควรทราบ:

  • ใช้void*ในสถานที่ที่FILE*ควรหลีกเลี่ยง ได้แก่<stdio.h>
  • ใช้การforวนรอบอย่างง่ายด้วยi%3เพื่อกำหนดว่าไบต์ทั้งหมดเหมือนกันหรือไม่
  • สามารถเล่นกอล์ฟได้มากฉันเล่น 50 ไบต์ขณะเขียนคำตอบนี้
  • BMP จัดเก็บสีเป็น BGR ดังนั้นจึงอ่านย้อนหลังได้ไม่มากก็น้อย

0

JavaScript + HTML, 143 + 23 = 166 ไบต์

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>

ลองมัน:

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>

หักกอล์ฟ:

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)
}

0

PowerShell, 79 ไบต์

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

สคริปต์ทดสอบที่ตีกอล์ฟน้อยกว่า:

$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"
}
  • หมายเหตุ 1 : นิพจน์499..0*500หมายถึง: ทำซ้ำ 500 ครั้งในช่วงจาก 499 ถึง 0
  • หมายเหตุ 2 : การแสดงออก$b|% G*l $_ $y เป็นทางลัด$b.GetPixel($_,$y)สำหรับ เคล็ดลับนี้มีประโยชน์กับ gofing แต่มันช้าลงรหัส

เอาท์พุทกับ$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:

เอาท์พุทกับ$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:

คำอธิบาย:

  • สคริปต์จะสร้างอาร์เรย์ของแต่ละพิกเซลสี
  • สคริปต์จะใช้gu(นามแฝงสำหรับGet-Unique ) กับอาร์เรย์ของสี
  • ถ้าผลลัพธ์ของการhuเป็นองค์ประกอบเดียว (ทรัพย์สินrankมีค่าสำหรับอาร์เรย์เท่านั้น) แล้วส่งออกค่าทศนิยมของ R, G, B ขององค์ประกอบนี้

0

Python 2 + OpenCV + NumPy: 66 ตัวอักษร

colors.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'))

ผลลัพธ์:

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

18:15 ~/colors $ 

OpenCV สามารถอ่านรูปภาพและส่งคืนเป็นอาร์เรย์ N-Dim NumPy ใช้สำหรับทดสอบพิกเซลแรกเทียบกับพิกเซลอื่นและพิมพ์ค่า RGB หรือค่าว่าง


0

PHP, 88 ไบต์

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

ฟังก์ชั่นที่ไม่ระบุชื่อใช้ทรัพยากรรูปภาพ PHP ที่จัดทำดัชนีเป็นพารามิเตอร์สมมติสีในช่องสีจานแรกส่งคืนรหัสสีหรือ 0

โปรแกรม 96 ไบต์

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

นำชื่อไฟล์ GIF จากอาร์กิวเมนต์พิมพ์รหัสสีหรือไม่ทำอะไรเลย ทำงานด้วยphp -r '<code>' <filename.gif>ทำงานด้วย

สำหรับภาพสีที่แท้จริง113 112 ไบต์

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

ข้างต้น แต่ต้องใช้ภาพสีจริง

โปรแกรม122 116 ไบต์

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

ข้างต้น แต่ต้องใช้ไฟล์ PNG

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.