クリエイター手抜きプロジェクト[594]Photoshop CS6〜CC 2019編 カケアミを生成する(2)
── 古籏一浩 ──

投稿:  著者:



前回に引き続いて、カケアミを描くスクリプトです。前回はIllustratorでしたが、今回はPhotoshopです。

Photoshop版はアプリケーション自体の機能/制約により、Illustrator版よりも制限があります。Illustrator版とは異なり、描画されるカケアミは後からカケアミ1ブロック単位での編集ができません。

これは、Photoshopでは大量のパスを生成するのが難しいためです。多分、生成量によっては、何らかの制限に引っかかってしまうと思われます。

このため、ピクセルとしてカケアミを生成しています。ピクセルとして生成しているため、実はちょっとカケアミを回転させた時の精度がよくありません。

基本としてはA4サイズの300〜350dpi上に生成することになっていますが、精度を求めるなら絶対にIllustrator版の方がいいので、そちらを使って下さい。

さらに、Photoshop版では描画範囲を超えたカケアミを生成するとエラーで停止して、それまでに生成されたカケアミが消去されてしまいます。エラー回避コードは入れてありますが、完全に避けられる保証はありません。

これらの注意事項をふまえた上で使用してもらえばと思います。





まず、1カケのカケアミを描くスクリプトは、以下のようになります。新規ドキュメントを作成しRGBモードにしてから実行してください。

// カケアミ生成スクリプト(1カケ)A4/300dpi
(function(){
var width=2000; // カケアミを描く横幅
var height=1000; // カケアミを描く縦幅
var scale=4; // カケアミサイズの倍率
var rndX=8*scale; // 横のずれ具合
var rndY=10*scale; // 縦のずれ具合
var stepX=15*scale; // カケアミ1ブロックの横の移動量
var stepY=15*scale; // カケアミ1ブロックの縦の移動量
var degree=135; // 最大の回転角度
var strokeWidth=0.5; // 線幅
var saveUnit = preferences.rulerUnits;
preferences.rulerUnits = Units.PIXELS; // 単位をピクセルに変更

// ブロック単位で指定した範囲にカケアミを描画
for(var y=0; y<height; y+=stepY){
for(var x=0; x<width; x+=stepX){
var dx=Math.random()*rndX-rndX/2;
var dy=Math.random()*rndY-rndY/2;
ami(x+dx,y+dy+stepY);
}
}
preferences.rulerUnits = saveUnit; // 元の単位に戻す
function ami(x,y){
var black = new SolidColor();
black.rgb.red=0;
black.rgb.green=0;
black.rgb.blue=0;
var white = new SolidColor();
white.rgb.red=255;
white.rgb.green=255;
white.rgb.blue=255;
var regionBG = [[x, y],[x+16*scale, y],[x+16*scale,y+20*scale],[x,y+20*scale]];
app.activeDocument.selection.select(regionBG, SelectionType.REPLACE,0, true);
app.activeDocument.selection.fill(white);
app.activeDocument.selection.deselect();
for(var i=0; i<5; i++){
var region = [[x+i*4*scale, y],[x+i*4*scale+1, y],[x+i*4*scale+1,y+20*scale],[x+i*4*4,y+20*scale]];
app.activeDocument.selection.select(region, SelectionType.EXTEND,0, true);
}
try{
app.activeDocument.selection.stroke(black, 1, StrokeLocation.CENTER);
}catch(e){}
app.activeDocument.selection.deselect();
var regionBG = [[x, y],[x+17*scale, y],[x+17*scale,y+20*scale],[x,y+20*scale]];
app.activeDocument.selection.select(regionBG, SelectionType.REPLACE,0, true);
try{
app.activeDocument.selection.rotate(Math.random()*degree);
}catch(e){}
app.activeDocument.selection.deselect();
}
})();

2カケ(カケアミ)の場合は以下のようになります。
これもタイル状に敷き詰めるだけです。

// カケアミ生成スクリプト(2カケ)A4/300dpi
(function(){
var width=2000; // カケアミを描く横幅
var height=2000; // カケアミを描く縦幅
var scale=4; // カケアミサイズの倍率
var rndX=8*scale; // 横のずれ具合
var rndY=10*scale; // 縦のずれ具合
var stepX=15*scale; // カケアミ1ブロックの横の移動量
var stepY=15*scale; // カケアミ1ブロックの縦の移動量
var degree=135; // 最大の回転角度
var strokeWidth=0.5; // 線幅
var saveUnit = preferences.rulerUnits;
preferences.rulerUnits = Units.PIXELS; // 単位をピクセルに変更

// ブロック単位で指定した範囲にカケアミを描画
for(var y=0; y<height; y+=stepY){
for(var x=0; x<width; x+=stepX){
var dx=Math.random()*rndX-rndX/2;
var dy=Math.random()*rndY-rndY/2;
ami(x+dx,y+dy+stepY);
}
}
preferences.rulerUnits = saveUnit; // 元の単位に戻す
function ami(x,y){
var black = new SolidColor();
black.rgb.red=0;
black.rgb.green=0;
black.rgb.blue=0;
var white = new SolidColor();
white.rgb.red=255;
white.rgb.green=255;
white.rgb.blue=255;
var regionBG = [[x, y],[x+20*scale, y],[x+20*scale,y+20*scale],[x,y+20*scale]];
app.activeDocument.selection.select(regionBG, SelectionType.REPLACE,0, true);
app.activeDocument.selection.fill(white);
app.activeDocument.selection.deselect();
for(var i=0; i<5; i++){
var region = [[x+i*4*scale+2*scale, y],[x+i*4*scale+1+2*scale, y],
[x+i*4*scale+1+2*scale,y+20*scale],[x+i*4*4+2*scale,y+20*scale]];
app.activeDocument.selection.select(region, SelectionType.EXTEND,0, true);
}
for(var i=0; i<5; i++){
var region = [[x, y+i*4*scale+2*scale],[x+20*scale,y+i*4*scale+2*scale],
[x+20*scale,y+i*4*scale+1+2*scale],[x,y+i*4*scale+1+2*scale]];
app.activeDocument.selection.select(region, SelectionType.EXTEND,0, true);
}
try{
app.activeDocument.selection.stroke(black, 1, StrokeLocation.CENTER);
}catch(e){}
app.activeDocument.selection.deselect();
var regionBG = [[x, y],[x+20*scale, y],[x+20*scale,y+20*scale],[x,y+20*scale]];
app.activeDocument.selection.select(regionBG, SelectionType.REPLACE,0, true);
try{
app.activeDocument.selection.rotate(Math.random()*degree);
}catch(e){}
app.activeDocument.selection.deselect();
}
})();

1カケ、2カケとも、スクリプトの先頭にある以下の数値を変更することで、さまざまなカケアミを描くことができます。

var width=2000; // カケアミを描く横幅
var height=2000; // カケアミを描く縦幅
var scale=4; // カケアミサイズの倍率
var rndX=8*scale; // 横のずれ具合
var rndY=10*scale; // 縦のずれ具合
var stepX=15*scale; // カケアミ1ブロックの横の移動量
var stepY=15*scale; // カケアミ1ブロックの縦の移動量
var degree=135; // 最大の回転角度
var strokeWidth=0.5; // 線幅

Illustrator版と違い、scale=4という設定値があります。この値を変更すると、カケアミのブロックサイズのスケールが変わります。これは解像度に応じて調整してください。72dpi、96dpiなら1に、150dpiなら2になります。


【古籏一浩】openspc@alpha.ocn.ne.jp
http://www.openspc2.org/


3カケ、4カケも生成すると応用範囲が広くなりそうです。他にはナワアミというのもあるようで、もしこれを自動生成するならば、Illustratorでパスを描いて、そのパスに沿って生成していくという感じになりそうです。

他にもグラデーションの輝度に応じて、カケアミ生成するという方法もあります。時間があったらお正月にでも挑戦してみたいところですが、めまぐるしく変わるIoT関係に振り回されて、なかなか進まないというオチ……。

台風19号は相当の被害をもらたしました。水害に見舞われた方は大変でしょうが、頑張ってくださいとしか言いようがありません。長野県は千曲川が氾濫して結構な範囲がやられましたが、過去にも何度も氾濫しているので珍しいことではありません。

ただ、水害は後始末が大変です。素早く泥を掻き出して、消毒しないといけません。私の家も過去に二回ほど、床下浸水したことがあります。

幸い床上浸水ではなかったのですが、水がどんどんと溜まっていくと、これはちょっとヤバイんじゃないかって感覚はありました(小学生の頃。庭が池のようになって草履がプカプカ浮いて流れていくという具合)。家の前の小さい川が大雨でゴミが詰まったりするだけでも、結構な浸水になってしまいました。

今は水が溜まらないようにしてあるので、浸水することはありません。全部が水路と他の人の田んぼに流れ込むようになっています。水路は80mm以上の雨で溢れます。ちなみに100mmの雨は以下のような感じです。



そういえば、長野市方面に住んでる人が、YouTuber撮影しに来るなって言ってました。渋滞が渋滞を呼んで、大迷惑になってしまうようです。

あと、こういう大雨の時に、田んぼの水を見に行って亡くなってしまう人がいます。この場合、堰の管理の担当になっていると、水門を操作しにいく必要があるからです。水利委員や消防団員や区の役員などです。

これとは別に、自分の田んぼに水が引き込まれないように監視するところもあるようです。ニュースなどで田んぼの水を見に行って死亡した場合、たいがい一人です。担当だからでしょう。もし、田んぼの水を見に行くなら、その周辺の人の多くが田んぼの水を見に行っているはずです(家の目の前に田んぼがある場合は楽ですが)。

21世紀においては、災害は忘れた頃にやってくるのではなく「災害は毎年何度もやってくる」という認識の方がよいのではないかと思います。

・InDesign自動化サンプルプログラム逆引きリファレンス上/下
https://www.amazon.co.jp/dp/4844396846/

https://www.amazon.co.jp/dp/4844396854/


・創って学ぼうプログラミング
https://news.mynavi.jp/series/makeprogram


・みんなのIchigoLatte入門 JavaScriptで楽しむゲーム作りと電子工作
https://www.amazon.co.jp/dp/4865940936

[正誤表]
http://www.openspc2.org/book/error/ichigoLatte/


・After Effects自動化サンプルプログラム 上巻、下巻
https://www.amazon.co.jp/dp/4844397591

https://www.amazon.co.jp/dp/4844397605


・IchigoLatteでIoT体験
https://www.amazon.co.jp/dp/B06X3X1CHP

http://digiconcart.com/dccartstore/cart/info/2561/218591


・みんなのIchigoJam入門 BASICで楽しむゲーム作りと電子工作
http://www.amazon.co.jp/dp/4865940332/


・Photoshop自動化基本編
http://www.amazon.co.jp/dp/B00W952JQW/


・Illustrator自動化基本編
http://www.amazon.co.jp/dp/B00R5MZ1PA/


・4K/ハイビジョン映像素材集
http://www.openspc2.org/HDTV/


・クリエイター手抜きプロジェクト
http://www.openspc2.org/projectX/