วิธีการทำซ้ำการไล่ระดับสี'n'ครั้งเช่นการทำซ้ำการไล่ระดับสีดำเป็นสีขาว 5 ครั้ง (ตามเส้นทางของจังหวะ) เช่นฉันทำด้วยตนเองในภาพตัวอย่างด้านล่าง
มีวิธีการทำงานโดยอัตโนมัติไปยังคูณ'n'ครั้งเช่น 50 หรือ 100 ตนเองโดยไม่ต้องคัดลอกเลื่อนการไล่ระดับสี?
วิธีการทำซ้ำการไล่ระดับสี'n'ครั้งเช่นการทำซ้ำการไล่ระดับสีดำเป็นสีขาว 5 ครั้ง (ตามเส้นทางของจังหวะ) เช่นฉันทำด้วยตนเองในภาพตัวอย่างด้านล่าง
มีวิธีการทำงานโดยอัตโนมัติไปยังคูณ'n'ครั้งเช่น 50 หรือ 100 ตนเองโดยไม่ต้องคัดลอกเลื่อนการไล่ระดับสี?
คำตอบ:
ใช้สคริปต์!
ตามที่คนอื่น ๆ ตอบคุณควรใช้สคริปต์ แต่โซลูชันอื่น ๆ ที่นี่ใช้ RGB เท่านั้นในขณะที่ฉันใช้สีที่คุณเลือกจากเอกสารของคุณ วิธีแก้ปัญหาบางอย่างก็ไม่ได้สร้างสีที่จุดตัดหรือมีจำนวนมากเกินไปและ / หรือหยุดการไล่ระดับสีที่ทับซ้อนกันดังนั้นสคริปต์ของฉันจึงจัดการปัญหาเหล่านั้น
ในการใช้งานให้เลือกเส้นทางตั้งแต่ 2 เส้นขึ้นไปที่เต็มไปด้วยสีสำหรับการไล่ระดับสีจากนั้นเมื่อได้รับแจ้งให้ป้อนจำนวนครั้งเพื่อไล่ระดับสีซ้ำ
แก้ไข : ไซต์ pastie ไม่ทำงานดังนั้นฉันจึงรวมรหัสด้านล่าง:
// select two paths, then run this script
if (app.activeDocument.selection.length < 2) {
alert("Please select two or more paths with fills.");
} else {
var cycles = Number(prompt ("Repeat the gradient how many times?")) || 5;
var myselection = app.activeDocument.selection;
var colors = [];
for (var i = 0; i < myselection.length; i++) {
var newColor = myselection[i].fillColor;
colors.push(newColor);
}
var stops = colors.length * cycles - 1; // “stops” does not include default 2 stops
var interval = 100 / (cycles * colors.length); // ... the distance between stops
var newGradient = app.activeDocument.gradients.add();
newGradient.type = GradientType.LINEAR; // asymmetric, for 3 or more colours
//newGradient.type = GradientType.RADIAL; // symetric, for 3 or more colours
// the default 2 gradient stops (at beginning and end)
// should be the same colour, so that the gradient smoothly wraps around:
newGradient.gradientStops[0].color = colors[0];
newGradient.gradientStops[1].color = colors[0];
// now add stops between beginning and end stops:
for ( i = 1; i <= stops; i++ ) {
var thisStop = newGradient.gradientStops.add();
thisStop.rampPoint = i * interval;
thisStop.color = colors[i % colors.length];
}
// to get a even result, the first and last rampPoints cannot be 0 and 100:
newGradient.gradientStops[0].rampPoint = 0.1;
newGradient.gradientStops[stops + 1].rampPoint = 99.9;
}
ตัวอย่างที่ 1: ขาวดำทำซ้ำ 6 ครั้งเอกสาร CMYK:
ตัวอย่างที่ 2: การไล่ระดับสี 3 ครั้งทำซ้ำ 6 ครั้ง:
ตัวอย่างที่ 3: เอกสาร RGB, 6 สี, การทำซ้ำ 20 ครั้ง ขอให้สังเกตว่าเส้นทางที่เต็มไปมีการทับซ้อนกันอย่างไร? ลำดับการเรียงซ้อนนั้น (ด้านหน้าไปด้านหลัง) กำหนดลำดับของสีในการไล่ระดับสี
การเปลี่ยนสีในการไล่ระดับสี : เลือกเส้นทางที่ใช้การไล่ระดับสีจากนั้นเลือกเมนู fly-out Swatches Panel →เพิ่มสีที่เลือก swatches ทั่วโลกใหม่จะถูกเพิ่มเข้าไปในแผง swatches และเมื่อคุณแก้ไขมันจะถูกอัพเดททุกที่ที่มันปรากฏ
คุณสามารถทำสิ่งนี้ได้ด้วยสคริปต์ Illustrator ตรวจสอบเอกสารประกอบสำหรับ CC15.3 ในPDF อ้างอิง JavaScriptภายใต้การไล่ระดับสีในหน้า 68
สร้างสี:
// Create the colors
var startColor = new RGBColor();
startColor.red = 0;
startColor.green = 100;
startColor.blue = 255;
var middleColor = new RGBColor();
middleColor.red = 252;
middleColor.green = 238;
middleColor.blue = 33;
var endColor = new RGBColor();
endColor.red = 220;
endColor.green = 0;
endColor.blue = 100;
สร้างการไล่ระดับสี:
var newGradient = app.activeDocument.gradients.add();
newGradient.name = "new_gradient_75097";
สร้างการไล่ระดับสีเชิงเส้น:
newGradient.type = GradientType.LINEAR;
หรือสร้างการไล่ระดับสีแบบรัศมี:
newGradient.type = GradientType.RADIAL;
ที่ที่คุณต้องการสร้างการไล่ระดับสีหลายประเภทในGradientStops
:
// Modify the first gradient stop
newGradient.gradientStops[0].rampPoint = 0
newGradient.gradientStops[0].midPoint = 20;
newGradient.gradientStops[0].color = startColor;
// Modify the middle gradient stop
newGradient.gradientStops.add();
// Modify the last gradient stop
newGradient.gradientStops[1].rampPoint = 70;
newGradient.gradientStops[1].midPoint = 80;
newGradient.gradientStops[1].color = endColor;
คำขอโทษของฉันมีข้อสังเกตว่าฉันไม่ได้อธิบายอย่างเต็มที่ว่าคุณสามารถสร้างการไล่ระดับสีnครั้งได้อย่างไรดังนั้นฉันจึงปรับเปลี่ยนสคริปต์เพิ่มเติมเพื่อรวมการแจ้งเตือนและการวนซ้ำ
โทรจำนวนครั้ง:
var countgradient = Number(prompt ("Enter Gradient Count"));
สร้างการวนซ้ำและเพิ่มจำนวนการไล่ระดับสีเพิ่มเติม:
for ( i =0; i < countgradient; i++ ) {
var origCount = newGradient.gradientStops.length;
var lastStop = newGradient.gradientStops[origCount-1];
var firstStop = newGradient.gradientStops.add();
firstStop.rampPoint = lastStop.rampPoint;
lastStop.rampPoint = lastStop.rampPoint - 1;
firstStop.color = endColor;
var secondStop = newGradient.gradientStops.add();
secondStop.rampPoint = lastStop.rampPoint;
lastStop.rampPoint = lastStop.rampPoint - 2;
secondStop.color = startColor;
}
โค้ดด้านบนมีส่วนผสมของสิ่งที่อยู่ในหน้า 65-71 จากลิงค์ด้านบน:
ตัวอย่างที่มี 1 ครั้ง:
ตัวอย่างที่มี 5 ครั้ง:
คุณสามารถปรับเปลี่ยนlastStop.rampPoint - n
เพื่อปรับตำแหน่งได้ หวังว่านี่จะช่วยได้
วิธีนี้จะใช้งานได้หากคุณใช้การไล่ระดับสีเป็นสโตรก (เช่นในคำถามของคุณ) หากคุณต้องการไล่ระดับสีซ้ำ ๆ อย่างไม่สิ้นสุด (เมื่อเทียบกับจำนวนการทำซ้ำที่เฉพาะเจาะจง) คุณสามารถข้ามขั้นตอนที่ 2 และ 3 และใช้รูปแบบแปรงแทนแปรงศิลปะ ใน CC ตอนนี้คุณสามารถใช้รูปภาพในแปรงเพื่อให้คุณสามารถ rasterize ไล่ระดับสีแทนการขยาย แต่ฉันใช้ CS6 ดังนั้นฉันไม่สามารถทดสอบได้
ขยายเอฟเฟกต์การแปลง ( วัตถุ→ขยายลักษณะที่ปรากฏ )
คุณไม่สามารถใช้การไล่ระดับสีในแปรงดังนั้นคุณจะต้องขยายการไล่ระดับสี ( Object → Expand ) เลือกจำนวนของวัตถุเพื่อขยายของคุณเป็นภายใต้ "Expand Gradient To"
การขยายการไล่ระดับสีจะทำให้คุณมีรูปแบบการตัดบางส่วนในการไล่ระดับสีแบบขยายคุณจะต้องผ่านเลเยอร์และลบสิ่งเหล่านั้น (หรือคลิกขวาและ "ยกเลิกการจัดกลุ่ม" จากนั้น "ปล่อยรูปแบบการลอก" จนกว่าจะไม่มีมาสก์เพิ่มเติมอีก)
ลากการไล่ระดับสีแบบขยายของคุณไปที่แผงแปรงและเลือก "Art Brush" ตัวเลือกเริ่มต้นสำหรับแปรงของคุณน่าจะตกลงดังนั้นเพียงกด "ตกลง" คุณสามารถย้อนกลับและปรับตัวเลือกแปรงได้ในภายหลัง
ใช้แปรงใหม่ของคุณ
จากคู่มือการใช้งาน Illustrator JS ฉันมีรหัสด้านล่าง รหัสนี้ทำสิ่งที่คุณต้องการ:
รุ่นทั่วไปมากขึ้นสามารถพบได้ที่ด้านล่างบรรทัด
(1) อันดับแรกเราตั้งค่าจำนวนสีที่ต้องการและเวลาที่ต้องการในการไล่ระดับสีที่ต้องการ:
//Change these
var numberOfColors = 2; //Change this to the desired number of colors in the gradient
var iteration = 5; //Change this to the desired times you want to repeat the gradient
(2) จากนั้นเราตั้งค่าตัวแปรบางอย่างที่จะใช้ในภายหลัง การGradientInterval
คำนวณตำแหน่งร้อยละแต่ละจุดจะต้องมีการตั้งค่าที่ totalNumberofStops
ค่อนข้างอธิบายตนเอง colors
อาร์เรย์จะใช้ในภายหลัง
//Don't change these
var i,j;
var gradientInterval = 100 / numberOfColors / iteration;
var totalNumberOfStops = numberOfColors * iteration;
var colors = [];
(3) จากนั้นเราสามารถกำหนดสีของเรา คุณต้องมีหลายสีตามที่กำหนดไว้ในnumberOfColors
ตอนต้น สีที่หายไปจะใช้สีดำเป็นค่าเริ่มต้น
//Don't forget to push the colors to the colors array!
var color1 = new RGBColor();
color1.red = 0;
color1.green = 0;
color1.blue = 0;
colors.push(color1);
var color2 = new RGBColor();
color2.red = 255;
color2.green = 255;
color2.blue = 255;
colors.push(color2);
(4) เวลาในการสร้างการไล่ระดับสีของเราและตั้งชื่อ ตอนนี้เรายังสามารถตั้งค่าประเภท
//Let's initiate the gradient & name it
var newGradient = app.activeDocument.gradients.add();
newGradient.name = "new_gradient";
//Choose the gradient type here
//newGradient.type = GradientType.RADIAL; //Uncomment the one you need
newGradient.type = GradientType.LINEAR; //Uncomment the one you need
(5) ตอนนี้ส่วนที่ดี ก่อนอื่นเราจะวนซ้ำtotalNumberOfStops
เพื่อให้เราสามารถสร้างการหยุดแต่ละครั้งและเพิ่มลงในการไล่ระดับสี เราสร้างจุดหยุดใหม่และตั้งจุดหยุดให้ไกลกว่าจุดสุดท้าย ตอนนี้เราต้องได้สีที่เหมาะสมจากชุดสีของเรา เมื่อโมดูลัสของดัชนีลูปหารด้วยจำนวนสีคือ 0 เรารู้ว่าเรามีทุกสีและเราต้องเริ่มใหม่อีกครั้งดังนั้นเราจึงรีเซ็ตดัชนีสีของเรา
ตัวอย่างสมมติว่าฉันมีหกสีที่ฉันต้องการวน 5 ครั้ง เรามีจุดหยุดสามสิบจุด j
เราห่วงมากกว่าทุกสีโดยใช้ เมื่อj
กลายเป็น 6 จะไม่มีสีอีกต่อไป (หกคือสีที่เจ็ดในอาร์เรย์ แต่มีเพียงหกสีในอาร์เรย์) ดังนั้นผลคูณของหกเราจึงเริ่มอีกครั้งที่ 0 อีกครั้งเราแค่ไปยังสีถัดไป
ตอนนี้เราเพียงต้องการเพิ่มการหยุดสีขั้นสุดท้ายที่ 100%
//Now here is where the magic starts
for(i=0;i<totalNumberOfStops;i++){
var newStop = newGradient.gradientStops.add();
newStop.rampPoint = i * gradientInterval;
var modulus = i % numberOfColors;
if(modulus === 0){
j = 0;
}else{
j+=1;
}
newStop.color = colors[j];
}
var lastStop = newGradient.gradientStops.add();
lastStop.rampPoint = 100;
lastStop.color = colors[colors.length-1];
(6) ขั้นตอนสุดท้าย: ใช้การไล่ระดับสีกับจังหวะ เสร็จสิ้น พรรค!
//Apply gradient stroke to selected object
var colorOfGradient = new GradientColor();
colorOfGradient.gradient = newGradient;
var topPath = app.activeDocument.pathItems[0];
topPath.stroked = true;
topPath.strokeWidth = 140;
topPath.strokeColor =colorOfGradient;
(7) คุณอาจต้องตั้งสโตรกเป็น 'ใช้การไล่ระดับสีตามจังหวะ' ด้วยตนเองเนื่องจากฉันไม่พบรหัสที่จะทำ
รหัสนี้ทำขึ้นเป็นพิเศษสำหรับกรณีของคุณ รุ่นทั่วไปมากขึ้นสามารถพบได้ที่นี่: http://pastie.org/10921740
ตัวอย่างบางส่วน:
การไล่ระดับสีที่มีสองสีทำซ้ำสองครั้ง:
การไล่ระดับสีด้วยห้าสีทำซ้ำ 10 ครั้ง:
ฉันมีปัญหาเดียวกันมากและการตอบโดย MG_ นั้นเป็นสิ่งที่ฉันต้องการ!
อย่างไรก็ตามหลังจากผ่านไประยะหนึ่งฉันสังเกตเห็นว่าทุกครั้งที่ฉันต้องการการไล่ระดับสีที่ไม่ราบรื่นและการไล่ระดับสีที่ไม่ต่อเนื่อง มันค่อนข้างเจ็บปวดที่จะหาทางออกที่ดีดังนั้นฉันจึงแบ่งปันสคริปต์ที่แก้ไขแล้วที่นี่ให้ผู้อื่นที่มีปัญหาเดียวกัน ฉันยังรวม UI อย่างง่ายเพื่อตั้งค่าทุกอย่าง
var run = true;
if (app.activeDocument.selection.length < 2) {
alert("Please select two or more paths with fills.");
} else {
var dlg = new Window("dialog{text:'Create repeated gradient'}");
dlg.location = [500,50];
(dlg.alertBtnsPnl1 = dlg.add('panel', undefined, 'Color transition:')).helpTip = "Smooth or rough transition";
(dlg.alertBtnsPnl1.selectS = dlg.alertBtnsPnl1.add('radiobutton', [15,15,95,35], 'Smooth' )).helpTip = "Smooth color transition";
(dlg.alertBtnsPnl1.selectR = dlg.alertBtnsPnl1.add('radiobutton', [15,15,75,35], 'Rough' )).helpTip = "Sharp color transition";
dlg.alertBtnsPnl1.orientation='row';
dlg.alertBtnsPnl1.selectS.value = true;
(dlg.alertBtnsPnl3 = dlg.add('panel', undefined, 'Gradient type:')).helpTip = "Linear or radial gradient";
(dlg.alertBtnsPnl3.selectL = dlg.alertBtnsPnl3.add('radiobutton', [15,15,95,35], 'Linear' )).helpTip = "Linear gradient";
(dlg.alertBtnsPnl3.selectR = dlg.alertBtnsPnl3.add('radiobutton', [15,15,75,35], 'Radial' )).helpTip = "Radial gradient";
dlg.alertBtnsPnl3.orientation='row';
dlg.alertBtnsPnl3.selectL.value = true;
(dlg.alertBtnsPnl2 = dlg.add('panel', undefined, 'Gradient repeats:')).helpTip = "Gradient repeat count";
(dlg.alertBtnsPnl2.slide = dlg.alertBtnsPnl2.add('slider', [25,15,165,39], 'Set repeat count for gradient:')).helpTip = "Use Slider to set a repeat count";
dlg.alertBtnsPnl2.slide.value = 2;
(dlg.alertBtnsPnl2.titleEt = dlg.alertBtnsPnl2.add('edittext', [100,15,160,35], dlg.alertBtnsPnl2.slide.value)).helpTip = "Enter a repeat count value";
dlg.alertBtnsPnl2.titleEt.text = Math.ceil(dlg.alertBtnsPnl2.slide.value);
dlg.alertBtnsPnl2.orientation='row';
(dlg.alertBtnsPnl4 = dlg.add('panel', undefined, 'First and last colors:')).helpTip = "Define type of gradient loop";
(dlg.sameStartAndEnd = dlg.alertBtnsPnl4.add('checkbox', [25,25,235,39], 'Start and end with same color')).helpTip="Use this for seamless gradient";
dlg.sameStartAndEnd.value = true;
dlg.alertBtnsPnl4.orientation='column';
dlg.btnPnl = dlg.add('group', undefined, 'Do It!');
dlg.btnPnl.orientation='row';
dlg.btnPnl.buildBtn1= dlg.btnPnl.add('button',[15,15,115,35], 'Cancel', {name:'cancel'});
dlg.btnPnl.buildBtn2 = dlg.btnPnl.add('button', [125,15,225,35], 'OK', {name:'ok'});
dlg.alertBtnsPnl2.slide.onChange= sliderChanged;
dlg.alertBtnsPnl2.titleEt.onChanging = eTextChanged;
dlg.btnPnl.buildBtn1.onClick= actionCanceled;
dlg.show();
if(run){
var smooth = (dlg.alertBtnsPnl1.selectS.value) ? true : false;
var cycles = dlg.alertBtnsPnl2.slide.value;
var myselection = app.activeDocument.selection;
var colors = [];
for (var i = 0; i < myselection.length; i++) {
var newColor = myselection[i].fillColor;
colors.push(newColor);
}
var stops;
var interval;
if(dlg.sameStartAndEnd.value && !smooth){
stops = colors.length * cycles - 2;
interval = 100 / ((cycles * colors.length)+1);
}else{
if(smooth && !dlg.sameStartAndEnd.value){
stops = colors.length * cycles - 2;
interval = 100 / ((cycles * colors.length)-1);
}else{
stops = colors.length * cycles - 1;
interval = 100 / (cycles * colors.length);
}
}
var allStops = stops;
var newGradient = app.activeDocument.gradients.add();
newGradient.type = (dlg.alertBtnsPnl3.selectL.value) ? GradientType.LINEAR : GradientType.RADIAL;
newGradient.gradientStops[0].color = colors[0];
if(dlg.sameStartAndEnd.value) newGradient.gradientStops[1].color = colors[0];
else newGradient.gradientStops[1].color = colors[colors.length - 1];
if(!smooth){
var thisStop = newGradient.gradientStops.add();
thisStop.rampPoint = interval-0.1;
thisStop.color = colors[0];
allStops++;
}
for(i = 1; i <= stops; i++){
var thisStop = newGradient.gradientStops.add();
thisStop.rampPoint = i * interval;
thisStop.color = colors[i % colors.length];
if(!smooth && i<(stops+1)){
var thisStop = newGradient.gradientStops.add();
thisStop.rampPoint = (i+1) * interval - 0.001;
thisStop.color = colors[i % colors.length];
allStops++;
}
}
if(!smooth && dlg.sameStartAndEnd.value){
var thisStop = newGradient.gradientStops.add();
thisStop.rampPoint = 100 - (interval*2);
thisStop.color = colors[colors.length-1];
allStops++;
var thisStop = newGradient.gradientStops.add();
thisStop.rampPoint = 99.9 - interval;
thisStop.color = colors[colors.length-1];
allStops++;
var thisStop = newGradient.gradientStops.add();
thisStop.rampPoint = 100 - interval;
thisStop.color = colors[0];
allStops++;
}
newGradient.gradientStops[0].rampPoint = 0.1;
if(dlg.sameStartAndEnd.value)newGradient.gradientStops[allStops + 1].rampPoint = 99.9;
}
}
function actionCanceled() {
run = false;
dlg.hide();
}
function sliderChanged() {
dlg.alertBtnsPnl2.slide.value = Math.ceil(dlg.alertBtnsPnl2.slide.value);
dlg.alertBtnsPnl2.titleEt.text = Math.ceil(dlg.alertBtnsPnl2.slide.value);
}
function eTextChanged() {
dlg.alertBtnsPnl2.titleEt.text = Math.ceil(dlg.alertBtnsPnl2.titleEt.text);
dlg.alertBtnsPnl2.slide.value = Math.ceil(dlg.alertBtnsPnl2.titleEt.text);
}
ดังนั้นโดยพื้นฐานแล้วมันทำงานในลักษณะเดียวกับคำตอบที่ฉันเชื่อมโยง แต่มีตัวเลือกเพิ่มเติมสองสามอย่าง:
ฉันจะไม่ใช้การไล่ระดับสีตลอดทาง ขั้นแรกสร้างการไล่ระดับสีแบบเดียวกับที่คุณมีจากนั้นเติมผืนผ้าใบด้วยและกำหนดรูปแบบ (แก้ไข> กำหนดรูปแบบ) จากนั้นไปที่ Layer เลเยอร์การเติมใหม่และเลือกรูปแบบ คุณสามารถใช้เลเยอร์ที่มีอยู่เป็นรูปแบบการคลิป ตอนนี้ "n" คือ "สเกล" ดังนั้น 100% คือ 1, 50% คือ n = 2 และต่อไปเรื่อย ๆ ขนาดที่เล็กลงยิ่งทำซ้ำรูปแบบได้มากขึ้นและการไล่ระดับสีจะกลายเป็น
วิธีที่สองที่ฉันจะทำคือ "ขั้นตอนและทำซ้ำ" ฉันไม่รู้ว่าคุณต้องการใช้การไล่ระดับสีแบบ "คลื่น" แบบไหนและอย่างไร แต่ "S&R" มีประโยชน์มากสำหรับการคูณสิ่งต่าง ๆ ใน photoshop เพียงกดปุ่ม "ctrl (cmd) + alt + t" ทำสิ่งที่คุณทำ (สเกล, ย้าย, หมุนวัตถุ), กด Enter จากนั้นใช้ "shift + ctrl (cmd) + alt + t" และ photoshop จะทำซ้ำสิ่งที่คุณทำ หากคุณหมุนให้ย้ายและปรับขนาดวัตถุ PS จะทำเช่นนั้นหลายครั้งเมื่อคุณกดปุ่มลัดซ้ำ
ที่นี่ฉันเพิ่งเล่นกับซองจดหมายที่ใหญ่ที่สุดที่สองแล้วทำซ้ำขั้นตอน