এই ঘন! গ্রেস্কেল… এর… রঙ… এর… যাই হোক না কেন একটি পাঠ


27

রুবিকের ঘনক্ষেত্র এবং দুর্দান্ত শিল্পের একটি বড় অনুরাগী হওয়ার কারণে, আমি দু'জনকে একত্রে কিছু দুর্দান্ত জিনিস দেওয়ার জন্য কাজ করছি। মূলত মিনিয়েচার রুবিকের কিউবগুলি সমাধান করে রুবিকের কিউব আর্ট গঠনে প্রাথমিক পিক্সেল তৈরি করা হয়। এই জাতীয় শিল্পের উদাহরণগুলি এই লিঙ্কটির মাধ্যমে দেখা যায়: http://google.com/search?q=rubik%27s+cube+art

এখন, এই কোড গল্ফটির উদ্দেশ্য হ'ল এমন একটি কোড তৈরি করা যা কোনও চিত্রকে ইনপুট হিসাবে গ্রহণ করে এবং তারপরে নিম্নলিখিত পদ্ধতিতে রূপান্তর করে:

চিত্রটি প্রাথমিকভাবে ওয়েব-নিরাপদ গ্রেস্কেল রঙে কমিয়ে আনা হয়েছে। এর পেছনের কারণ হ'ল আমাদের ওয়েব-নিরাপদ গ্রেস্কেল প্যালেটটি (যেমন 000000, 333333, 666666, 999999, সিসিসিসিসিসি এবং এফএফএফএফএফ) বিচ্ছিন্ন করা দরকার। গ্রেস্কেল রূপান্তর করার রঙিনমিতি পদ্ধতিতে একটি অ্যালগরিদম এখানে পাওয়া যায়: http://en.wikedia.org/wiki/Grayscale#Colorimetric_.28 আলোকসজ্জা-প্রিভিজারিং ২৯ __ রূপান্তর_টো_গ্রা্যাসকেল , আপনি কি অনুপ্রেরণা হিসাবে এটি ব্যবহার করতে চান?

তারপরে কেউ গ্রেস্কেলটিকে উপযুক্ত রঙগুলিতে সরবরাহ করতে পারে। এটি দ্রুত ভেঙে ফেলার জন্য: 000000 রুবিকের নীল বর্ণিত হবে, 333333 রুবিকের লালকে, 666666 রবিকের সবুজকে, 999999কে রুবিকের কমলা, সিসিসিসিসি রুবিকের হলুদ বর্ণ করবে, এবং এফএফএফএফএফএফ রুবিকের সাদাকে উল্লেখ করবে।

আমি বরং চাই যে আপনার ফলাফলের কোডটি ছবির প্যালেট থেকে সরাসরি রুবিকের রঙগুলিতে রেন্ডার করতে পারে। ওয়েব-সেফ গ্রেস্কেল এবং তারপরে সংশ্লিষ্ট রুবিকের প্যালেটে রূপান্তর করা থেকে শুরু করে দুটি ধাপের পদ্ধতিটি কেবল আপনাকে প্রক্রিয়াটির পিছনে যুক্তি সম্পর্কে ধারণা দিতে পারে তবে যদি আপনার পক্ষে এটি করা সহজ হয় তবে তা সর্বদা এটি করুন।

রুবিকের প্যালেটের জন্য প্রকৃত আরজিবি মানগুলি অবশ্যই নিম্নলিখিতগুলির সাথে মিলে যায়:

  • লাল: # C41E3A
  • সবুজ: # 009E60
  • নীল: # 0051BA
  • কমলা: # FF5800
  • হলুদ: # এফএফডি 500
  • সাদা: #FFFFFF

আপনাকে একটি উদাহরণ দেওয়ার জন্য, আমি নীচের ছবি থেকে আব্রাহাম লিংকনের মাথা ক্রপ করেছি: এখানে চিত্র বর্ণনা লিখুনএবং নিম্নলিখিতটি তৈরি করতে অ্যালগরিদমটি রেন্ডার করেছি:

এখানে চিত্র বর্ণনা লিখুন

গ্রিডটি রয়েছে যাতে আপনি দেখতে পাচ্ছেন যে প্রতিটি স্বল্প আকারের রুবিকের কিউবটি চিত্রটি তৈরি করতে কীভাবে কনফিগার করতে হবে। ফলাফলের চিত্রটির প্রকৃত আকার 45 পিক্সেল বাই 45 পিক্সেল, অর্থ (45/3) * (45/3) = 15 * 15 = 225 ক্ষুদ্রতর রুবিকের কিউবগুলি এই চিত্রটি তৈরি করতে ব্যবহৃত হত। আমি আপনার মতো গ্রিডের সাথে ফলাফলের চিত্রটি উপস্থাপন করার প্রত্যাশা করছি না।

সুতরাং এটি যা প্রয়োজন:

  1. এই অ্যালগরিদম দ্বারা প্রসেস করা ছবিটি অবশ্যই x পিক্সেল প্রশস্ত Y পিক্সেল দিয়ে উঁচুতে হবে, যেমন x এবং y 3 এর গুণক Rub যদি আপনার চিত্রটি বেশ বড় হয় তবে এটি 45 x 45 থেকে 75 x 75 এর কাছাকাছি কিছুতে হ্রাস করতে বা প্রক্রিয়াজাতকরণের আগে মাত্রাগুলিগুলির কাছাকাছি কোনও জায়গায় থাকার পরামর্শ দেওয়া হয়। মনে রাখবেন, এই আকার পরিবর্তনকারী উপাদানটি বিকল্প হয়।

  2. মোজাইকটি তৈরি করতে চিত্রটি সিক্স্টকলারড রুবিকের কিউব প্যালেটে রূপান্তর করা দরকার।

  3. ফলস্বরূপ চিত্রটি প্রক্রিয়া করার পরে একটি বৈধ গ্রাফিক ফাইল হওয়া দরকার। আপনার কোডটি কাজ করে প্রমাণিত করতে, আমেরিকা যুক্তরাষ্ট্রের অন্যতম রাষ্ট্রপতি বা একটি নামী হলিউড সেলিব্রিটির চিত্রের বিরুদ্ধে এটি চালান। আমি ইতিমধ্যে আমার উদাহরণে আব্রাহাম লিংকনকে ব্যবহার করেছি, সুতরাং এই রাষ্ট্রপতি আর ব্যবহার করতে পারবেন না। নিশ্চিত হয়ে নিন যে আপনি যে ভাষাটি ব্যবহার করেছেন সেটিকে আপনি সরবরাহ করেছেন, শটের আগে এবং পরে আপনার কোড পরীক্ষা করার জন্য বাইট গণনা পাশাপাশি রাষ্ট্রপতি / সেলিব্রিটি ব্যবহার করেছেন ...

  4. প্রতিটি প্রবেশে অবশ্যই তাদের পরীক্ষার কেস হিসাবে একটি অনন্য রাষ্ট্রপতি / সেলিব্রিটি থাকতে হবে। আমি সদৃশ গ্রহণ করব না। এটি নিশ্চিত করবে যে নকল ফলাফলগুলি বিভিন্ন কোড এন্ট্রি পরীক্ষার জন্য ব্যবহৃত হয় না। আপনার কোডটি কাজ করে এটি বলা খুব ভাল, এটি প্রমাণ করার জন্য এটি অন্য জিনিস।

৫. সংক্ষিপ্ততম কোড জয়ী।

আমি এটি একটি জনপ্রিয়তার প্রতিযোগিতায় পরিবর্তন করছি ... আমি বরং দেখতে পাচ্ছি যে বাইট গণনা নিয়ে প্রতিদ্বন্দ্বিতা না করে কে এই কাজ করতে পারে ... তাই আমি এই 28 ফেব্রুয়ারী, 2014 এর পরে একটি অনুদানের সাথে পুরষ্কার দেব।


4
আমি মনে করি আপনি যদি কোনও লিঙ্কের উপর নির্ভর না করে পোস্টে রুবিক আরজিবি মান যুক্ত করেন তবে ভাল হত।
SztupY

না "ইমেজ এক্স পিক্সেল চওড়া Y পিক্সেল দ্বারা উচ্চ হতে হবে প্রক্রিয়া করা থেকে" মানে পুনরায় আকার দেওয়া কোডের অংশ বা যে চিত্র প্রয়োজন মাপ প্রাক প্রক্রিয়াকৃত হয়?
ব্যবহারকারী 2846289

আপনি যদি কেবল একটি মুখকে সীমাবদ্ধ করেন তবে কি কোনও রুবিক কিউবের কোনও অসম্ভব অবস্থা রয়েছে?
নিক টি

1
@WallyWest আপনি আমার অ্যাপ মাইনক্যাম পছন্দ করবেন, এটি এটি করে তবে স্কোয়ার তৈরি করার পরিবর্তে এটি খনি ক্রাফট ব্লক ব্যবহার করে এবং এটি প্রতি সেকেন্ডে 15 বার করে রিয়েল টাইম আইফোন ক্যামেরার সাহায্যে, আপনার চারপাশের পুরো বিশ্বকে এক রূপান্তরিত করে আমার নৈপুণ্য মহাবিশ্ব। itunes.apple.com/us/app/minecam/id675845303?mt=8 (কেবল যদি এটি বিশ্ব হাহাহাহা এর জন্য একটি বীজও তৈরি করতে পারে)
অ্যালবার্ট রেনশো

2
@ ওয়েলিওয়েস্ট: এটি অলসতার কথা নয়। ইন্টারনেটের বাকি অংশটি বন্ধ থাকলেও সমস্যার শুরু করার জন্য আপনার প্রয়োজনীয় সমস্ত তথ্য দেওয়া উচিত। এক বা দুই বছরে, সেই লিঙ্কটি নামানো হতে পারে এবং দুপুরের লিঙ্কটি আপডেট হবে। আপনি কীভাবে ওয়েব-নিরাপদ গ্রেস্কেল রঙগুলি তৈরি করবেন (যা সমস্যার সমাধানের জন্য প্রয়োজনীয় নয়) সম্পর্কে পর্যাপ্ত তথ্য সরবরাহ করলে আপনি সহজেই একটি ছোট ম্যাপিং টেবিল #000000 => #0051BA, ইত্যাদি ইত্যাদি যুক্ত করতে পারতেন
SztupY

উত্তর:


16

চিত্রগ্রাহক (108)

সংস্করণ: চিত্রম্যাগিক 6.8.7-7 কিউ 16 x86_64 2013-11-27

নিম্নলিখিত কল:

$ convert -resize 75x75 -fx "q=p.intensity;q<1/6?#0051BA:q<2/6?#C41E3A:q<3/6?#009e60:q<4/6?#ff5800:q<5/6?#FFD500:#FFF" input output

ইনপুট এবং আউটপুট ফাইলের জন্য কোথায় inputএবং outputসংশোধন করতে হবে।

আমি কেবল চরিত্রগুলি গণনা করেছি -resizeএবং #FFF"যদি আপনি মনে করেন এটি অবৈধ মন্তব্য করতে দ্বিধা বোধ করবেন।

আমি লেনাকে চিত্র হিসাবে ব্যবহার করেছি (তিনি প্লেবয় তে হাজির হয়েছিলেন এবং যে কেউ এই কাজ করছেন তারা হলিউডের সেলিব্রিটি হিসাবে গণ্য হওয়া উচিত, তাই না?)

ইনপুট:

ইনপুট চিত্র

আউটপুট:

$ convert -resize 75x75 -fx "q=p.intensity;q<1/6?#0051BA:q<2/6?#C41E3A:q<3/6?#009e60:q<4/6?#ff5800:q<5/6?#FFD500:#FFF" Lenna.png LennaRubik.png

উত্পন্ন চিত্র

আউটপুট বড় করা:

বর্ধিত চিত্র

দ্রষ্টব্য: চিত্রগ্রাহক দস্তাবেজ অনুসারে আপনার কাছে একটি বিবৃতিতে একাধিক শর্তসাপেক্ষ অপারেটর থাকতে পারে না, তবে কলটি এখনও ঠিক কাজ করছে বলে মনে হচ্ছে, সম্ভবত এটি ঠিক করা হয়েছিল এবং ডক্সটি কেবল আপডেট হয়নি।

ফলাফলের চিত্রটিতে সনাক্তকরণ চালানো (রঙগুলি প্রকৃতপক্ষে ভাল দেখানোর জন্য):

$ identify -verbose LennaRubik.png
  (...)   
  Colors: 6
  Histogram:
       338: (  0, 81,186) #0051BA srgb(0,81,186)
      1652: (  0,158, 96) #009E60 srgb(0,158,96)
      1187: (196, 30, 58) #C41E3A srgb(196,30,58)
      1674: (255, 88,  0) #FF5800 srgb(255,88,0)
       706: (255,213,  0) #FFD500 srgb(255,213,0)
        68: (255,255,255) #FFFFFF white
  (...)

আপনি যদি ভাবেন যে লেনা সঠিক সেলিব্রিটি হিসাবে গণনা করেন না, এখানে ব্রুস উইলিস রয়েছে:

ব্রুস অরিজিনাল

ব্রুস স্মল

ব্রুস লার্জ


+1 আমি মনে করি যে আপনার উত্তরটি প্রায় অপরাজেয় (বা এমনকি মোটেও অপরাজেয়)। আমি কেবলমাত্র আপনাকে পরামর্শ দেব যে আপনি সন্দেহাতীতভাবে কিছু হলিউড সেলিব্রিটি বা আমেরিকান প্রেসিডেন্টের ছবি তুলুন এবং এতে যোগ করুন (লেনাকে অপসারণ করার দরকার নেই, দু'জনেই রাখুন)। অন্যথায় কিছু বিরক্তিকর লোক কেবল অভিযোগ করার জন্য অভিযোগ করতে পারে এবং ডাউনওয়েতে পারে।
ভিক্টর স্টাফুসা

@ ভিক্টর: আমি মনে করি ম্যাথমেটিকা, মতলব বা অষ্টাভ সহজেই এটিকে পরাজিত করতে পারে, কারণ fxঅংশটির অভ্যন্তরীণ পরিস্থিতি আরও বেশি সংকুচিত হতে পারে এমন একটি ভাষায় যা আরও ভাল প্রকাশ করতে পারে। এবং এই ভাষাগুলিতে নেটিভ ইমেজ সমর্থনও রয়েছে (তাই কোনও চিত্র অক্ষর / জিডি / ইত্যাদি আমদানি করার প্রয়োজনে কোনও ক্ষতি হয় না)
সজ্টুপাই

@ স্পটুপয় আমি লেনার সম্পর্কে খুব ভাল জানি ... আমি এটি গণনা করব ... ব্রুস উইলিসের সাথেও চমৎকার কাজ ...
ওয়ালি ওয়েস্ট

1
লেনা সুন্দর (r)। পর্যন্ত।
blabla999

কাজের জন্য সঠিক সরঞ্জামটি ব্যবহার করার জন্য +1। আমার বোঝার জন্য, চিত্রগ্রাহক ব্যবহারের সঠিক উপায় হ'ল আউটপুট ফাইলের চেয়ে বিকল্পগুলির চেয়ে চিত্রটিকে প্রথমে কল করা।
কাজিনকোচেন

14

ম্যাথামেটিকাল

গ্রেটা গার্বো সমন্বিত কোনও মার্কিন স্ট্যাম্প থেকে আমরা বর্গক্ষেত্র অঞ্চলের সাথে কাজ করব। এটি হিসাবে উল্লেখ করা হবে j

ঞ

f[i_,rs_,m_:True]:=
Module[{(*rs=rastersize-4*)r={0.77,0.12,0.23},gr={0,0.62,0.38},b={0,0.32,0.73},o={1,0.35,0},y={1,0.84,0},w={1,1,1},
c1={r,gr,b,o,y,w},grayGreta,garboColors},
grayGreta=(*Reverse@*)ImageData[ColorQuantize[Rasterize[i,(*ImageResolution \[Rule]15*)RasterSize->rs+1,ImageSize->rs],6]];
garboColors=Union@Flatten[grayGreta,1];
ArrayPlot[grayGreta/.Thread[garboColors-> RGBColor@@@c1],
Mesh->If[m==True,{rs-1,rs-1},None],MeshStyle->Black]]

ফাংশনটি 3 পরামিতি নেয়:

  • i যা চিত্র বোঝায়
  • rs, রাস্টার আকার
  • m, একটি বুলিয়ান ভেরিয়েবল যা মেশ রেখা ব্যবহার করা উচিত কিনা তা উল্লেখ করে states (ডিফল্ট সেটিংসটি সত্য)।

15, 30, 45 এবং 75 এর রাস্টার আকার ব্যবহার করে:

GraphicsGrid[{{f[j, 15], f[j, 30]}, {f[j, 45], f[j, 75]}}, ImageSize -> 800]

4 গার্বোস

এতগুলি টুকরো দিয়ে কেউ কোনও রব্রিকের ঘনকটি বানিয়ে ভাবতে পারি না! তবুও আকর্ষণীয় অনুশীলন।


রং নিয়ে ঘুরে বেড়ানো

এটি পূর্বের এন্ট্রি থেকে। কোডটি কিছুটা আলাদা। Graphicsপরিবর্তে ব্যবহৃত হয় ArrayPlot। এছাড়াও, আমরা পুরো স্ট্যাম্পটি বর্গক্ষেত্র না হলেও ব্যবহার করি।

এখানে 6! = 720 রব্রিক কিউব রঙের অনুমতি রয়েছে।

নিম্নলিখিত উপরের সারিটির কেন্দ্রের চিত্র প্রদর্শন করে (নীচে images টি চিত্র সেট করুন)। গ্রেস্কেল মানগুলি অন্ধকার থেকে হালকা পর্যন্ত সাজানো হলে রঙগুলি {r, gr, b, o, y, w are হয়} অন্য রূপগুলি তবুও কাজ করে।

i গ্রেস্কেলের মূল চিত্র।

Graphics[Raster[(g=Reverse@ImageData[ColorQuantize[Rasterize[i,RasterSize->75],6]])
/.Thread[Union@Flatten[g,1]-> {{7,1,2},{0,6,4},{0,3,7},{10,4,0},{10,8,0},{10,10,10}}/10]]]

i সম্পূর্ণ গ্রেটা গার্বো স্ট্যাম্পের মূল গ্রেস্কেল চিত্র।

Rasterize[garbo,RasterSize->75 75৫ বাই 75 টি অ্যারেতে ছবিটি রাস্টারাইজ করে।

ColorQuantize[<>, 6] গ্রেস্কেল মানগুলি 6-এর সেটকে হ্রাস করে।

ImageDataচিত্র থেকে ডেটা অ্যারের পুনরুদ্ধার; এটা উলটে আসে।

Reverse ডেটা অ্যারে ফ্লিপ করে, অতএব ছবিটি ডান দিকে।

garboColors কোয়ান্টাইজড ইমেজের 6 গ্রেস্কেল মান।

Graphics[Raster চূড়ান্ত চিত্র প্রদর্শন করে।

rubrikColors 6 টি রব্রিক কিউব রঙের আরজিবি মান।

লাল, সবুজ, নীল, কমলা, হলুদ এবং সাদা রঙের বিভিন্ন রঙের অনুমতি দেওয়া আছে।

r={0.77,0.12,0.23};gr={0,0.62,0.38};b={0,0.32,0.73};o={1,0.35,0};y={1,0.84,0};w={1,1,1};
c1={r,gr,b,o,y,w};
c2={r,b,gr,o,y,w};
c3={b,r,gr,o,y,w};
c4={gr,b,r,o,y,w};
c5={b,r,gr,y,o,w};

এবং কোড:

grayGreta=Reverse@ImageData[ColorQuantize[Rasterize[i,RasterSize->75],6]];
garboColors=Union@Flatten[grayGreta,1];
Grid[{{i,
Graphics[Raster[grayGreta/.Thread[garboColors-> c1]]],
Graphics[Raster[grayGreta/.Thread[garboColors-> c2]]]},
{Graphics[Raster[grayGreta/.Thread[garboColors-> c3]]],
Graphics[Raster[grayGreta/.Thread[garboColors-> c4]]],
Graphics[Raster[grayGreta/.Thread[garboColors-> c5]]]}}]

garbos


গার্বোস গ্যালোর

গ্রেটা গার্বোর 72২ টি (the২২ টির) চিত্র এখানে 6 টি রবারিক কিউব রঙ ব্যবহার করে। কিছু চিত্র অন্যের চেয়ে ভাল কাজ করে, আপনি কি ভাবেন না?

GraphicsGrid@Partition[(Graphics[Raster[grayGreta /. Thread[garboColors -> #]]] & 
/@ Take[Permutations[{r, gr, b, o, y, w}, {6}], 72]), 12]

গার্বোস গ্যালোর


গ্রেটা, ওহে গ্রেটা ... এটি আমার প্রত্যাশার চেয়ে ভাল হয়ে উঠল। @ ডেভিডক্যারাহার, এখানে চমৎকার কাজ ...
ওয়ালি ওয়েস্ট

@WallyWest। ধন্যবাদ। এটি একটি খুব আকর্ষণীয় চ্যালেঞ্জ ছিল।
ডেভিডসি

আমি নিশ্চিত ছিলাম যে ম্যাথামেটিকারা চিত্রগ্রাহককে মারবে, এটিকে আরও গল্ফ করা যায় না? এই সমস্ত ফাংশন কি পুনরুদ্ধার করা হয়?
SztupY

1
@ স্পটআপ ওয়াই অর্ধ কোডটি রঙগুলি সঠিকভাবে পাওয়ার জন্য উত্সর্গীকৃত। Reverseচিত্রটি উল্টে রেখে নির্মূল করা যেতে পারে, তবে আমি আর কোনও সুযোগ দেখছি না। গাণিতিকটি ভাববাদী তবে বড় শব্দ ব্যবহার করে। চিত্রগুলিতে পারদর্শী কেউ সম্ভবত কোডের আকারটি কিছুটা কমাতে পারে তবে আমি সন্দেহ করি যে তারা আপনার চিত্রম্যাগিক কোডটি মারতে পারে।
ডেভিডসি

1
কোড জুড়ে সত্যিই কিছু অসঙ্গতি ছিল। আমি আশা করি তারা এখন চলে গেছে। iমূল চিত্রটি ধরে রাখুন। grরুব্রিকের সবুজকে বোঝায়। gগ্রেস্কেল চিত্রের জন্য রাস্টারযুক্ত এবং কোয়ান্টাইজড চিত্রের ডেটা বোঝায়।
ডেভিডসি

6

স্মার্টটাক (স্মার্টটাক / এক্স), 289 139 *

ইনপুট: i; আউটপুট: আর

r:=i magnifiedTo:75@75.
r colorMapProcessing:[:c||b|b:=c brightness.Color rgbValue:(#(16r0051BA 16rC41E3A 16r009e60 16rff5800 16rFFD500 16rFFFFFF)at:(b*6)ceiling)]

ইনপুট:

এখানে চিত্র বর্ণনা লিখুন

আউটপুট:

এখানে চিত্র বর্ণনা লিখুন

বৃহদাকার:

এখানে চিত্র বর্ণনা লিখুন

(সমস্ত তরুণদের জন্য: এটি ম্যাডোনা নয় ;-)

[*] আমি 75x75 (প্রথম লাইন) এ ম্যাগনিফিকেশনটি গণনা করি নি - ইতিমধ্যে ইনপুট হিসাবে আকার পরিবর্তন করতে পারতাম। আশা করি আপনার সাথে ঠিক আছে।


আমি মারলিন মনরোকে পছন্দ করেছি ... দুর্দান্ত পছন্দ ... পুনরায় আকার দেওয়া একটি
optionচ্ছিক

4

পোস্টস্ক্রিপ্ট, এবং সত্য রুবিক রঙ! ;-)

ভাল, এই সমাধানটি এখানে কিছুটা অফ-টপিক, কারণ এটি কিছুটা উচ্চতর বিশেষায়িত ক্ষেত্রের মধ্যে সীমাবদ্ধ। তবে উদাহরণস্বরূপ "অদ্ভুত সংখ্যা প্রশ্ন" (হস্তক্ষেপের ফলে কিছু উত্পাদন করতে অক্ষম) নিয়ে হতাশার পরে আমি কিছু প্রকাশ করার সিদ্ধান্ত নিয়েছি এবং তাই এটি আমার অর্ধ-সমাপ্ত স্ক্রিবিলের গাদা থেকে টেনে এনে উপস্থাপনযোগ্য করে তুলেছি।

সমাধানটি সত্যটি কাজে লাগায়, এই প্রশ্নের প্রথম ১ ম সংশোধনটি কোনও সাইটের লিঙ্কের মাধ্যমে প্রয়োজনীয় রঙগুলি সংজ্ঞায়িত করে, যা পরিষ্কারভাবে বলেছে যে প্যান্টোন (আর) রঙগুলি ব্যবহার করতে হবে এবং আরজিবি রঙগুলি কেবলমাত্র আনুমানিক। তারপরে আমি ভেবেছিলাম, আমি কেন আসল রঙ করব, যখন আমি খাঁটি রঙ করতে পারি? - :)

10 dict begin
/Size 75 def
/Names  [(PMS 012C) (PMS 021C) (PMS 347C)   (PMS 200C)    (PMS 293C)   ] def
/Colors [[0 .16 1 0][0 .65 1 0][1 0 .39 .38][0 .9 .72 .28][1 .56 0 .27]] def
<</PageSize [Size dup]>> setpagedevice
Size dup scale
true setoverprint
(%stdin) (r) file 100 string readline pop 
(r) file <</CloseSource true>>/DCTDecode filter
0 1000000 string 
dup <</CloseTarget true>>/NullEncode filter 
{
    3 index 3 string readstring
    {
        4 -1 roll 1 add 4 1 roll
        {} forall
        0.11 mul exch 0.59 mul add exch 0.3 mul add cvi
        1 index exch write
    } {pop exit} ifelse
} loop
closefile
0 3 -1 roll getinterval
exch closefile
/data exch def
/n data length sqrt cvi def
1 1 Names length {
    /N exch def
    { 
        dup N Names length 1 add div gt 
            {N 1 add Names length 1 add div gt 
                {1} {0} ifelse} 
            {pop 1} 
        ifelse
    } settransfer
    [/Separation Names N 1 sub get /DeviceCMYK {
        Colors N 1 sub get 
        { 1 index mul exch } forall pop
    }] setcolorspace
    <<
        /ImageType        1
        /Width            n
        /Height           n
        /ImageMatrix      [n 0 0 n neg 0 n]
        /BitsPerComponent 8
        /Decode           [0 1]
        /DataSource       data
    >> image
} for
showpage
end

এই কোডটি উদা হিসাবে সংরক্ষণ করা হবে rubik.psএবং তারপরে স্বাভাবিক মন্ত্রমুখে ঘোস্টস্রিপ্টকে খাওয়ানো হবে:

gs -q -sDEVICE=psdcmyk -o out.psd rubik.ps

এরপরে JPG ফাইলের নাম যেমন ইনপুট দেওয়ার জন্য এটি পরবর্তী লাইনে অপেক্ষা করে

kelly.jpg

এবং, যদি সবকিছু ঠিকঠাক হয় তবে আউটপুট out.psdফাইলগুলিতে সংরক্ষণ করে ।

ইনপুট অবশ্যই বর্গাকার আরজিবি জেপিজি (যে কোনও আকার) হতে হবে, আউটপুট স্পট রঙের চ্যানেলগুলির সাথে পিএসডি। ফাইলটি দেখার জন্য আপনার ফটোশপের দরকার হবে। জিএস ডিভাইসকে psdcmykঅন্য যে কোনও কিছুর থেকে পরিবর্তন করলে ব্যবহারযোগ্য কিছুই হবে না। ইনপুট হিসাবে জেপিজি - কারণ পোস্টস্ক্রিপ্ট ইন্টারপ্রেটার সরাসরি এ থেকে ডেটা স্ট্রিমটি ডিকোড করতে পারে। স্কোয়ার আকৃতি - কারণ sqrtচিত্রটির প্রস্থ (এবং উচ্চতা) খুঁজতে প্রোগ্রামটি স্ট্রিং দৈর্ঘ্যের উপর নির্ভর করে ।

প্রথম লাইনগুলি আউটপুট চিত্রের আকার নির্ধারণ করে (ডিফল্ট 75 থেকে পরিবর্তন করা যেতে পারে) এবং রঙ প্যালেট (রঙ এবং তাদের সংখ্যাও পরিবর্তন করা যেতে পারে)। অন্য যে কোনও কিছুই হার্ড-কোডড নয়, আমার মনে হয়।

কি হচ্ছে? আরজিবি ট্রিপল্টসের স্ট্রিমটি ফ্লাইতে গ্রেস্কেল মানগুলির স্ট্রিংতে রূপান্তরিত হয় (সাধারণ সূত্র সহ), সাধারণ 8-বিট কনটোন চিত্র অভিধানটি তৈরি করা হয় এবং 5 টি Separationবর্ণের জায়গায় একে অপরের শীর্ষে 5 টি অভিন্ন চিত্র আঁকার জন্য ব্যবহৃত হয় । কৌশলটি হ'ল imageঅপারেটরের প্রতিটি অনুরোধের আগে স্থানান্তর ফাংশন প্রয়োগ করা । যেমন হলুদ পেইন্টের জন্য এই ফাংশনটি ০.০6767 এ ইনপুট মানগুলির জন্য ০.০ ...৩৩৩ রেঞ্জ এবং অন্যথায় ১ প্রদান করে।

ইনপুট:

এখানে চিত্র বর্ণনা লিখুন

ফটোশপে 75x75 আউটপুটটির স্ক্রিনশট খোলা, 800% প্রসারিত:

এখানে চিত্র বর্ণনা লিখুন

এবং ফটোশপ চ্যানেল প্যালেট:

এখানে চিত্র বর্ণনা লিখুন


1
গ্রেস কেলি ব্যবহারের জন্য +1 ... আপনারা আমার সম্পূর্ণ শ্রদ্ধা ...
ওয়েল ওয়েস্ট

3

সি শার্প

using System;
using System.Drawing;
using System.Drawing.Imaging;
using System.Linq;

class Program
{
    static void Main(string[] args)
    {
        unchecked
        {
            var t = new[] { 0xFFC41E3A, 0xFF009E60, 0xFF0051BA, 0xFFFF5800, 0xFFFFD500, 0xFFFFFFFF }.Select(v => Color.FromArgb((int)v)).ToArray();
            var o = new Bitmap(Bitmap.FromFile(args[1]));
            var m = double.Parse(args[0]);
            var r = Math.Min(m / o.Width, m / o.Height);
            var w = (int)(o.Width * r);
            var h = (int)(o.Height * r);

            o = new Bitmap(o, w - (w % 3), h - (h % 3));
            for (int y = 0; y < o.Height; y++)
                for (int x = 0; x < o.Width; x++)
                    o.SetPixel(x, y, N(o.GetPixel(x, y), t));
            o.Save(args[2], ImageFormat.Png);
        }
    }

    static Color N(Color c, Color[] t)
    {
        return t.OrderBy(v => Math.Abs(W(v) - W(c))).First();
    }

    static double W(Color c)
    {
        return .11 * c.B + .59 * c.G + .30 * c.R;
    }
}

আপনার এটি 3 টি প্যারামিটার দিয়ে চালানো দরকার:

foo.exe 75 d:\test.jpg d:\out.png

যেখানে 75সর্বোচ্চ। প্রস্থ / উচ্চতা, d:\test.jpgইনপুট ফাইল এবং d:\out.pngআউটপুট ফাইল।

এই প্রতিযোগিতায় বিভিন্ন চিত্রের আউটপুট:

WallyWest স্জটুপওয়াই 1 SztupY 2 blabla999

আমার নিজস্ব সেলিব্রিটি:

বাগিচা!

আউটপুট:

গারথ 75 গারথ 225

তবে অন্যান্য (75x75 এর চেয়েও বড়) আকারের ফলে আরও ভাল চিত্র পাওয়া যায়:

150 300

এবং, যদি আমরা রাষ্ট্রপতিদের সাথে থাকি:

দুব্বায়া 294 দুব্বইয়া 75 দুব্বায়া 225

যেহেতু এটি কোনও (আর?) কোডগল্ফ নয় তাই আমি কোডটি খুব বেশি "ছোট করে" ফেলতে বিরক্ত করি না। এছাড়াও, যেহেতু নির্দেশাবলীটি বিশেষভাবে চিত্রটির উচ্চতা (বর্গক্ষেত্র) এর সমান প্রস্থের হিসাবে উল্লেখ করা হয়নি আমি ফসল কাটা নিয়ে বিরক্ত করি নি; তবে আমি এটি নিশ্চিত করি যে চিত্রটি 3 পিক্সেল প্রশস্ত / উচ্চের একাধিক। আপনি যদি বর্গক্ষেত্রের চিত্র চান তবে : P: Pঅবশেষে স্কোয়ার ইনপুটগুলি ব্যবহার করুন ; অ্যালগরিদম অনুকূল থেকে অনেক দূরে।

আরও কয়েকটি (যেহেতু লোকেরা হট ছানা / ইন্টারনেট নায়কদের আরও বেশি করে তোলে : P: P)

কারি বায়রন 300 কারি বায়রন 75 কারি বায়রন 225 হফ 300 হফ 75 হাফ 225


3

Brainfuck

++++[->+[,.----------]<]>>>>---->->++++++++++>>------------>+++>+++>--
--->++++++[->+++++<]---->+[-<+++++++<+++<+++++<+++<+++<++++++<++++++<+
<++>>>>>>>>>]<[<]<<,+[,<++++++>[>++++++[->+++++++<]>+[<<[->]>[<]>-]<<<
->]+<[-[-[-[-[[-].>>>>>>>>.<.<<<<<<-<]>[->>>>>[.<]<<]<]>[-.>>>[>]<<<.<
.[<]<<]<]>[--.+>>>[>]<<.[<].<<]<]>[--.+>>>[>]<.[<].<<]<]>[--...+],,+]

এর জন্য একটি বিএফ ইন্টারফিটার / সংকলক প্রয়োজন যা ইওএফ হিসাবে -1 রয়েছে এবং এর মধ্যে 8 বিট কোষ বেশি থাকে যদি লাল পিক্সেলের একটি 255 হয়। অন্যথায় এটি অকাল বন্ধ হয়ে যাবে কারণ এটি ইওএফ এবং মান 0xFF এর মধ্যে পার্থক্য করতে সক্ষম হবে না । জিটিবিএফ দিয়ে আপনার কাছে মেশিনটির পূর্ণসংখ্যার আকার হিসাবে যা আছে তা রয়েছে এবং এটি ইওএফ হিসাবে -1 জোর করার জন্য করতে পারেন:

jitbf --eof -1 rubiks.bf < angelina.pnm > angelina-rubix.pnm

রেন্ডার করা চিত্র ফাইলের ফর্ম্যাটটি হ'ল সম্পূর্ণ আরজিবি পিএনএম ফাইল (পি 6), গিম্পের বিকল্প হিসাবে কাঁচা।

এটি কেবল সবুজ চ্যানেল ব্যবহার করে (যা কোনও রঙিন চিত্রকে গ্রেস্কেলতে রূপান্তর করার একাধিক পন্থার মধ্যে একটি)। কোন রুবিক রঙ ব্যবহার করতে হবে তা খুঁজে বের করার জন্য এবং কোনও স্যুইচ রয়েছে যা সঠিক আরবিজি রঙের সাথে সামঞ্জস্য করে প্রিন্ট করে এটি শূন্যের নীচে মানকে হ্রাস না করে মানটি 43 দ্বারা হ্রাস করে।

হ্যাকারস (1995) এর অ্যাঞ্জেলিনা জোলির চিত্রটি 75x75 এ ছোট করে প্রয়োগ করা হয়েছে:

অ্যাঞ্জেলিনা জোলি 75x75 / ফেয়ার ইউজ রুবিক্স কিউব রঙে / ফেয়ার ব্যবহারে অ্যাঞ্জেলিনা জোলি 75x75 একই স্কেল 6x

একই, আমি কেবল আসল আকারটি ব্যবহার করেছি :

একই কেবল প্রথম / ন্যায্য ব্যবহার কমিয়ে দেওয়া হয় না

এবং যেহেতু আমি মনস্তাত্ত্বিক এখানে একজন রাষ্ট্রপতিও রয়েছেন:

আর্নল্ড শোয়ার্জনেগার সিসি উইকিপিডিয়া থেকে


বিষয় ছাড়াই , তবে আজকের এক্সকেসিডি- তে হ্যাকারস (1995)
সিলেস্টার

1
এটি একটিও করে: xkcd.com/1247
শেড

1

উদ্দেশ্য গ

আমি গত রাতে এই চ্যালেঞ্জটি দেখেছি এবং এর সাথে এতটা বিভ্রান্তিমূলক সময় কাটিয়েছি -[NSArray indexOfObject:inSortedRange:options:usingComparator:], তাই বিলম্ব হয়েছে।

- (UIImage  *)rubiksImage:(UIImage *)inputImg
{
    //Thank you http://stackoverflow.com/a/11687434/1153630 for the greyscale code
    CGRect imageRect = CGRectMake(0, 0, inputImg.size.width, inputImg.size.height);

    int width = imageRect.size.width;
    int height = imageRect.size.height;

    uint32_t *pixels = (uint32_t*)malloc(width * height * sizeof(uint32_t));

    memset(pixels, 0, width * height * sizeof(uint32_t));

    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
    CGContextRef context = CGBitmapContextCreate(pixels, width, height, 8, width * sizeof(uint32_t), colorSpace, kCGBitmapByteOrder32Little | kCGImageAlphaPremultipliedLast);

    CGContextDrawImage(context, imageRect, [inputImg CGImage]);

    const int RED = 1;
    const int GREEN = 2;
    const int BLUE = 3;

    for (int y = 0; y < height; y++)
    {
        for (int x = 0; x < width; x++)
        {
            uint8_t* rgbaPixel = (uint8_t*)&pixels[y * width + x];
            uint32_t grayPixel = 0.3 * rgbaPixel[RED] + 0.59 * rgbaPixel[GREEN] + 0.11 * rgbaPixel[BLUE];

            NSArray *r = [self rubixColorFromGrey:grayPixel];

            rgbaPixel[RED] = [r[2] integerValue];
            rgbaPixel[GREEN] = [r[1] integerValue];
            rgbaPixel[BLUE] = [r[0] integerValue];
        }
    }

    CGImageRef newCGImage = CGBitmapContextCreateImage(context);

    CGContextRelease(context);
    CGColorSpaceRelease(colorSpace);
    free(pixels);

    UIImage* newUIImage = [UIImage imageWithCGImage:newCGImage];

    CGImageRelease(newCGImage);

    return newUIImage;
}

- (NSArray *)rubixColorFromGrey:(uint32_t)p
{
    NSArray *colors = @[@0, @51, @102, @153, @204, @255];

    NSUInteger index = [colors indexOfObject:@(p)
                               inSortedRange:NSMakeRange(0, colors.count)
                                     options:NSBinarySearchingInsertionIndex | NSBinarySearchingFirstEqual
                             usingComparator:^(id a, id b) {
                                return [a compare:b];
                             }];
    switch (index) {
        case 0:
            return rgb(0, 81, 186);
            break;
        case 1:
            return rgb(196, 30, 58);
            break;
        case 2:
            return rgb(0, 156, 96);
            break;
        case 3:
            return rgb(255, 82, 0);
            break;
        case 4:
            return rgb(255, 213, 0);
            break;
        case 5:
            return rgb(255, 255, 255);
            break;

        default:
            break;
    }

    return colors; //go wild
}

NSArray *rgb(int r, int g, int b)
{
    return @[@(r), @(g), @(b)];
}

আমি আমার আইপ্যাডে এটির মতো চালিয়েছি:

UIImageView *img = [[UIImageView alloc] initWithImage:[self rubiksImage:[UIImage imageNamed:@"danny.png"]]];
[img setCenter:self.view.center];
[self.view addSubview:img];

আগে ড্যানি দেভিটো এর আগে পরে ড্যানি দেভিটো পরে

আগে গ্রেস কেলি আগে পরে গ্রেস কেলি পরে


1

পাইথন

বিন্যাস: python rubik.py <input> <max_cubes> <output>

প্রস্তাবিত অ্যালগরিদম ব্যবহার করে গ্রেস্কেল থেকে পিক্সেল কভারগুলি।

import Image, sys

def rubik(x, max_cubes = 25):

    img = x
    max_cubes *= 3

    if x.size[0] > max_cubes or x.size[1] > max_cubes:

        print "Resizing image...",

        if x.size[0] > x.size[1]:
            img = x.resize((max_cubes, int(max_cubes * float(x.size[1]) / x.size[0])), Image.ANTIALIAS)
        else:
            img = x.resize((int((max_cubes * float(x.size[0]) / x.size[1])), max_cubes), Image.ANTIALIAS)

    if x.size[0] % 3 or x.size[1] % 3:
        print "Sizes aren't multiples of 3"
        return

    print "Image resized to %i x %i pixels" % img.size

    out = Image.new('RGB', img.size)

    print "Converting image...",

    for x in xrange(out.size[0]):
        for y in xrange(out.size[1]):
            r, g, b = img.getpixel((x, y))
            if r == g == b == 255:
                out.putpixel((x,y), (255, 255, 255))
            else:
                l = 0.2126 * r + 0.7152 * g + 0.0722 * b
                l /= 255
                out.putpixel((x,y), (
                        (0x00, 0x51, 0xBA),
                        (0xC4, 0x1E, 0x3A),
                        (0x00, 0x9E, 0x60),
                        (0xFF, 0x58, 0x00),
                        (0xFF, 0xD5, 0x00)
                    )[int(5 * (l <= 0.0031308 and 12.92 * l  or 1.055 * l ** (1/2.4) - 0.055))])

    print "Image converted successfully."

    print "Stats:"
    h, v = img.size[0] / 3, img.size[1] / 3
    print "   ", h, "horiz. Rubik cubes"
    print "   ", v, "vert. Rubik cubes"
    print "   ", h * v, "total Rubik cubes"

    return out.resize((out.size[0], out.size[1]))

if __name__ == "__main__":
    rubik(Image.open(sys.argv[1]).convert("RGB"), int(sys.argv[2])).save(sys.argv[3])

ইনপুট:

স্যান্ড্রো পার্টিনি
(উত্স: ilmamilio.it )

এর সাথে আউটপুট max_cubes = 25:

স্যান্ড্রো পার্টিনি, রুবিক'ড ১

এর সাথে আউটপুট max_cubes = 75:

স্যান্ড্রো পার্টিনি, রুবিক 2

এর সাথে আউটপুট max_cubes = 225:

স্যান্ড্রো পার্টিনি, রুবিক 3


সাদা রঙ অনুপস্থিত না? এবং সবচেয়ে অন্ধকারটি নীল হতে হবে, তবে, যেমনটি আমি এখন দেখছি, এটি অন্যান্য কয়েকটি চিত্রের ক্ষেত্রেও সমস্যা।
ব্যবহারকারী 2846289

নিবন্ধন করুন এগুলি ভুল ক্রমে ম্যাপ করা হয়েছে। সাদা যেমন প্রদর্শিত হচ্ছে না, এটি এফপি যথার্থতার কারণে (1.055 - 0.055 = 0.9999999999999999)। আমি মনে করি আমাকে সাদা কোডকোড করতে হবে, এটি শক্ত নয়, যেহেতু এটি কেবল #FFFFFF এর মূল মূল্যে প্রদর্শিত হবে।
ওবেরন 21

সাদা সম্পর্কে আমার মতামত ছিল যে ০.১.১ (লাইটনেস) রেঞ্জটি 6 টি ভাগে বিভক্ত হয়েছে এবং ০.৮৮.১.১.০০ কিছুতেই সাদা রঙে ম্যাপ করা হয়েছে, অন্যথায় কিউবের colors টি রঙের ছবি তৈরির ক্ষেত্রে খুব বেশি ধারণা থাকবে না , তবে আমি এটি পড়ি।
ব্যবহারকারী 2846289

@ ওবারন পার্টিনি ব্যবহার করে আকর্ষণীয় পছন্দ ... তিনি প্রায় 94 বছর বয়সে বেঁচে ছিলেন ... এবং পাইথন ব্যবহার করে দুর্দান্ত কাজ করেছেন এবং আমি স্বীকার করতেই পারি, আমি যে সহজ ভাষাগুলি পেয়েছি তার মধ্যে একটিও নয়, এত ভাল!
ওয়েলওয়েস্ট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.