পিক্সেল বাছাই করুন


35

আপনার কাজটি এমন একটি প্রোগ্রাম তৈরি করা যা কোনও ইনপুট চিত্র দেওয়া হলে একই আকারের একটি আউটপুট চিত্র তৈরি করবে, যেখানে সমস্ত পিক্সেল হেক্স মান দ্বারা অর্ডার করা হয়েছে।

আপনার প্রোগ্রামটি হতে পারে:

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

নিয়মাবলী:

  • আউটপুট অবশ্যই ডিস্কে লিখিত হতে হবে বা কোনও ফাইলে পাইপযোগ্য হতে হবে।
  • ইনপুটটি কোনও কমান্ডলাইন আর্গুমেন্ট হিসাবে দেওয়া হয়, চিত্রটির তুলনামূলক পথের আকারে, বা কমান্ডলাইন থেকে পাইপ করা হয়।
  • এটি কোড গল্ফ, তাই বাইটস মধ্যে সংক্ষিপ্ততম কোড!

উত্তর:


20

পাইথ - 10 বাইট

চিত্র পড়ে, বিটম্যাপ ধসে পড়ে, বাছাই করে এবং তারপরে আবার বিটম্যাপ বিভক্ত হয়, তারপরে লিখেন।

.wclK'zSsK

সুস্পষ্ট কারণে অনলাইনে কাজ করে না। চিত্র ফাইল এবং আউটপুটগুলিতে আপেক্ষিক পথ হিসাবে ইনপুট নেয় o.png

আমেরিকান গথিক থেকে আউটপুট:


3
আমি আশা করি যে ছবিটি যেভাবে চলছে সে সম্পর্কে আমি একা নই ...
কোয়ান্টিন

দেখতে কাঠের মতো লাগছে।
জো জেড।

19

জাভাস্ক্রিপ্ট (ES6), 383 377 354 বাইট

f=s=>{d=document,i=new Image,i.src=s,i.onload=$=>{c=d.createElement`canvas`,x=c.getContext`2d`,c.width=w=i.width,c.height=h=i.height,x.drawImage(i,0,0),D=x.getImageData(0,0,w,h),t=D.data,t.set([].concat(...[...t].map((v,i,T)=>i%4?[,,,0]:T.slice(i,i+4)).sort((a,b)=>a.some((v,i)=>k=v-b[i])&&k)).slice(12*w*h)),x.putImageData(D,0,0),d.body.appendChild(c)}}

নমুনা আউটপুট

চলমান ডেমো:

এই কোডটি কীভাবে কাজ করে তা getImageDataফর্মের একটি অ্যারে পেতে ব্যবহার করা

[R,G,B,A,
 R,G,B,A,
 R,G,B,A,
 ...]

এবং mapএটি ফর্মের একটি অ্যারেতে

[[R,G,B,A],[0,0,0,0],[0,0,0,0],[0,0,0,0],
 [R,G,B,A],[0,0,0,0],[0,0,0,0],[0,0,0,0],
 [R,G,B,A],[0,0,0,0],[0,0,0,0],[0,0,0,0],
 ...]

যাতে আরজিবিএ সেট এর অ্যারেগুলিতে আর মানগুলি ম্যাপ করা হয় এবং বি, জি, এবং এ মানগুলি সর্বনিম্ন-মান শূন্য অ্যারে রূপান্তরিত হয়। আমরা যখন এই অ্যারেটি বাছাই করি তখন সমস্ত [0,0,0,0]অ্যারে নীচে বাছাই করে এবং আসল-মানের অ্যারেগুলি শীর্ষে সাধারণত সাজান:

[[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],
 [0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],
 [0,0,0,0],..., [R,G,B,A],[R,G,B,A],[R,G,B,A],...]
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
               extract & flatten these sorted pixels

আমরা অ্যারের শীর্ষ চতুর্থ স্কিমে (আমাদের তৈরি শূন্য মানগুলি হারাতে), এটি দিয়ে সমতল করুন [].concat.applyএবং আবার প্রথম ফর্মের অ্যারে দিয়ে শেষ করব, তবে এবার এটি সাজানো হয়েছে।

সাদা স্থান এবং মন্তব্যগুলির সাথে সামান্য ডি গল্ফ করা:

f=s=>{ 
  // first, load image, then do everything else onload
  i=new Image,
  i.src = s,
  i.onload=$=>{
    // set up the canvas
    d=document,
    c=d.createElement`canvas`,
    w=c.width=i.width,
    h=c.height=i.height,
    x=c.getContext`2d`,

    // draw image to canvas and capture pixel data
    x.drawImage(i,0,0),
    D=x.getImageData(0,0,w,h),
    t=D.data,

    // set pixel data to...
    t.set(
      // the flattened array...
      [].concat(...
        // that is a mapping of the pixel data...
        [...t].map(
          // that clumps RGBA families into subarrays
          // by replacing every fourth value with [R,G,B,A]
          // and all other values to [0,0,0,0]...
          (v,i,T)=>i%4?[,,,0]:T.slice(i,i+4)
        )
        // and is then sorted...
        .sort(
          // by reducing each array to a positive, negative, or zero
          // by comparing R,G,B,& A until the first nonzero difference
          (a,b)=>a.some((v,i)=>k=v-b[i])&&k
        )
      )
      // then eliminate the low-sorted empty [0,0,0,0] values we created,
      // leaving only the top fourth, with real values
      // (note that 3*4*w*h is the same as 3*t.length)
      .slice(3*4*w*h)
    ),

    // now that `t` is set, store `D` in canvas
    x.putImageData(D,0,0),

    // show canvas
    d.body.appendChild(c)
  }
}

নোট করুন যে বেশিরভাগ ব্রাউজারগুলি বৃহত চিত্রগুলির জন্য এই কোডটি চালাতে ব্যর্থ হতে পারে, কারণ এটি বিপুল সংখ্যক তর্ক যুক্ত করে [].concat। যখন ব্রাউজার পরিবেশটি সমস্ত আর্গুমেন্টের জন্য পর্যাপ্ত মেমরির অনুমতি দেয় না, তখন বিকল্প বিকল্পটি মোট চতুর্থ অ্যারেগুলির মধ্যে আরজিবিএ মানগুলি পুনরায় ম্যাপ করার জন্য মোট ৩ score১ বাইটের জন্য :

f=s=>{d=document,i=new Image,i.src=s,i.onload=$=>{c=d.createElement`canvas`,x=c.getContext`2d`,c.width=w=i.width,c.height=h=i.height,x.drawImage(i,0,0),D=x.getImageData(0,0,w,h),t=D.data,t.set([...t].map((v,i,T)=>i%4?[,,,0]:T.slice(i,i+4)).sort((a,b)=>a.some((v,i)=>k=v-b[i])&&k).map((v,i,A)=>A[3*w*h+(i>>2)][i%4])),x.putImageData(D,0,0),d.body.appendChild(c)}}

আমরা কেবল এর [].concat(...{stuff}).slice(12*w*h)সাথে প্রতিস্থাপন করি {stuff}.map((v,i,A)=>A[3*w*h+(i>>2)][i%4])))


আপনি একটি উদাহরণ আউটপুট অন্তর্ভুক্ত করতে পারেন?
পাওলো ইবারম্যান

@ PaŭloEbermann সম্পন্ন।
অ্যাপসিলাররা 3:55

@ অন্তর্ভুক্তকারীর নাম এখানে ওহ, ডাং, আমি কেবল ছোট ছবিতে পরীক্ষা করেছি। আমার concat.applyকলটি প্রচুর যুক্তি সরবরাহ করছে concatএবং জেএস ইঞ্জিন এটি প্রত্যাখ্যান করছে। D:ধন্যবাদ! আমি এটি ঠিক করব এবং দুটি স্কোর নোট করব। (এবং আমি আনন্দিত যে আমি সহায়তা করতে পারি!)
অ্যাপসিলাররা 3:55

@ অন্তর্ভুক্তকারীর নাম এখানে আকার সীমাবদ্ধতা সম্পর্কে মাথা উঁচু করার জন্য ধন্যবাদ; আমি এখন আরও দীর্ঘতর সংস্করণ প্রকাশ করেছি যা বৃহত্তর চিত্রগুলিতে কাজ করে।
অ্যাপসিলাররা

@ অ্যাপ্লায়ার্স চমৎকার কাজ। দুর্ভাগ্যক্রমে আবার উত্সাহ দেওয়া যাবে না। :)
সন্নিবেশকারী নাম 14

14

গণিত 86 86 72 বাইট

 f=Flatten;Image[f[Sort[f[s=ImageData@#1,1]]]~ArrayReshape~Dimensions@s]&

14 মার্টিন বাটনারকে 14 টি বাইট সংরক্ষণ করা হয়েছে।


উদাহরণ

চিত্রটি নিজেই ইনপুট। বিকল্পভাবে, ইমেজ সমেত একটি ভেরিয়েবল ব্যবহার করা যেতে পারে।

গোথিক


চ্যালেঞ্জটি নির্দিষ্ট করে যে পিক্সেলগুলি হেক্স মান অনুসারে বাছাই করা হবে তবে আমি যদি এটি সঠিকভাবে পড়ি তবে আপনি athe আর, জি, বি} বা {আর, জি, বি, আলফা} তালিকার জন্য ম্যাথামেটিকার ডিফল্ট বাছাই করুন। এগুলি সমতুল্য তা আমার কাছে পরিষ্কার নয়।
মাইকেল স্টারন

@ মিশেলস্টারন আমি ম্যাথমেটিকাকে চিনি না, তবে যদি এটি বেশিরভাগ ভাষার মতো মৌলিকভাবে দ্বিখণ্ডুগুলি সাজায় তবে সেগুলি সমান: হেক্সের মতো সংখ্যা প্রতিটি অঙ্ক অনুসারে বাছাই করা হয়, যার মধ্যে দুটি টিউলের প্রতিটি উপাদান দ্বারা প্রতিনিধিত্ব করা হয়।
মালটিসেন

@ মিশেলস্টারন, মালটিসেন সঠিক is আরজিবি বাছাই এবং হেক্স বাছাই সমতুল্য: আর এর দ্বারা বাছাই করুন, তারপরে জি, তারপরে বি মান হেক্সে স্থানের মান অনুসারে কাজ করবে।
ডেভিডসি

ঠিক আছে, আমার কাছ থেকে +1
মাইকেল স্টারন

ImageDataএবং ArrayReshapeইনফিক্স স্বরলিপি ব্যবহার করতে পারে। Flattenএটিকে বরাদ্দ করে বেশ কয়েকটি বাইট সংরক্ষণ করা যথেষ্ট দীর্ঘ f। এবং আপনার আসলে কি দরকার "Byte"? ডিফল্ট কি কেবলমাত্র চ্যানেলের মানগুলি [0,1]এমনভাবে স্কেল করবে না যে বাছাই এবং চিত্র পুনর্নির্মাণটি এখনও ঠিক কাজ করবে?
মার্টিন ইন্ডার

5

জাভাস্ক্রিপ্ট ES6, 334 বাইট

f=s=>{with((d=document).body.appendChild(c=d.createElement`canvas`).getContext`2d`)(i=new Image).src=s,drawImage(i,0,0,w=c.width=i.width,h=c.height=i.height),t=(g=getImageData(0,0,w,h)).data,t.set([...t].map(i=>(0+i.toString(16)).slice(-2)).join``.match(/.{8}/g).sort().join``.match(/../g).map(i=>parseInt(i,16))),putImageData(g,0,0)}

Ungolfed:

f=s=>{                                   // create function that accepts image name
 with((d=document).body.appendChild(     // use "with" to exclude having to prepend "<context2d>." to drawImage, getImageData and putImageData
   c=d.createElement`canvas`).getContext`2d`) // create canvas to get pixels from and draw output to
  (i=new Image).src=s,                   // create image, define source filename
  drawImage(i,0,0,w=c.width=i.width,     // draw image to canvas
                  h=c.height=i.height),
  t=(g=getImageData(0,0,w,h)).data,      // get image data from canvas in form of Uint8Array
  t.set([...t]                           // convert image data from Uint8Array to standard array
   .map(i=>(0+i.toString(16)).slice(-2)) // convert R,G,B,A bytes to base16 strings with leading zeros
   .join``.match(/.{8}/g)                // convert array of [R,G,B,A,R,G,B,A,...] to [RGBA,RGBA,...]
   .sort()                               // sort pixel values
   .join``.match(/../g)                  // convert array of [RGBA,RGBA,...] to [R,G,B,A,R,G,B,A,...]
   .map(i=>parseInt(i,16))),             // convert hex strings back to integers, reassign to image data
  putImageData(g,0,0)                    // dump image data onto canvas
}

@ অন্তর্ভুক্তকারীর নাম এখানে সর্বশেষতম ফায়ারফক্সে কাজ করে। আপনার উত্তরের মতো এটিও ধরে নিয়েছে যে ক্যানভাস যুক্ত করার জন্য একটি বডি রয়েছে এবং উত্সের চিত্রটি একই ডোমেনের।
ডেনড্রোবিয়াম

+1 খুব স্নিগ্ধ সমাধান। এটি 1600 x 1900px পর্যন্ত চিত্রগুলি প্রক্রিয়া করে।
সন্নিবেশকারী নাম 8

2
আজ আমি শিখেছি যে appendChildতার যুক্তি ফিরিয়ে দেয়। খুব দরকারী! আপনি আমাকে আমার এন্ট্রিটি 377 থেকে 354 পর্যন্ত কমিয়ে আনতে অনুপ্রাণিত করেছিলেন, তবে আমি আপনাকে যথেষ্ট পরিমাণে পরাজিত করতে পারি না :)। (আমি যখন আপনার appendChildচেনিং এবং withকৌশল ব্যবহার করি তখন আমি এটিকে 347 এ নামাতে পারি, তবে এখনও 13 দূরে!) দুর্দান্ত কাজ!
অ্যাপসিলাররা

5

সি (এসডিএল 1.2 ব্যবহার করে), 333 322 315 বাইট

সি সম্ভবত এই ধরণের কাজের জন্য 'শেল্ফের তীক্ষ্ণ ছুরি' নয়, আমি যাইহোক এটি চেষ্টা করে দেখতে চাই। আমার উত্তর উন্নতি করার টিপস স্বাগত। প্রোগ্রামটি ক্লিপ আর্গুমেন্ট হিসাবে ইনপুট ইমেজ ফাইলটির নাম পায়।

#include <SDL.h>
#include <SDL_image.h>
#define X SDL_Surface*
#define Y const void*
C(Y a,Y b){return*(Uint32*)a-*(Uint32*)b;}main(int o,char**a){X i=IMG_Load(a[1]);X s=SDL_SetVideoMode(i->w,i->h,32,0);i=SDL_ConvertSurface(i,s->format,0);qsort(i->pixels,i->w*i->h,4,C);SDL_BlitSurface(i,0,s,0);for(;;SDL_Flip(s));}

সংকলন এবং চালনা: gcc -I/usr/include/SDL snippet.c -lSDL -lSDL_image && ./a.out

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

আমি সাধারণত সি তে গল্ফ করি না, তবে আমি ঠিক উত্তর দিয়েছি গতকালই এই চ্যালেঞ্জটির দিয়েছি এবং আমি কেবল নতুন খেলনাটির সাথে খেলা চালিয়ে যেতে চেয়েছিলাম :)

5 টি বাইট সংরক্ষণে আমাকে সহায়তার জন্য @ ছদ্মনাম 117 কে ধন্যবাদ


আপনার whileশেষে পরিবর্তন করে 1 বাইট সংরক্ষণ করতে পারে for(;;SDL_Flip(s));এবং আমি বিশ্বাস করি আপনি intপদ্ধতিটি বাদ দিতে পারেন Cএবং আরও 4 টি সঞ্চয় করতে পারেন ।
ছদ্মনাম

4

জাভাস্ক্রিপ্ট (ES6), 452 480 484 487 511 বাইট

বাহ, এটি প্রত্যাশার চেয়ে দীর্ঘ হয়েছে:

f=u=>{i=new Image;i.src=u;i.onload=_=>{c=(d=document).createElement`canvas`;c.width=w=i.width;c.height=h=i.height;x=c.getContext`2d`;x.drawImage(i,0,0,w,h);p=x.getImageData(0,0,w,h).data;t=[];f=[];for(j=0;j<p.length;++j)t.push([p[j],p[++j],p[++j],p[++j]]);t.sort((a,b)=>a[0]>b[0]||a[0]==b[0]&&a[1]>b[1]||a[0]==b[0]&&a[1]==b[1]&&a[2]>b[2]).map(u=>f.push.apply(f,u));x.putImageData(new ImageData(new Uint8ClampedArray(f),w,h),0,0);d.body.appendChild(c)}}

ফাংশনটি f('test.jpg');একটি canvasইউআরএলকে এর ইনপুট হিসাবে নেয় এবং ফলাফলকে একটি- এলিমেটে আঁকায় যা এতে যুক্ত হয়body

নোট করুন উত্সটি অবশ্যই একই ডোমেনে থাকতে হবে বা স্ক্রিপ্টটি কোনও সুরক্ষা সমস্যা নিয়ে থামবে।


সীমাবদ্ধতা

আমি এটি 2.5 গিগাহার্জ আই 7 এবং 16 জিবি র‌্যাম সহ একটি মেশিনে ওএস এক্স (10.10) এর ফায়ারফক্স 42 এ পরীক্ষা করেছি। ফায়ারফক্স ছাড়াই স্ক্রিপ্টের কার্যকারিতা চালিয়ে যাওয়ার কথা জিজ্ঞাসা না করে আমি সর্বাধিক চিত্রের আকারটি 1600 x 1932 px


Ungolfed

f = u => {
    i = new Image;
    i.src = u;
    i.onload = _ => {
        c = (d = document).createElement`canvas`;
        c.width = w = i.width;
        c.height = h = i.height;

        x = c.getContext`2d`;
        x.drawImage(i, 0, 0, w, h);

        p = x.getImageData(0, 0, w, h).data;

        t = [];
        f = [];

        for (j = 0; j < p.length;++j)
            t.push([p[j], p[++j], p[++j], p[++j]]);

        t.sort( (a,b) => a[0] > b[0] || a[0] == b[0] && a[1] > b[1] || a[0] == b[0] && a[1] == b[1] && a[2] > b[2] )
         .map(u => f.push.apply(f,u));

        x.putImageData( new ImageData( new Uint8ClampedArray(f), w, h), 0, 0);
        d.body.appendChild(c)
    }
}

আউটপুট

আরও ভাল তুলনার জন্য আমি " আমেরিকান গথিক " উদাহরণের উত্স হিসাবেও নিয়েছি :

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


সম্পাদনাগুলি

  • সংরক্ষিত 24 বাইট ব্যবহার করে for (a in b)পরিবর্তে for(;;)। ধন্যবাদ ar34z
  • সংরক্ষিত 3 বাইট মজুত করে documentএকটি পরিবর্তনশীল হবে।
  • এর মধ্যে কিছু ফেলে রেখে 4 বাইট সংরক্ষণ করা হয়েছে()
  • সংরক্ষিত 10 বাইট ব্যবহার করে বাঁধা টেমপ্লেট স্ট্রিং , বাদ ()বস্তুর সৃষ্টি ও অপ্রয়োজনীয় আরেকটি জুটি সরানোর ()অ্যাপসিলারদের ধন্যবাদ ।
  • সংরক্ষিত 14 বাইট কোড যা বাছাই পর রঙ অ্যারের চ্যাপ্টা ব্যাপক refactoring দ্বারা। একে অপরকে ছাঁটাই করার জন্য অ্যাপসিলার এবং ইপনিপেনকে অনেক ধন্যবাদ ।
  • সংরক্ষিত 1 বাইট refactoring দ্বারা for-loop যে প্রতিটি পিক্সেল রং পায়।

1
আপনি for(k in t)আরও কয়েকটি বাইট সংরক্ষণ করবেন যা ব্যবহার করে-লুপগুলি হ্রাস করতে পারেন :)
34z

1
চমৎকার কাজ! কিছুটা উন্নতি: হারান ()মধ্যে new Image(); ব্যবহার বাঁধা টেমপ্লেট স্ট্রিং আপনার স্ট্রিং আর্গুমেন্ট জন্য ( createElement`canvas`, getContext`2d`), একক তীর ফাংশন পরামিতি জন্য প্রথম বন্ধনী ব্যবহার করবেন না (ঠিক না f=u=>{...}; ডান বন্ধনী শুধুমাত্র বহু-পরামিতি বা শূন্য-প্যারামিটার তীর funcs জন্য)। এছাড়াও আপনার এক বা দুটি একক-বিবৃতি forলুপ থাকতে পারে যার বন্ধনী রয়েছে, যা প্রয়োজনীয় নয়।
অ্যাপসিলাররা

ওহ, আসলে শূন্য-যুক্তিযুক্ত তীর ফানকের জন্য, দ্বি-চর খালি পেরেনগুলির পরিবর্তে একটি একক-বর্ণের ডামি যুক্তি ব্যবহার করুন। ( i.onload=$=>...পরিবর্তে i.onload=()=>...)
অ্যাপসিলাররা

আমার মনে হয় for(l in u)f.push(u[l]);হতে পারেfor(z of u)f.push(z);
Ypnypn

@Ypnypn এটা হতে পারে এমনকি খাটো যে এর চেয়ে :)। - for(u of t)for(z of u)f.push(z)বেশ ডাঙ সংক্ষিপ্ত, তবে এটি আরও ছোট করা যেতে পারে t.map(u=>u.map(z=>f.push(z)))। অনেক ক্ষেত্রে, একটি তীর ফাংশন ব্যবহার করে .mapবা .someসহ একটি forলুপ ব্যবহারের চেয়ে কম হতে চলেছে । আপনি যদি সত্যিই পাগল হয়ে যেতে চান তবে আপনি এখানে আরও অনেক কিছু সঞ্চয় করতে পারবেন t.map(u=>f.push.apply(f,u));যা দিয়ে বলা হয়েছে "প্রতিটি অ্যারের uজন্য t, uযুক্তির f.pushমাধ্যমে তালিকা হিসাবে সরবরাহ করুন apply(যেহেতু pushএকটি সীমাহীন সংখ্যক যুক্তি গ্রহণ করতে পারে এবং এটি ক্রম অনুসারে সমস্তটি ধাক্কা দেয়)"।
অ্যাপসিলাররা

4

বাশ + জিএনইউ ব্যবহার, 80

s()(sed 1d $1|cut -d\  -f$2)
sed 1q $1
s $1 2-|sort -t_ -k1.16|paste <(s $1 1) -

এটি ধরে নেয় ইনপুট / আউটপুট ফর্ম্যাটটি চিত্রম্যাগিক পিক্সেল এনুমারেশন। টেক্সট ফর্ম্যাট। ইনপুটটি ফাইলের নাম হিসাবে পাস হয় এবং আউটপুটটি STDOUT এ যায়।


যদি উপরেরটি একটি সুপরিচিত চিত্রের ফর্ম্যাট হিসাবে বিবেচনা না করা হয়, তবে আমরা প্রয়োজনীয় রূপান্তরগুলিতে যুক্ত করতে পারি:

বাশ + জিএনইউ + ইমেজম্যাগিক, 108 ব্যবহার করে

s()(sed 1d t|cut -d\  -f$1)
convert $1 txt:t
(sed 1q t
s 2-|sort -t_ -k1.16|paste <(s 1) -)|convert txt:- $2

ইনপুট এবং আউটপুট ফাইলের নাম হিসাবে নির্দিষ্ট করা হয়। পাস করা ফাইল এক্সটেনশনগুলির দ্বারা কোন ফাইল ফর্ম্যাটগুলি ব্যবহার করতে হবে তা চিত্রম্যাগিক নির্ধারণ করে, তাই আমরা যে কোনও সাধারণ ব্যবহার করতে পারি:

$ ./sortpixels.sh 398px-Grant_Wood_-_American_Gothic_-_Google_Art_Project.jpg o.png
$ 

ফলাফল o.png দেখতে দেখতে:

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


3

পাইথন 2, 128 বাইট

from PIL import*
a=Image.open('a')
b=a.load()
c,d=a.size
a.putdata(sorted(b[e,f]for f in range(d)for e in range(c)))
a.save('b')

প্রদত্ত চিত্রটি কোনও ফাইল নয় যার নাম aছাড়াই এক্সটেনশান রয়েছে, আউটপুটটি এমন কোনও ফাইল থাকবে যার নাম bছাড়াই এক্সটেনশন থাকবে।

আমেরিকান গথিক আমেরিকান গথিক (সাজানো)


আমি পরীক্ষা করে দেখিনি, তবে এর a.putdata(sorted(b[f/c,f%d]for f in range(d*c)))পরিবর্তে আপনার কিছু করা উচিত (আমি সবেমাত্র জেগেছি, তাই আমি ভেরিয়েবলগুলি মিশ্রিত করতে পারি)।
কেদে

যেমনটি আপনি লিখেছেন, এটি কাজ করে নি (সূচকের বাইরে সূচি), তবে আমি কোনও ভেরিয়েবলের চারপাশে স্যুইচ করার চেষ্টা করিনি (এই মুহুর্তে আমার বেশি সময় নেই)। @ শেবাং
জাচ গেটস

3

জাভা, 316 বাইট

import javax.imageio.*;class C{public static void main(String[]a)throws Exception{java.awt.image.BufferedImage i=ImageIO.read(new java.io.File(a[0]));int w=i.getWidth(),h=i.getHeight(),v[]=i.getRGB(0,0,w,h,null,0,w);java.util.Arrays.sort(v);i.setRGB(0,0,w,h,v,0,w);ImageIO.write(i,"png",new java.io.File("a.png"));}}

একটি অ্যারেতে পিক্সেল রঙের হেক্সাডেসিমাল মান রাখে। অ্যারে বাছাই করা হয় এবং রঙগুলি চিত্রের পিক্সেলগুলিতে পুনরায় সজ্জিত হয়। ফলস্বরূপ চিত্রটির নাম a.png

হলুদ টিউলিপস ইনপুট হলুদ টিউলিপ আউটপুট
আমেরিকান গথিক ইনপুট এখানে চিত্র বর্ণনা লিখুন


3

স্মাইলব্যাসিক, 39 35 বাইট

ধরে নিচ্ছি চিত্রটি 512 * 512 গ্রাফিক্স পৃষ্ঠায় লোড হয়েছে:

DIM A[0]GSAVE A,0SORT A
GLOAD A,0,1

ব্যাখ্যা:

DIM IMG[0] 'create array
GSAVE IMG,0 'save graphics to array
SORT IMG 'sort
GLOAD IMG,0,1 'load graphics from array

এটা যে সহজ! দুর্ভাগ্যক্রমে আমাদের পূর্ণসংখ্যার ব্যবহার করতে হবে, যা প্রত্যয় প্রকারের কারণে প্রোগ্রাম আকারে 4 বাইট যুক্ত করে।


আমি সত্যই নিশ্চিত নই যে কেন অন্তর প্রয়োজন হয়। দেখে মনে হচ্ছে যেন ভাসা ব্যবহার করা আসলে ফলাফলটি সঠিক হয়। এই কোডটি ints ব্যবহার করে চালানো উপরের বামদিকে একটি এবং নীচে ডানদিকে একটি SYS/DEFSP.GRPরাখে , যা প্রশ্নের আপাত বিপরীত। উপরের বামে এবং নীচে ডানদিকে ভাসমান রাখে যা সঠিক। (অবশ্যই, এটি হেক্স FF0000000010101000000000FFF8F8F8
রঙগুলিকে

আমি মনে করি এটি বৈধ, যেহেতু প্রশ্নটি অনুসারে বাছাই করার জন্য কোনও নির্দিষ্ট আদেশ নির্দিষ্ট করে না (এবং যেহেতু মানগুলি স্বাক্ষরিত হয়, 0xFF000000তার চেয়ে ছোট হয় 0x00101010) তবে যাইহোক, আমি কেন এখানে পূর্ণসংখ্যা ব্যবহার করেছি তা আসলে নিশ্চিত নই ... আমি মনে করি যখন আপনি কোনও ফ্লোট অ্যারে ব্যবহার করবেন তখন GLOAD কীভাবে স্বাক্ষরবিহীন মানগুলি ব্যবহার করেছিল তা আমি বুঝতে পারি নি এবং কেবল ধরে নিয়েছি এটি কার্যকর হয়নি।
12

2

জাভা, 424 417 404 বাইট

ঠিক আছে, এটি এমন কোনও ভাষা নয় যা আপনি গল্ফ করতে চান ...

import java.awt.image.*;import java.io.*;import javax.imageio.*;class F{public static void main(String[]x)throws Exception{BufferedImage i,o;i=ImageIO.read(new File(x[0]));o=new BufferedImage(i.getWidth(),i.getHeight(),BufferedImage.TYPE_INT_RGB);o.setData(i.getRaster());int[]p=((DataBufferInt)o.getRaster().getDataBuffer()).getData();java.util.Arrays.sort(p);ImageIO.write(o,"png",new File("o.png"));}}

2

সি #, 497 বাইট

প্রথম বার পোস্ট, প্রথম গল্ফ। স্পষ্টতই গল্ফিংয়ের জন্য সেরা নয়

পাইপিংকে সত্যিই সম্মান করা হচ্ছে না। একটি ইনপুট হিসাবে একটি চিত্রের পথ নেয় এবং এটি "ও" অক্ষর দিয়ে আউটপুট করে নামের প্রিপেন্ড করে।

বিটম্যাপের সাথে আরও ভাল কাজ করে, অন্যের সাথে প্রতিকূল ফলাফল

using System.Linq;using System.Drawing;using System.Runtime.InteropServices;class Program{static void Main(string[]args){using(var im=(Bitmap)Image.FromFile(args[0])){int h=im.Height;int w=im.Width;var b=im.LockBits(new Rectangle(0,0,w,h),System.Drawing.Imaging.ImageLockMode.ReadWrite,System.Drawing.Imaging.PixelFormat.Format32bppRgb);var p=new int[h*w];Marshal.Copy(b.Scan0,p,0,h*w);var q=p.ToList();q.Sort();p=q.ToArray();Marshal.Copy(p,0,b.Scan0,h*w);im.UnlockBits(b);im.Save("o"+args[0]);}}}

1

হাস্কেল, 195 বাইট

import Data.List
import Graphics.GD
f p=do 
 a<-loadPngFile p;(x,y)<-imageSize a;let l=[(i,j)|j<-[0..y],i<-[0..x]]
 mapM(flip getPixel a)l>>=mapM(\(d,c)->setPixel d c a).zip l.sort;savePngFile"o"a

এটি GDগ্রন্থাগার ব্যবহার করে । ব্যবহারের f <filename>। ইনপুট ফাইলটি অবশ্যই pngফর্ম্যাটে থাকতে হবে । আউটপুট ফাইলটির নাম দেওয়া হয়েছেo

এটি কীভাবে কাজ করে: সোজা, অর্থাত্ ছবিটি পড়ুন, সমস্ত স্থানাঙ্কের উপর দিয়ে হাঁটুন এবং পিক্সেলগুলি পান, পিক্সেলগুলি বাছাই করুন, আবার স্থানাঙ্কের উপর দিয়ে হাঁটুন, তবে এবার পিক্সেলগুলি সাজানো তালিকায় প্রদর্শিত ক্রম হিসাবে সেট করুন, এতে ফাইলটি লিখুন ডিস্ক।

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

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.