রেনবোলিফাই একটি চিত্র


23

এই চ্যালেঞ্জটি ধীরে ধীরে সুন্দর ছবিগুলি তৈরি করার জন্য কোনও চিত্রের রঙ পরিবর্তন করতে চলেছে:

বড় স্টারি নাইট ( মূল )

চ্যালেঞ্জ

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

আমরা প্রথম পূর্ণসংখ্যাটি চক্র এবং দ্বিতীয় পূর্ণসংখ্যাটিকে অফসেট বলব ।

আমরা ফ্লোটিং পয়েন্ট নির্ধারণ করব পদক্ষেপ 360 গুন বেশি চক্র ইমেজ এলাকা, বা দ্বারা বিভক্ত step = 360 * cycles / (image width * image height)

চিত্রের প্রতিটি পিক্সেল পি এর জন্য একবারে এক সারি সরিয়ে, বাম-থেকে-ডান, উপরে-থেকে-নীচে (অর্থাত পিক্সেলগুলি অক্ষর হলে পাঠ্য ক্রমে), নিম্নলিখিতটি করুন:

  1. বাড়ান রঙ এর পি দ্বারা অফসেট (360 থেকে ঘুরে বেরাচ্ছে 0 প্রয়োজন হলে) ডিগ্রি।

  2. তারপর বেড়ে অফসেট দ্বারা ধাপ

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

এই প্রক্রিয়াটি ক্রমবর্ধমানভাবে চিত্রের সমস্ত পিক্সেলের বর্ণকে বাড়িয়ে তোলে এবং হিউ রংধনুটির চারপাশে চক্রগুলি সম্পূর্ণ লুপ তৈরি করে , প্রাথমিকভাবে অফসেট দ্বারা হিউ অফসেট করে শুরু করে ।

যখন চক্রটি 1 হয় এবং অফসেট 0 হয়, উপরের স্টেরি নাইট চিত্রের মতো, পিক্সেলের উপরের এবং নীচের সারিগুলিতে কার্যত কোনও হিউ শিফট নেই তবে পুরো রঙ চক্রের মধ্যে রয়েছে।

বিস্তারিত

  • চক্রগুলি কোনও অ-নেতিবাচক পূর্ণসংখ্যার হতে পারে তবে আপনি ধরে নিতে পারেন যে অফসেটটি 0 থেকে 359 পর্যন্ত অন্তর্ভুক্ত।

  • যখন চক্র 0 হয়, তখন চিত্রের প্রতিটি পিক্সেলটির হিউটি ঠিক অফসেট দ্বারা স্থানান্তরিত হবে কারণ পদক্ষেপটি 0 0 হওয়া আবশ্যক। (এই ক্ষেত্রে যদি অফসেট 0 হয় তবে চিত্রটি মোটেও বদলায় না doesn't)

  • আপনি ধরে নিতে পারেন চক্র এবং অফসেটটি ইনপুট হিসাবে ভাসা হিসাবে ইচ্ছে থাকলে (যেমন 1.0পরিবর্তে 1)। (আমি বুঝতে পারি যে তাদের মোটেও পূর্ণসংখ্যার হওয়া উচিত নয়, এটি চ্যালেঞ্জকে আরও সহজ করে তোলে))

  • "হিউ" এইচএসএল / এইচএসভি রঙের মডেলগুলিতে প্রচলিত আরজিবি রঙের স্পেস সংস্করণকে বোঝায় ।

উদাহরণ

মূল:

নদী

চক্র = 1, অফসেট = 0:

নদীর আউটপুট ১

চক্র = 1, অফসেট = 180:

নদীর আউটপুট 2

মূল:

গোলকের

চক্র = 2, অফসেট = 60:

গোলক আউটপুট

মূল:

সূর্যাস্ত
(ধন্যবাদ আর্টঅফকোড ।)

চক্র = 1, অফসেট = 120:

সূর্যাস্তের আউটপুট

মূল:

দরজার হাতল
(ধন্যবাদ ডোরকনব ।)

চক্র = 1, অফসেট = 0:

ডোরকনব আউটপুট 1

চক্র = 4, অফসেট = 0:

ডোরকনব আউটপুট 2

চক্র = 200, অফসেট = 0:

ডোরকনব আউটপুট 3

চক্র = 30000, অফসেট = 0:

ডোরকনব আউটপুট 4

(এই চিত্রগুলি ইমগ্রুর সংকোচনের কারণে পিক্সেল নিখুঁত হতে পারে না))

স্কোরিং

বাইটের মধ্যে সংক্ষিপ্ততম কোডটি জয়ী। টাইব্রেকার বেশি ভোট দেওয়া উত্তর।

তাদের নিজস্ব শীতল চেহারার পরীক্ষার চিত্রগুলি পোস্ট করা উত্তরগুলি আমার কাছ থেকে আরও ব্রাউন পয়েন্ট পাবে।


6
দেখে মনে হচ্ছে ডুরকনব কিছু পাত্র ধূমপান করছে।
ডেনকার

আমি প্রত্যাখ্যানের একটি অ্যারের হিসাবে প্রত্যাবর্তন মান "বা আউটপুট কাঁচা" অন্তর্ভুক্ত করা হবে?
মার্ভ

2
@ মারভ নং, আমি বলতে চাইছি ইমেজটির কাঁচা বাইট (আপনার নির্বাচিত সাধারণ ফর্ম্যাটে, পিপিএম বলুন ) সরাসরি স্টাডাউটে পাইপ করা যায়।
ক্যালভিনের শখ

2
আউটপুটগুলি কি আপনার উদাহরণগুলির সাথে অভিন্ন হতে হবে? আমি কিছুটা আলাদা ইমেজ পাচ্ছি ।
DJMcMayhem

1
@ ডিগ্রিগ্রিনইগস্যান্ডহ্যামডিজে আপনি যদি দৃষ্টিভঙ্গি দিয়ে কোনও পার্থক্য বলতে না পারেন তবে সম্ভবত এটি ভাল। পিক্সেল পরিপূর্ণতা প্রয়োজন হয় না (imgur যাইহোক ক্ষতিগ্রস্থভাবে আমার ইমেজ সংকুচিত হতে পারে)।
ক্যালভিনের শখ

উত্তর:


8

পাইথ, 86 বাইট, সম্পূর্ণ প্রোগ্রাম

=N.tE7=Z*6*.n0cEl.n'zMmhtS[0255ss*VG.>+Lc-1.tH1 3[.tH1Kc.tH0@3 2_K)d)3.wmmgk~-NZd'z

পাইথের অন্তর্নির্মিত রঙের স্থান রূপান্তর নেই - এটি আসল চুক্তি।

Stdin এ নিম্নলিখিত বিন্যাসে ইনপুট নেয়:

input_filename.png
offset
cycles

আউটপুট ইমেজ লিখিত হয় o.png


এটি রঙের ঘনক্ষনকে তার তিরুনিটির চারদিকে ঘোরানো এবং তারপরে ব্যাপ্তির বাইরে থাকা কোনও মানকে ক্ল্যাম্প করে কাজ করে।

যদি aঘোরার কোণটি r, g, bহয় এবং ইনপুট রঙ হয় তবে আমরা এর মাধ্যমে নতুন রঙটি গণনা করি r', g', b':

o = cos(a), i = sin(a) / sqrt(3)
n = (1 - o) / 3
m = [n + o, n - i, n + i]
clamp(c) = max(0, min(255, c))
r' = clamp(r*m[0] + g*m[1] + b*m[2])
g' = clamp(r*m[2] + g*m[0] + b*m[1])
b' = clamp(r*m[1] + g*m[2] + b*m[0])

6

পাইথন, 379 বাইট

from PIL.Image import*
from colorsys import*
def f(H,c,I):
 i=open(I);x,y=i.size;S=1.*c/(x*y);r,g,b=i.split();R=[];G=[];B=[]
 for x,y,z in zip(r.getdata(),g.getdata(),b.getdata()):
  e=255.;h,s,v=rgb_to_hsv(x/e,y/e,z/e);t=hsv_to_rgb(h+H,s,v);H=H+S%1.;x,y,z=[int(x*e)for x in t];R.append(x);G.append(y);B.append(z)
 p=Image.putdata;p(r,R);p(g,G);p(b,B);return merge('RGB',(r,g,b))

এটি .jpgইনপুট হিসাবে একটি পথ নেয় । এটি পিএনজি দিয়ে কাজ করবে না, যদিও আপনি কোনও পিএনজি চিত্র লোড করতে পরিবর্তন r,g,b=i.split();করতে r,g,b=i.split()[:3];পারেন।

এখানে কিছু চিত্র রয়েছে:

মূল:

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

অফসেট: 0, চক্র: 4

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

মূল:

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

অফসেট 0, 1 চক্র:

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

মূল:

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

অফসেট 0, 2.5

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


6

জাভা (সম্পূর্ণ প্রোগ্রাম), 491 488 বাইট (ধন্যবাদ @ জিওবিটস)

import java.awt.*;import java.io.*;import static javax.imageio.ImageIO.*;class Q{public static void main(String[]v)throws Exception{File f=new File(v[2]);java.awt.image.BufferedImage b=read(f);for(int i=0,j,h=b.getHeight(),w=b.getWidth();i<h;i++)for(j=0;j<w;){Color c=new Color(b.getRGB(j,i));float[]a=new float[3];c.RGBtoHSB(c.getRed(),c.getGreen(),c.getBlue(),a);b.setRGB(j++,i,c.HSBtoRGB((a[0]+Float.valueOf(v[1])/360+(i*w+j)*Float.valueOf(v[0])/w/h)%1,a[1],a[2]));}write(b,"png",f);}}

Ungolfed

import java.awt.*;
import java.io.*;

import static javax.imageio.ImageIO.*;

class A79200 {
    public static void main(String[] v) throws Exception {
        File file = new File(v[2]);
        java.awt.image.BufferedImage image = read(file);
        for (int i = 0, j, height = image.getHeight(), width = image.getWidth(); i < height; i++)
            for (j = 0; j < width; ) {
                Color color = new Color(image.getRGB(j, i));
                float[] arr = new float[3];
                color.RGBtoHSB(color.getRed(), color.getGreen(), color.getBlue(), arr);
                image.setRGB(j++, i, color.HSBtoRGB((arr[0] + Float.valueOf(v[1]) / 360 + (i * width + j) * Float.valueOf(v[0]) / width / height) % 1, arr[1], arr[2]));
            }
        write(image, "png", file);
    }
}

ব্যাখ্যা

  • ব্যবহার: খুব সোজা। সঙ্গে সংকলন java -c Q.java। সাথে চালাও java Q <cycles> <offset> <imagepath>। বিদ্যমান চিত্রটি ওভাররাইড করবে, তাই সাবধানতা অবলম্বন করুন।

  • আমি প্রথমে একটি পদ্ধতি সমাধান করতে যাচ্ছিলাম তবে সেগুলিতে কীভাবে আমদানি করা যায় তা আমি বেশিরভাগই জানতাম না, তাই আমি বুঝতে পেরেছিলাম যে আমি পুরো যাব , সম্ভবত এটি কোনওভাবেই জিততে পারে না: ^)

ফলাফল:

Image 1: 1 cycle, 0 offset

1

Image 1: 1 cycle, 180 offset

2

Image 2: 2 cycles, 60 offset

3

Image 3: 1 cycle, 120 offset

4

Image 4: 1 cycle, 0 offset

5

Image 4: 4 cycles, 0 offset

6

Image 4: 200 cycles, 0 offset

7

Bonus: The Starry Night, 1 cycle, 0 offset

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


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

এছাড়াও, এর java.io.Fileপরিবর্তে আমদানি করার কোনও কারণ আছে কি java.io.*?
Geobits

ধন্যবাদ, জানা ভাল। এবং দ্বিতীয়, না, কোন কারণ নেই। ভাল যুক্তি.
মার্ভ

import ** static** কেন , শুধু নয় import?
সলোমন উকো

1
যাতে আমি কল করতে সক্ষম হয়েছি ImageIO::readএবং ImageIO::writeপ্রিপেন্ড না করেই ImageIO.: এটিতে 9 বাইট ( static .*) যোগ হয় তবে 16 ( ImageIO.দুইবার) সঞ্চয় হয় ।
মারভ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.