土曜日, 11月 22, 2025
金曜日, 11月 21, 2025
JavaScriptでAI遊び 80
Illustratorでグラデーションを中間色ベタ塗りに

Illustratorでグラデーションを中間色ベタ塗りに変更します。これによりブラシなどに活用できます。
/*
* グラデーション塗り → 50%位置の中間色(実測)に変更
* - 選択中の各オブジェクトの塗りが Gradient のものだけ処理
* - 50%位置に隣接する2つのストップを見つけ、線形補間
* - 最終色はドキュメントのカラー空間(RGB / CMYK)で設定
* - Gray / Spot / Lab なども内部で変換して処理
* 注意: Illustrator の「midPoint」は考慮せず(rampPoint のみ尊重)。
* midPoint(ミッドポイント)隣接する2つのストップの間で、 * 色の比率が50:50になる位置を決めるパラメータ。
* デフォルトは 50(真ん中)で、移動でブレンドの寄り方が変化。
* rampPoint(ランプポイント)ストップの位置を表す数値。
* 0〜100 (%) で、グラデーション全体に対してその色が置かれる位置。
*/
(function () {
if (app.documents.length === 0)
{ alert("ドキュメントを開いてください。"); return; }
var doc = app.activeDocument;
if (!doc.selection || doc.selection.length === 0)
{ alert("オブジェクトを選択してください。"); return; }
var targetIsRGB = (doc.documentColorSpace ===
DocumentColorSpace.RGB);
var changed = 0, skipped = 0;
// ImageColorSpace 列挙の短縮
var ICS = ImageColorSpace;
function colorToArray(c) {
// 任意の Color を「その色が属する空間の配列値 + 空間種別」を返す
// 戻り値: {space: ICS.RGB|CMYK|GRAY|LAB, values:[...]}
if (c.typename === "RGBColor") return { space: ICS.RGB,
values: [c.red, c.green, c.blue] };
if (c.typename === "CMYKColor") return { space: ICS.CMYK,
values: [c.cyan, c.magenta, c.yellow, c.black] };
if (c.typename === "GrayColor")
return { space: ICS.Gray, values: [c.gray] };
if (c.typename === "LabColor")
return { space: ICS.LAB, values: [c.l, c.a, c.b] };
if (c.typename === "SpotColor")
return colorToArray(c.spot.color);
// 中身の実色で再帰
// その他(パターン/グラデ/なし)はここには来ない想定
throw new Error("未対応のカラータイプ: " + c.typename);
}
function convert(values, srcSpace, dstSpace) {
// app.convertSampleColor(src, srcArray, dst, purpose)
// purpose: ImageColorConvertPurpose.defaultpurpose
return app.convertSampleColor(srcSpace, values, dstSpace,
ImageColorConvertPurpose.defaultpurpose);
}
function makeSolidColorFromArray(arr, useRGB) {
if (useRGB) {
var rgb = new RGBColor();
rgb.red = arr[0]; rgb.green = arr[1]; rgb.blue = arr[2];
return rgb;
} else {
var cmyk = new CMYKColor();
cmyk.cyan = arr[0]; cmyk.magenta = arr[1];
cmyk.yellow = arr[2]; cmyk.black = arr[3];
return cmyk;
}
}
function getColorAt50Percent(gradient) {
// 0..100 の rampPoint を持つ gradientStops から、
// pos=50 に隣接する2ストップを見つけ補間
var stops = gradient.gradientStops;
if (stops.length === 0) return null;
if (stops.length === 1) return stops[0].color;
// ストップを rampPoint 昇順で収集
var list = [];
for (var i = 0; i < stops.length; i++) {
list.push({ p: stops[i].rampPoint, c: stops[i].color });
}
list.sort(function (a, b) { return a.p - b.p; });
var pos = 50;
// ちょうど一致
for (var j = 0; j < list.length; j++) {
if (Math.abs(list[j].p - pos) < 0.0001) return list[j].c;
}
// 区間を特定
var a = list[0], b = list[list.length - 1];
for (var k = 0; k < list.length - 1; k++) {
if (list[k].p <= pos && pos <= list[k + 1].p)
{ a = list[k]; b = list[k + 1]; break; }
}
var t = (pos - a.p) / Math.max(1e-6, (b.p - a.p)); // 0..1
// 両端色をドキュメント空間へ変換
var dst = targetIsRGB ? ICS.RGB : ICS.CMYK;
var A = colorToArray(a.c);
var B = colorToArray(b.c);
var aDst = (A.space === dst) ? A.values.slice(0) :
convert(A.values, A.space, dst);
var bDst = (B.space === dst) ? B.values.slice(0) :
convert(B.values, B.space, dst);
// 線形補間
var out = [];
var n = aDst.length;
for (var m = 0; m < n; m++) {
out[m] = aDst[m] + (bDst[m] - aDst[m]) * t;
}
return makeSolidColorFromArray(out, targetIsRGB);
}
function processItem(it) {
try {
// PathItem / CompoundPathItem の塗りを処理
if (it.typename === "PathItem") {
if (it.filled && it.fillColor && it.fillColor.typename ===
"GradientColor")
{var col = getColorAt50Percent(it.fillColor.gradient);
if (col) { it.fillColor = col; changed++; return; }
}
} else if (it.typename === "CompoundPathItem") {
// コンパウンドは子パスの塗りに依存
for (var i = 0; i < it.pathItems.length; i++) {
var p = it.pathItems[i];
if (p.filled && p.fillColor && p.fillColor.typename ===
"GradientColor") {
var col2 = getColorAt50Percent(p.fillColor.gradient);
if (col2) { p.fillColor = col2; changed++; }
}
}
return;
} else if ("pageItems" in it) {
// グループ/テキストアウトラインなど再帰
for (var j = 0; j < it.pageItems.length; j++)
processItem(it.pageItems[j]);
return;
}
skipped++;
} catch (e) {
// 個々のアイテムで失敗しても継続
$.writeln(e);
skipped++;
}
}
// 選択全体を処理
var sel = doc.selection;
for (var s = 0; s < sel.length; s++) processItem(sel[s]);
alert("完了: 中間色に変更 " + changed + " 件" +
(skipped ? "(対象外 " + skipped + " 件)" : ""));
})();
今回は3匹の熊さんを選択して実行すると・・・
完了が表示され・・・
ベタ塗りに変換されます。グラデーションは2色間だけでなく複雑なモノでもOKです。
ラベル:
Illustrator,
JavaScript
TCDW8592
謎のバグ付きのアップデートでいじめてくる
Black Fridayで激安は良いけど、何十年もアップデートで使い続けているユーザーには何の恩恵も無いんですよね〜。しかも謎のバグ付きのアップデートでいじめてくるし・・・。レンガ投げたくなりますね〜。
ラベル:
illustration,
Photoshop,
TCDW
木曜日, 11月 20, 2025
Photopea Basic Operation 10
Ptotopeaに幾つかの新機能が追加
[ファイル]>[開くその他]>[PDFテンプレート]にて・・・
様々なテンプレートを開くことが出来ます。
[ファイル]>[別名で保存]>[その他]にてAVIFとEXRファイル形式が対応しました。
EXR:CG業界で広く使われている工業規格のラスター画像ファイル形式。高精度な色情報(ハイダイナミックレンジ、HDR)を保持でき、複数の画像レイヤーやチャンネル(アルファ、Z深度など)を1つのファイルに格納できるのが特徴。
[編集]>[Perspective Warp]
Perspective Warp:遠近変形
彩度を落とした画像の上にカラーの切りに木画像を配置したデータで・・・
[編集]>[Perspective Warp]を選びレイヤーの遠近変形したい部分(黄色のパプリカ)をクリックすると矩形が表示されるので・・・
変形したいエリアを指定し「Warp(変形)」ボタン をクリックして変形を行います。

変形が済んだら亜[レ]で処理が確定します。
[編集]>[Assign Profile]>[Assign Profile]及び[Convert to Profile]に、それぞれ[sRGB]、[Adobe RGB]、[ProPhoto RGB]、[Display P3]が対応。
Assign Profile:プロファイル割り当て
Convert to Profile:プロファイル変換
ProPhoto RGB:コダックが開発した、人間の可視域に非常に近い、非常に広範囲な色域を持つカラー空間。RAWデータを保持するため、写真編集ソフトで使われ、高解像度の印刷や編集に最適。
Display P3:従来のsRGBよりも広い範囲の色を表現できる、Appleが策定した次世代の色空間規格。
[画像]>[モード]にて[8 Bit/Channel][16 Bit/Channel][32 Bit/Channel]が指定できるようになりました。
[ウィンドウ]>[その他]に[Peas Maker]が追加されました。
選択するとこんなパレットが表示されますが・・・???
Peas Maker:ピーズメイカー?
Photopea の公式プラグイン/ミニゲーム風プロジェクトで、画像編集ツール内で遊べるゲーム感覚的な要素で、公式のプラグイン仕様ページ(Photopea Plugin API)には、プラグインを作成・導入できる構成が説明されていますが、よく分かりません。後日整理してみます。
ラベル:
Photopea
TCDW8591
地域的な問題なのか?とも思ったのですが
スーパーで大根が小ぶりだと気がついた。地域的な問題なのか?とも思ったのですが、核家族時代なので大きいサイズだと売れないらしい。そういえばスイカも大きいサイズ1個まるごとは、あまり見なかたな〜。まっ、スイカは高いという問題も有りますけどね。
ラベル:
illustration,
Photoshop,
TCDW
水曜日, 11月 19, 2025
Blender Study Notes 66
編集モードでのオブジェクト複製と分割
Blenderはオブジェクトモードと編集モードで同じ処理が出来ないので,編集モードで少々混乱しますが、複製(コピー&ペースト)がチョット独特なので整理してみました。今更ですが・・・。
編集モードで複製を取りたいときは・・・
まず選択しマス。オブジェクトが田にある場合は[A]キーではなく[altクリック/optionクリック]で確実に選択します。
次に[shift D]に続いて[XYZ]のキーで方向を固定して移動後に数値指定します。複製はコレで完了ですが、編集モードで複製した場合は、オブジェクトモードに戻ったときに、グループ化された状態になっています。ソレを分割するには・・・
右クリックで[分割]>[選択]を選べば・・・
分割されます。
オブジェクトモードに戻っても分割されています。
Blender 4.5.0
ラベル:
3D,
Blender,
Blender Study Notes,
modo
火曜日, 11月 18, 2025
Music with BandLab 08
SongStarterで本格的な楽曲作りが可能
ログインしたら[作成]>[SongStarter]と進みます。
画面が切り替わったら楽曲のジャンルを選択しして[始める]をクリックします。
画面が切り替わると3曲が生成されているのでその中から選びます。気に入らなければ[再生成]で新たな3曲を自動生成します。ここでの編集メニューは4つ。一番左はジャンルの変更。
左から2番目は・・・
Bright(ブライト)
意味:明るい、はっきりした、元気なトーン
特徴:高音が強調され、軽快でポジティブな雰囲気
使用例:ポップス、EDM、ロックなどの「明るく前向きな曲」
Chill(チル)
意味:落ち着いた、リラックスできる、まったりした
特徴:テンポが遅めで、柔らかいサウンドやドラム
使用例:Lo-fi、R&B、アンビエントなどの「くつろぎ系サウンド」
Moody(ムーディー)
意味:感情的・しっとりした・少し暗めの雰囲気
特徴:マイナー調、低音や残響の多いサウンドが多い
使用例:バラード、オルタナティブ、映画音楽っぽい曲など
右から2つ目は・・・
bpm(Beats Per Minute)
日本語:テンポ(拍/分)
意味:1分間に何拍あるかを示すテンポの単位です。
60 bpm → ゆっくり(1秒に1拍)
120 bpm → 標準的(多くのポップスがこのあたり)
180 bpm → 速い(ロック、EDMなど)
BandLabで曲を作るときに「bpm」を設定すると、メトロノームの速さやループ素材のテンポがその値に合わせて再生されます。
右端は・・・
st(Semitone/音程の単位)
日本語:半音(セミトーン)
意味:音の高さ(ピッチ)を変えるときの単位です。
1 st = ピアノの鍵盤で隣のキー(半音)ぶんの高さ。
+1 st → 半音上げる(例:C → C#)
–2 st → 2半音下げる(例:C → Bb)
BandLabのループやボーカル、サンプルに「st」という表示がある場合は、
その素材のピッチを半音単位で上げ下げできます。
キーを合わせたいときや、声を少し低く/高くしたいときに使います。
調整が済んで[Studioで編集]をクリックすれば・・・
編集画面に入ります。このときPCにマイクロフォンが接続されていると上の様なパレットが出てくるので適宜対応します。
後は通常の編集と同じように編集可能です。楽曲作成の参考にもなりますね。
月曜日, 11月 17, 2025
Photoshopでコントラストの調整は2階調化が簡単便利
質問がありましたので・・・
Photoshopでコントラストの調整は色々な処理が出来ますが、2階調化が簡単便利です。
元画像の竹林です。
トーンカーブでの処理なら、竹の暗い部分を選択して上図のように調整すれば・・・
こんな感じになりますが、後処理が面倒な場合は・・・
レイヤーの複製を作成し、スマートオブジェクトに返還後に[イメージ]>[色調補正]>[2階調化]で概ね上図の様に調整(※)し・・・
描画モードを[乗算]、[不透明度50%]程で重ねます。
ここで、描画色を[黒]、背景直を[白]に設定し、レイヤーマスク上に円形グラデーションを太陽の位置から上図のように放射します。
[2階調化]のレイヤーだけを表示した状態です。
レイヤーの構造はこんな感じです。スマートオブジェクトに設定しているので、後から調整可能です。
上はここでも処理結果です。
日曜日, 11月 16, 2025
ペットボトルキャップの加工補助治具
ペッとボトルキャップを加工して簡易的に薬剤や粉末などを撒く道具は簡単に作成出来て重宝します。ただしキャップを暖める際にキャップそのもの形状が壊れてペッとボトルにねじ込めなくなることがあります。ソレを回避するために、ヒートガンで暖めても形状を壊さない治具を作成しました。
キャップそのもの形状が壊れてしまった状態。
偶然発見したマスキングテープの芯がキャップにピッタリでした。後は割り箸が有れば問題ないのですが、もっていなかったので、手持ちのアイスの棒(※)を貼り合わせて棒状にしました。
棒の先端をヤスリなどで円形に凹ませます。コレでマスキングテープの芯をしっかり挟むことが出来ます。
マスキングテープの芯をしっかり挟める状態に組み込み、接点を補強します。接続は木工用ボンドを利用しています。
後はこんな感じでキャップを挿入してヒートガンで暖めて菜箸などで出っ張らせれば綺麗に作成することが出来ます。
ラベル:
Do It Yourself
登録:
コメント (Atom)

















































