การสร้างชุดสีระหว่างสองสี


15

เมื่อกำหนดสีเริ่มต้นและสีสุดท้ายเป็นไปได้หรือไม่ที่จะสร้างช่วงสีระหว่างอัลกอริทึม? ตัวอย่างเช่นเนื่องจากแสงและสีเข้มของสีน้ำเงิน / สีเทาที่จุดเริ่มต้นและจุดสิ้นสุดของภาพด้านล่างฉันจะสร้างเฉดสีกลางได้อย่างไร

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

ทางออกหนึ่งที่เป็นไปได้ที่ฉันกำลังพิจารณาคือการสร้างการไล่ระดับสีจากสองสีจากนั้นทำการสุ่มสีที่จุดที่เท่ากันตลอดการไล่ระดับสีนั้น นั่นน่าจะเป็นวิธีที่ดีที่สุด?


2
ลองดูที่นี่: graphicdesign.stackexchange.com/questions/75417/…อาจเป็น ducplicate หรือไม่?
ราฟาเอล

อีกบทความที่ดีในหัวข้อ: vis4.net/blog/posts/avoid-equidistant-hsv-colors
หนาม

นี่ใกล้เคียงกับการซ้ำซ้อนของคำถามซ้อนมากเกินไป
Dawood พูดว่าคืนสถานะโมนิก้า

คำตอบ:


13

นี้เรียกว่าการแก้ไขสี มันเป็นสิ่งที่ไล่ระดับสีทำภายใต้ประทุน คุณสามารถทำได้โดยใช้วิธีการและวิธีการที่หลากหลายและวิธีการแก้ไขผลลัพธ์นั้นขึ้นอยู่กับวิธีการนั้น ๆ

ฉันมักจะทำสิ่งนี้สำหรับโครงการเว็บโดยใช้ JavaScript เพื่อให้ฉันสามารถเปลี่ยนสีแบบไดนามิกเช่นในVisualizer เพลงนี้ การใช้งาน JavaScript ที่มีวิธีการแก้ไขเชิงเส้นตรงไปตรงมามากโดยใช้ RGB ซึ่งดึงมาจากตัวอย่างด้านบนมีดังนี้:

การสาธิตสด

// Returns a single rgb color interpolation between given rgb color
// based on the factor given; via https://codepen.io/njmcode/pen/axoyD?editors=0010
function interpolateColor(color1, color2, factor) {
    if (arguments.length < 3) { 
        factor = 0.5; 
    }
    var result = color1.slice();
    for (var i = 0; i < 3; i++) {
        result[i] = Math.round(result[i] + factor * (color2[i] - color1[i]));
    }
    return result;
};
// My function to interpolate between two colors completely, returning an array
function interpolateColors(color1, color2, steps) {
    var stepFactor = 1 / (steps - 1),
        interpolatedColorArray = [];

    color1 = color1.match(/\d+/g).map(Number);
    color2 = color2.match(/\d+/g).map(Number);

    for(var i = 0; i < steps; i++) {
        interpolatedColorArray.push(interpolateColor(color1, color2, stepFactor * i));
    }

    return interpolatedColorArray;
}

ซึ่งถูกใช้เช่นนั้นและส่งคืนอาร์เรย์ของสีที่ถูกแทรก:

var colorArray = interpolateColors("rgb(94, 79, 162)", "rgb(247, 148, 89)", 5);

นอกจากนี้คุณยังสามารถค้นหาส่วนขยาย PhotoShop (และโปรแกรมอื่น ๆ ที่น่าจะเป็น) สำหรับการแก้ไขสี อย่างไรก็ตามคุณอาจต้องการตรวจสอบเพื่อให้แน่ใจว่าวิธีการแก้ไขนั้นเป็นวิธีเดียวกับที่คุณต้องการเนื่องจากคุณสามารถใช้ฟังก์ชันใดก็ได้เพื่อแก้ไขตาม


2
Zach ... คุณเป็นคนที่คลั่งไคล้ ... Visualizer ของดนตรีนั้นยอดเยี่ยมมาก!
Rafael

@Rafael ฉันทำคู่อื่น ๆ ที่คุณอาจจะชอบ :)
34432 Zach Saucier

ขอบคุณ Color Interpolationเป็นสิ่งที่ฉันต้องการ ฉันพบการใช้งาน Swift ที่นี่ - stackoverflow.com/questions/22868182/uico ......
Ben Packard

2
ลิงค์ด้านบนนี้ใช้งานไม่ได้ แต่สามารถอ่านโพสต์ได้ที่นี่สำหรับผู้อ่านในอนาคต: การเปลี่ยน UIColor ตามมูลค่าความคืบหน้า
Zach Saucier

23

ดูคำตอบนี้ จะทำให้สีเข้มขึ้นหรือเข้มขึ้นได้อย่างไร

โดยที่คุณเพียงแค่นำค่าที่แยกออกจากกันของส่วนประกอบ RGB แต่ละตัวแล้วหารค่า

แต่เรามีปัญหาหนึ่งอย่างไม่มีวิธีการเปลี่ยนสีเพียงวิธีเดียว

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

aproach แรกจะให้เส้นทางที่สั้นที่สุด (1) แต่อาจเป็นไปได้ว่าเส้นทางนั้นไม่ใช่สิ่งที่คุณต้องการ

สิ่งนี้ยังถูกทำให้เกิดขึ้นโดยแบบจำลองสีหรือตรรกะ ตัวอย่างเช่นในโมเดลสี Lab * สีแดงและสีเขียวเป็นสีเสริมดังนั้นเส้นทางสั้น ๆ ในโมเดลนั้นจะผ่านสีเทากลาง (3)

หากคุณต้องการเฉดสีเพียงคำตอบอื่น ๆ ก็คือคำตอบที่เหมาะสม


5
ฉันชอบกราฟิกที่แสดงวิธีการแก้ไขที่แตกต่างกัน
Zach Saucier

ฉันเดาว่านี่หมายความว่าจะต้องมีวิธีในการกำหนดกลยุทธ์ของเส้นทาง
Bao Thien Ngo

10

ใช้การผสมผสานใน Illustrator ในทั้ง RGB หรือ CMYK:

  • สร้าง 2 รูปร่างแต่ละแบบด้วยสีเริ่มต้นและสีสุดท้าย (หนึ่งสีเทาและหนึ่งสีดำในตัวอย่างนี้ แต่เลือกสิ่งที่คุณต้องการ)
  • ไปที่Object → Blend → Blend Optionsและพิมพ์จำนวนที่Specified stepsคุณต้องการในระหว่าง (20 ในตัวอย่างของฉันด้านล่าง)
  • Object → Blend → Makeเลือกวัตถุทั้งสองของคุณและเลือก สิ่งนี้จะสร้างการผสมผสานที่คุณสามารถเปลี่ยนเป็นวัตถุแต่ละชิ้นObject → Expandได้ จากนั้นคุณสามารถเห็นวัตถุกลางแต่ละอันด้วยรหัสสีของมันเอง

การผสม


5

นี่คือส่วนเพิ่มเติมของคำตอบอื่น ๆ

เมื่อคุณสอดแทรกสีใน sRGB คุณต้องพิจารณาว่าค่า RGB ไม่เชิงเส้นในความเข้มแสง แต่เป็นเส้นตรงในมนุษย์ที่รับรู้ความเข้มของแสง สิ่งนี้ช่วยให้ประหยัดค่าได้ง่ายขึ้น แต่สำหรับการใช้งานสีต่าง ๆ จำเป็นต้องไปที่ขอบเขตสีเชิงเส้น

การรับรู้ของมนุษย์เกี่ยวกับความเข้มของแสงเป็นไปตามกฎหมายพลังงานดังนั้นด้วย

linear = sRGB^2.2
sRGB = linear^(1/2.2)

สามารถใช้ในการแปลงระหว่างสอง สิ่งนี้ใช้ค่าแกมมา 2.2 ซึ่งเป็นค่าสำหรับ sRGB สำหรับข้อมูลเพิ่มเติมเกี่ยวกับเรื่องนี้เห็นนี้บทความวิกิพีเดีย

การวิเคราะห์รายละเอียดของปัญหานี้และตัวอย่างของการใช้งานที่ไม่ถูกต้องสามารถพบได้ที่นี่ หนึ่งในนั้นคือการไล่ระดับสีโดยใช้การประมาณค่าเชิงเส้นและ sRGB


นั่นเป็นวิธีการหนึ่งของ interpolating ค่า sRGB แต่สิ่งที่คนควรทำขึ้นอยู่กับผลกระทบที่พวกเขาต้องการ
ซัคซอส

ถูกต้อง แต่การแก้ไขในพื้นที่เชิงเส้นคือสิ่งที่เกิดขึ้นกับแสงในชีวิตจริง ดังนั้นจึงเป็นเรื่องธรรมชาติที่สุดที่จะทำเช่นนั้น
henje

1
@ZachSaucier จำนวนครั้งที่ผู้คนทำการแก้ไขหรือผสมใน sRGB จากความตั้งใจที่เฉพาะเจาะจงคือโอ้ดังนั้นเล็กเมื่อเทียบกับจำนวนครั้งที่ผู้คนทำมันด้วยความไม่รู้หรือความเกียจคร้าน (คิดว่าพวกเขากำลังทำมันใน RGB หรือ คิด (อย่างถูกต้องหรือไม่) ว่าความแตกต่างนั้นไม่สำคัญเลย
ฮอบส์

1

การไล่ระดับสีของ Photoshop (หรือเทียบเท่า "Blend" ใน Ai) ได้ถูกนำเสนอเป็นวิธีการเปลี่ยนสีเชิงเส้นระหว่างสีเริ่มต้นและสีสิ้นสุด เราจะได้รับบางอย่างที่ไม่เป็นเชิงเส้น (เส้นทางการเปลี่ยนทางโค้ง) โดยไม่ต้องเขียนโค้ดสคริปต์บางส่วนได้อย่างไร

ทางออกหนึ่งคือการปรับเปลี่ยนเส้นทางการไล่ระดับสีโดยการปรับเลเยอร์หรือโหมดการผสมหรือทั้งสองอย่าง สิ่งนี้ทำให้เกิดการแปลงอย่างต่อเนื่องจากสีเริ่มต้นไปจนถึงสีสุดท้ายหากเลเยอร์การปรับเปลี่ยนมีเลเยอร์มาสก์ที่ต่อเนื่องและทำให้ความรัก = ศูนย์ในตอนเริ่มต้นและในตอนท้าย

นี่คือการหมุนที่ค่อนข้างซับซ้อน Layer "Target alone" มีการไล่ระดับสีและเลเยอร์ "Modifier" สร้างการเปลี่ยนสีอย่างต่อเนื่องโดยการผสมโหมด "Color" เพื่อทำให้บิดทั้งหมด

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

มีโหมดการผสมและโค้งที่ไม่ต่อเนื่องบางอย่างที่ทำให้เกิดการกระโดดทันที หนึ่งในนั้นคือ "เว้" ความเป็นไปได้อีกประการที่จะทำให้เอฟเฟ็กต์เสียหายคือ "ไม่มีการเปลี่ยนแปลง" พื้นที่สีคงที่มองเห็นได้เกิดจากการตัดไปที่ศูนย์ทั้งหมดหรือ 255 ทั้งหมดฉันไม่ได้ทดสอบหรือคำนวณว่าในทางปฏิบัติ อาจจะไม่ทั้งหมดเพราะเรายังมีเพียง 24 บิต / พิกเซลบนหน้าจอ

การเปลี่ยนแปลง

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