কোনও প্রদত্ত রঙকে কীভাবে আরও গাer় বা হালকা করা যায়?


9

আমার এই ছবিটি রয়েছে:

রং

তীর দুটি পৃথক রঙ দেখায় তবে বাস্তবে সেগুলির রঙ একই হওয়া উচিত তবে কিছুটা হালকা বা গাer়।

আমি তৈরি করা অ্যাপ্লিকেশনটির এই স্ক্রিন-শট তৈরি করেছি এবং প্রান্তগুলিতে বাদামী বর্ণটি কেবল 30 টি দিয়ে যুক্ত করা হয়েছে। আপনি দেখতে পাচ্ছেন এটি কৌতুকটি করে না, অর্থাত্ প্রকৃত রঙে 30 যুক্ত করা কাজ করবে না রং।

আসল রঙ

আমি কীভাবে কোনও প্রদত্ত রঙের ছায়া দিতে পারি ਭਾਵ এটি আরও উজ্জ্বল বা গা make় করতে পারি?

এছাড়াও আমি যদি আলফার সাথে সেমিট্রান্সপারেন্ট দেখতে চাই তবে আমার কী করা উচিত?


আমি এই প্রশ্নটিকে অফ-টপিক হিসাবে বন্ধ করতে ভোট দিচ্ছি কারণ এটি স্ট্যাকওভারফ্লোতে জিজ্ঞাসা করা উচিত।
joojaa

3
প্রযুক্তিগতভাবে এটি এখনও গ্রাফিক্স ডিজাইনের প্রশ্ন যেহেতু আমরা রঙ এবং শেডিংয়ের রঙগুলির পিছনে গণিত নিয়ে আলোচনা করি, বিভিন্ন বর্ণের রঙ তৈরি করে।
ভ্লাদ

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

1
প্রশ্নটি ঠিক বলেছে না, রঙ আরও গাer় বা উজ্জ্বল করতে আমার কী করা উচিত। হেক্সাডেসিমাল মান রূপান্তর দরকারী সংযোজন তবে প্রয়োজনীয়তা নয়।
ভ্লাদ

1
আমি তর্ক করতে যাচ্ছি না। আমি রঙগুলি বুঝতে পারি না এবং তারা কীভাবে কাজ করে, আমি "কীভাবে" ব্যবহার করতে চাইছিলাম, কোনও কোডের টুকরো নয় যা আমার জন্য কেউ কোড করবে।
ভ্লাদ

উত্তর:


13

দুর্দান্ত প্রশ্ন।

হেক্সাডেসিমাল মানগুলির সাথে কাজ করতে আপনাকে আরজিবি মানগুলির তুলনামূলক অনুপাতে বিবেচনা করতে হবে।

আমি অক্ষরের সাথে নয়, সংখ্যাগুলিতে স্কেল ব্যবহার করব, সুতরাং আমরা এর পিছনে গণিতটি দেখতে পাব।

ভাবুন আপনার কমলা আছে।

আপনার মান R255 G128 B0 থাকতে পারে

আপনি যদি গাer় রঙ চান তবে আপনার মানগুলি হ্রাস করতে হবে 50% হিসাবে

এটি আপনাকে আর 128 জি 64 বি0 নোটিশ দিবে যে সমস্ত রঙ আনুপাতিক স্কেল ব্যবহার করে পরিবর্তিত হয়েছিল।

আরও জটিল রঙ আর 255 জি 200 বি 100 হতে পারে আসুন আমরা এটি অন্ধকার করি তবে আগের মামলার মতো না not আসুন আমরা এটি এক 80% অন্ধকার করি।

R255x0.8 G200x0.8 B100x0.8 = R204 G160 B80

একটি রঙ হালকা করার জন্য ধারণাটি প্রায় একই রকম, তবে এটি আরও জটিল কারণ রঙগুলি 255 এ টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টান হবে, তাই আপনি 255 এর মধ্যে মূল্যবোধের সাথে দ্বিগুণ হয়ে উঠতে পারেন।

উদাহরণস্বরূপ একই কমলা

আর 255 জি 128 বি 0

আপনি আর আর বাড়িয়ে তুলতে পারবেন না এবং আপনি একই মান সহ সবুজ এবং নীল বৃদ্ধি করতে পারবেন না, উদাহরণস্বরূপ আরও 100 টি, কারণ আপনার কাছে থাকবে

আর 255 জি 228 বি 100

যা খুব হলুদ।

গণিত হবে

1) বর্তমান মান (R255 G128 B0) এর 255 থেকে পার্থক্যটি: R0 G127 B255

2) আসুন 50% দ্বারা একটি হালকা কমলা তৈরি করা যাক

3) আরএক্স 50% জিএক্স 50% বিএক্স 50% = আর0 জি 64 বি 128

4) এটিকে আপনার প্রাথমিক মানটিতে যুক্ত করুন: R255 + 0 G128 + 64 বি 0 + 128 = আর 255 জি 192 বি 128।

আমি আপনাকে প্রাথমিক ধারণা দেওয়ার জন্য একটি চিত্র যুক্ত করছি। আরজিবি মানগুলি আমার পাঠ্যের সমান নয়, কেবল একটি অলস কাজের কারণে, তবে আপনি দেখতে পারেন কমলা "সিঁড়ি" তার স্বতন্ত্র অনুপাত বজায় রাখে।

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

সম্পাদিত

আমি খুব বোবা। আপনি এইচএসএল রঙের স্বরলিপিটিও ব্যবহার করতে পারেন:

{ব্যাকগ্রাউন্ডের রঙ: এইচএসএল (45, 60%, 70%); dark এবং গা colors় রঙের জন্য তৃতীয় রঙ এবং হালকা রঙের জন্য দ্বিতীয় এবং তৃতীয়টি পরিবর্তন করুন।

আপনি আলফা অন্তর্ভুক্ত করতে একটি hsla বৈকল্পিকও ব্যবহার করতে পারেন।


অফকোর্স যদি এটি ব্রাউজার হয় তবে এটি আপনার পক্ষে গণনা করতে সম্পূর্ণ সক্ষম
joojaa

হ্যাঁ একটি জেএস / ব্রাউজার অ্যাপ্লিকেশন। তবে জেএস # 345464 ফর্ম্যাট রঙটি স্বীকৃতি দেয় না। আমি পার্সেন্ট (হ্যাশস্ট্রিং.রেপ্লেস ('#', ''), 16) ব্যবহার করি; যেখানে হ্যাশস্ট্রিং হল # 345464 এর মতো সিএসএস ফর্ম্যাট রঙ।
ভ্লাদ

আপনি আপনার নম্বরটি দয়া করে অনুবাদ করুন। আমি বলেছিলাম যে সংখ্যাগুলি ব্যবহার করা হচ্ছে যাতে আপনি এর পিছনে গণিতটি দেখতে পারেন। তবে নীতিটি একই। 8 টি এফের অর্ধেক
রাফায়েল

এবং আপনি সর্বদা rgba (255,128,0,1) স্বরলিপি ব্যবহার করতে পারেন।
রাফায়েল

আসলে আমি ক্যানভাস উপাদান ব্যবহার করি এবং এটি খাঁটি জেএস, কোনও সিএসএস অন্তর্ভুক্ত নয়। তবে কোড সহ এটি কীভাবে সমাধান করা যায় সে সম্পর্কে আমি একটি ধারণা পেয়েছি।
ভ্লাদ

2

আপনি কিছুটা ভুল বুঝেছেন, জাভাস্ক্রিপ্ট হেক্সাডেসিমাল হিসাবে রঙকে মডেল করে না, সিস্টেমও দেয় না। হেক্সাডেসিমাল স্বরলিপিটি কেবল মানব পাঠযোগ্য দলিলের জন্য। অভ্যন্তরীণভাবে আপনার সিস্টেমটি তিনটি পূর্ণসংখ্যার মান সংরক্ষণ করে। আপনি সরাসরি জিজ্ঞাসা করতে পারেন এবং এগুলি পরিচালনা করতে পারেন।

তবে কেবল এটুকু বলতে দিন যে আপনি সিস্টেমের অভ্যন্তরগুলির পরিবর্তে প্রকৃত নথিটি পরিচালনা করতে চান ulate তারপরে এমন কিছু লাইব্রেরিতে আপনার গণনা স্থগিত করা সেরা যা আপনার জন্য এটি করে। আপনি দেখতে পাচ্ছেন যে ব্রাউজারটি বিভিন্ন উপায়ে রঙের প্রতিনিধিত্ব করতে পারে তাই আপনাকে বিজ্ঞাপনের সব ধরণের ক্ষেত্রে যেমন আরজিবি এবং এইচএসভি ইনপুটগুলি প্রোগ্রাম করতে হবে। সুতরাং আমি আপনাকে পরামর্শ দিচ্ছি যে আপনি কালার.জেসের মতো কিছু ব্যবহার করুন এটি আপনাকে অনেক মাথা ব্যথা বাঁচায়, কারণ আপনার নিজেরাই মিশ্রণ, গাening় হওয়া, হালকা করা ইত্যাদি প্রয়োগ করার প্রয়োজন নেই।

Edity:

আপনি যদি এটি নিজে করতে চান তবে আমি যা প্রস্তাব দিই না। সংখ্যার ত্রিভুজের পূর্ণসংখ্যার সংখ্যা বা ভাসমান পয়েন্ট সংখ্যা 0-1-এর পরিসরে রূপান্তর করে শুরু করুন এটি গণনা আরও সহজ করে তোলে।

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

ফলাফল = তীব্রতা * রঙ

রাফায়েল যেমন ব্যাখ্যা করেছেন, রঙ চ্যানেল দ্বারা পুনরাবৃত্তি সূত্র। আপনি রঙিন আলো অনুকরণ করতে পারেন

ফলাফল = তীব্রতা * লিগল্ট কালার * রঙ

এটি সেরাকে প্রথমে ভাসতে রূপান্তর করতে, সম্ভবত লিনিয়ারও। এটি আপনার অঞ্চলে উষ্ণ বা শীতল আলো দেয় যা আরও প্রাকৃতিক অনুভূতি আনতে পারে।

আলফা মিশ্রণ (অন্যের উপরে রঙের স্তরমেগ) সহজেই

ফলাফল = রঙিন টপ * আলফা + রঙবটম * (1-আলফা)

চূড়ান্ত সম্পাদনা

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

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

চিত্র 1 : নীচের কোডের ফলাফল এছাড়াও লাইভ সংস্করণ দেখুন

{
  var canvas = document.getElementById('canvas');
  if (canvas.getContext) {
    var ctx = canvas.getContext('2d');

    var Color = function(r, g, b) {
      this.r = r;
      this.g = g;
      this.b = b;
    }
    Color.prototype.asHex = function() {
      return "#" + ((1 << 24) + (this.r << 16) + (this.g << 8) + this.b).toString(16).slice(1);
    }
    Color.prototype.asRGB = function() {
      return 'rgb(' + this.r + ',' + this.g + ',' + this.b + ')';
    }
    Color.prototype.blendWith = function(col, a) {
      r = Math.round(col.r * (1 - a) + this.r * a);
      g = Math.round(col.g * (1 - a) + this.g * a);
      b = Math.round(col.b * (1 - a) + this.b * a);
      return new Color(r, g, b);
    }
    Color.prototype.Mul = function(col, a) {
      r = Math.round(col.r/255 * this.r * a);
      g = Math.round(col.g/255 * this.g * a);
      b = Math.round(col.b/255 * this.b * a);
      return new Color(r, g, b);
    }
    Color.prototype.fromHex = function(hex) {
      // http://stackoverflow.com/questions/5623838/rgb-to-hex-and-hex-to-rgb
      hex = hex.substring(1,7)
      var bigint = parseInt(hex, 16);
      this.r = (bigint >> 16) & 255;
      this.g = (bigint >> 8) & 255;
      this.b = bigint & 255;
    }

    ctx.font = "16px Arial";
    ctx.fillText("Manual Alpha Blend", 18, 20);

    var a = new Color(220, 0, 150);

    var b = new Color();
    b.fromHex('#00C864');

    //Alpha blend
    ctx.fillStyle = a.asHex();
    ctx.fillRect(25, 25, 100, 100);
    ctx.fillStyle = '#FFFFFF';
    ctx.fillText(a.asHex(), 30, 45);
    ctx.fillStyle = b.asRGB()
    ctx.fillRect(50, 50, 100, 100);
    ctx.fillStyle = '#FFFFFF';
    ctx.fillText(a.asHex(), 55, 145);
    var bl = a.blendWith(b, 0.3);
    ctx.fillStyle = bl.asRGB();
    ctx.fillRect(50, 50, 75, 75);
    ctx.fillStyle = '#FFFFFF';
    ctx.fillText(bl.asHex(), 55, 70);

    // lighten 1

    ctx.fillStyle = '#000000';
    ctx.fillText('Neutral Light', 200, 20);

    var c = new Color(100, 100, 100);
    var purelight= new Color(255, 255, 255);

    ctx.fillStyle = c.asRGB();
    ctx.fillRect(200, 25, 100, 100);

    var bl = c.Mul(purelight,1.2);
    ctx.fillStyle = bl.asRGB();
    ctx.fillRect(225, 50, 100, 100);

    var bl = c.Mul(purelight, 0.8);
    ctx.fillStyle = bl.asRGB();
    ctx.fillRect(250, 75, 100, 100);

     // lighten 2

    ctx.fillStyle = '#000000';
    ctx.fillText('Yellowish Light', 400, 20);

    var c = new Color(100, 100, 100);
    var yellowlight= new Color(255, 255, 220);

    var bl = c.Mul(yellowlight,1.0);
    ctx.fillStyle = bl.asRGB();
    ctx.fillRect(400, 25, 100, 100);

    var bl = c.Mul(yellowlight,1.2);
    ctx.fillStyle = bl.asRGB();
    ctx.fillRect(425, 50, 100, 100);

    var bl = c.Mul(yellowlight, 0.8);
    ctx.fillStyle = bl.asRGB();
    ctx.fillRect(450, 75, 100, 100);
  }
}

পিএস আপনার স্ট্যাকওভারফ্লো সম্পর্কে জিজ্ঞাসা করা উচিত কারণ এগুলির বেশিরভাগই স্ট্যাকওভারফোতে পাওয়া যেতে পারে ready


এই গ্রন্থাগারটি কি একক হতে পারে?
ভ্লাদ

@ ভাল যে আমি কোন কারণ দেখছি না নিশ্চিত করুন sure
joojaa

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

@ ভ্ল্যাড আপনার জন্য মাথার ত্বকে কিছু কোড যুক্ত করেছে
09-

: ডি বাহ, দুর্দান্ত কাজ!
ভ্লাদ

1

ম্যানুয়ালি যদি আপনি হাত দিয়ে কোনও রঙের অন্ধকার / উজ্জ্বলতা পরিবর্তন করতে চান এবং তা না তাকিয়েও। হেক্স বা আরজিবিতে সত্যই সহজ প্রতিটি চ্যানেলে সমান পরিমাণ আলো যোগ বা বিয়োগ করতে পারেন।
আরজিবিতে বলুন আপনার 132,145,167 জন একই বর্ণের হালকা সংস্করণ পেতে প্রতিটি সংখ্যায় 30 টি যোগ করতে পারে তাই 162,175,207, এবং আপনি যদি বুঝতে পারেন যে এটি কিছুটা হলেও সম্পন্ন করেছে তবে প্রতিটি 1601,173,205 থেকে 2 বিয়োগ করুন। হেক্সের সাথে একই তবে হেক্স সংখ্যায়। সুতরাং e4c3d5 হল ই 4 সি 3 ডি 5 এটি হালকা এফ 4 ডি 3 ই 5 তৈরি করতে আপনি 16 টি যুক্ত করতে পারেন বা একই রঙের ডি 4 বি 3 সি 5 এর গাer় সংস্করণ তৈরি করতে 16 টি বিয়োগ করতে পারেন।
আপনি যতটা চান যোগ করতে বা বিয়োগ করতে পারেন এবং অতিরিক্ত সময় যোগ ও বিয়োগ করার জন্য সঠিক পরিমাণটি অনুমান করার ক্ষেত্রে আপনি আরও ভাল হয়ে উঠবেন, যতক্ষণ না আপনি তিনটি চ্যানেলে একই পরিমাণ পরিমাণ যুক্ত করবেন (তিনটি সংখ্যা) আপনি কেবল পরিবর্তনটি করতে পারবেন আপনি মিশ্রণ থেকে অনেক বেশি সাদা বা যুক্ত করেন।


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