木曜日, 6月 19, 2025
水曜日, 6月 18, 2025
JavaScriptでAI遊び 51
Illustratorで角丸長方形の角を高さの比率で描画
個人的な必要にせまられたので、Illustratorで角丸長方形の角を高さの比率で描画してみました。
(function () {
var doc = app.activeDocument;
// ユーザー入力
var rectWidth = Number(prompt("矩形の幅 (px):", "200"));
var rectHeight = Number(prompt("矩形の高さ (px):", "100"));
var cornerRatio = Number(prompt("角丸の比率
(高さに対する割合 0-0.5):", "0.2"));
if (isNaN(rectWidth) || isNaN(rectHeight) ||
isNaN(cornerRatio) || cornerRatio < 0 || cornerRatio > 0.5) {
alert("無効な入力値です");
return;
}
var cornerRadius = rectHeight * cornerRatio;
// 高さに対する比率で角丸を決定
// 矩形の作成(アートボードの中央に配置)
var artboard =
doc.artboards[doc.artboards.getActiveArtboardIndex()];
var abBounds = artboard.artboardRect;
var centerX = (abBounds[0] + abBounds[2]) / 2;
var centerY = (abBounds[1] + abBounds[3]) / 2;
var rect = doc.pathItems.roundedRectangle(centerY +
rectHeight / 2, centerX - rectWidth / 2,
rectWidth, rectHeight, cornerRadius, cornerRadius);
alert("矩形を作成しました!");
})();
起動して幅と高さ、そして高さに対する比率を0〜0.5で指定します。0.5以上は指定しても意味が無いのでエラーになります。
上はデフォルト値の処理結果。下は比率を最大の0.5とした結果です。
ラベル:
Illustrator,
JavaScript
火曜日, 6月 17, 2025
Excelで氏名の分離はcontrol Eで一発処理
半角スペースで区切られている氏名の分離はcontrol E(※)で一発処理出来ます。
※macOS版でもcontrol E
サンプルとしてダミーで500名分のデータを作成しました。
まず、最初の人の名字をコピー&ペーストし、続けて[control E]とすると・・・
残りのデータも同様に名字だけペーストされます。
同様に名前も処理します。
ちゃんと500名分が処理されています。
月曜日, 6月 16, 2025
IllustratorでのICCプロファイル埋め込みの可否

質問がありましたので・・・
IllustratorでのICCプロファイル埋め込みの可否について整理しました。最初に結論を言うと、単純にON/OFFの設定にはなりません。ちなみに私は今のところOFFに設定したことはありません。
■ ICCプロファイルの埋め込み可否(Illustratorの場合)
▶ AI形式(.ai)
・保存時に「ICCプロファイルを埋め込む」チェックボックスあり
・デフォルトでチェックが入っていることが多い
・チェックを入れると、Illustratorの「編集」→「カラー設定」で
・チェックを入れると、Illustratorの「編集」→「カラー設定」で
以下の様に指定したプロファイルが埋め込まれます
(例:sRGB、Japan Color 2001 Coatedなど)
▶ PDF形式で保存する場合
PDF互換ファイルとして保存時、同様にICCプロファイルを埋め込むかの選択が可能で、印刷用途では必須の場合もある。
▶ SVG形式
SVG保存時にも埋め込みは可能ですが、ICCプロファイルの扱いはブラウザやアプリ依存で安定しない。
▶ EPS形式
EPSにはICCプロファイルは基本的に埋め込めまないため、出力側のカラーマネジメント次第で色変化が起こる可能性がある。
■ 埋め込みの設定確認方法:
ファイル保存時のダイアログで「ICCプロファイルを埋め込む」にチェック
または、[編集] > [カラー設定] > 作業用スペースの確認
[ファイル] > [ドキュメントのカラーモード] でRGBかCMYKを確認
※埋め込みを行わない場合、開いた環境のカラー設定に従って色が変わる可能性あり、印刷業務やWeb制作では、意図した色を保つためにICCプロファイルの埋め込みが推奨されている。
■ ICCプロファイルを埋め込まない場合は何故?
・多くの商業印刷所では、「Japan Color 2001 Coated」など
特定のプロファイルに統一されたRIP環境で処理されるため、
ICCプロファイルが埋め込まれていても、
無視されて印刷所の標準プロファイルで変換し直されることが多い。
・印刷業界では「CMYKの値(例:C30 M20 Y10 K0)」が
最優先されることが多く、色管理よりも「数値が変わらないこと」が
重視される場合がある。
一部の印刷所では「ICCプロファイルを埋め込まないでください」と明示的に案内しているところもあります。特に古い設備やRIP環境ではICCの扱いに制限があるが主な理由。
一部の印刷所では「ICCプロファイルを埋め込まないでください」と明示的に案内しているところもあります。特に古い設備やRIP環境ではICCの扱いに制限があるが主な理由。
整理すると・・・
結局は「確認&指示に従う」ですね〜。
ラベル:
Illustrator
TCDW8434
捨てられないリチュウム電池が溜まってしまい
Baby Alien 093
一見ヒール系でも温厚なエイリアン(^o^)
ラベル:
3D,
Baby Alien,
modo,
TCDW
日曜日, 6月 15, 2025
撮影用のスマホアダプターは汎用性が高い
撮影用のスマホアダプターは意外と汎用性が高いです。
例えばICレコーダーを固定したいとき、当然そのままでは無理ですが・・・
次に100均でもゲントできるスポンジを小さくカットします。カットはカッターではなくてハサミがイイかも。
あとはカットしたスポンジの堅い方を外側にした本体を挟むだけです。必要に応じて柔らかいスポンジ部分を削るなどすれば完璧です。
ラベル:
Android,
Do It Yourself,
iPhone,
Smartphone
土曜日, 6月 14, 2025
Let's start JavaScript 71
HTML上で指定画像の彩度反転
HTML上で指定した画像の彩度を反転させます。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, initial-scale=1.0">
<title>画像の彩度反転</title>
<style>
body {
font-family: Arial, sans-serif;
text-align: center;
margin: 10px;
background-color: black;
color: white;
}
#imageContainer img {
max-width: 100%;
height: auto;
transition: 0.5s; /* なめらかな変化 */
}
</style>
</head>
<body>
<h3>画像の彩度反転</h3>
<input type="file" id="imageInput" accept="image/*">
<button onclick="toggleSaturation()">彩度反転</button>
<div id="imageContainer"></div>
<script>
let currentImage = null;
document.getElementById("imageInput").
addEventListener("change", function(event) {
const file = event.target.files[0];
if (file) {
const reader = new FileReader();
reader.onload = function(e) {
const img = document.createElement("img");
img.src = e.target.result;
img.id = "selectedImage";
img.style.filter = "saturate(100%)"; // 初期状態は通常彩度
document.getElementById("imageContainer").
innerHTML = "";
document.getElementById("imageContainer").
appendChild(img);
currentImage = img;
};
reader.readAsDataURL(file);
}
});
function toggleSaturation() {
if (currentImage) {
let currentFilter = currentImage.style.filter;
currentImage.style.filter = (currentFilter ===
"saturate(0%)") ? "saturate(100%)" : "saturate(0%)";
}
}
</script>
</body>
</html>
実行したら、処理したい画像ファイルを選択します。
ファイルを表示したら[彩度反転]をクリックすると・・・
彩度が反転されます。ここで再度[彩度反転]をクリックすると・・・
元のイメージに戻ります。
ラベル:
HTML,
JavaScript
金曜日, 6月 13, 2025
Illustratorでの作図基本 21
スターツールは45度×7が面白い
スターツールは45度の回転を7回繰り返すと面白いです。何で7回なのかというと45×7=315。8回だと一周してしまうので、マイナス1で7と言うわけです。
点の数は余り多いと結果が面白くないので7ぐらいが上限かもしれません。取りあえず上の設定でスター描画し、45度回転します。実は図の赤い+が回転の中心点になります。ちなみに図形の中心点と回転の中心点は異なります。
45度回転コピーを7回繰り返し、全ての描画モードを[乗算]とした結果。
点の数を7として・・・
45度回転コピーを7回繰り返し、全ての描画モードを[乗算]とした結果。
点の数を3とすると三角形になります。
これは
第1半径:赤線
第2半径:青線
と線を描くと角度aは60度、角度bは30度、角度cは90度となり、三角関数により赤線:青線:黒線の比率は[1:2:√3]となるので青線は赤線の2倍になります。
ラベル:
Illustrator
TCDW8431
遊んでいるのを見たときは恐怖を感じました
有料の公園での撮影で三脚使用はNGなのがチョット辛いのですか、仕方ないですね。しかし、一般の公園でNGなボール遊びをしている人たちに注意したことがありますが、仮にOKだとしても幼児が遊んでいる直ぐ側で7〜8人で遊んでいるのを見たときは恐怖を感じました。
ラベル:
illustration,
Photoshop,
TCDW
木曜日, 6月 12, 2025
専用機器を使わず外付けストロボをバウンス利用した際のF値算出方法
専用機器を使わず、外付けストロボをバウンス利用した際のF値算出方法を計算してみました。カメラの内蔵ストロボは直接光を当てるので、私は使ったことがありません。逆に外付けストロボは多用しています。その際、光源は天井などにバウンスさせるのですが、以前紹介した照度計では瞬間光を測れる機器を買うのであれば、専用のストロボメーターが買える価格帯なので、他の方法を模索していたわけです。
※参考にしたのはFUJIFILMが公開しているストロバから被写体までの距離とGNで絞りを算出する計算式です。
絞り=設定ISO時のGN / 被写体までの距離
こんな感じで普段は撮影しています。また、ストロボはマニュアル設定で使うので、メーカー専用の高い製品である必要はありません。大切なのはGN(ガイドナンバー)です。ちなみに、マニュアル仕様であればどんなメーカー品であっても、どのメーカーカメラでも使うことができます。ただし、ホットシューが付いていないとダメです。中古店で古い製品を物色してもいいかもしれません。なお、ストロボ撮影の場合はシャッター速度は1/125等で問題ないので、マニュアルで確認してください。
※ガイドナンバー(GN:Guide Number)とは、ストロボ(フラッシュ)の光量(明るさ)を数値化した指標。
F値 = GN / 距離
距離 = GN / F値
GN = F値 × 距離
もちろん、これは直接光を当てた場合ですが、いろいろ実験した結果、以下の公式にたどり着きました。
ISO100で白い天井にバウンスさせた場合
F値 = GN /(天井までの距離 × 4)
iSO感度を上げる場合は、ISO100時の値に対して以下を掛けます。
ISO200 √2倍(1.414)
ISO400 √4倍(2)
初めからISOを100以外に設定した場合
ISO200 > F値 = GN /(天井までの距離 × 3)
ISO400 > F値 = GN /(天井までの距離 × 2)
※ストロボ使用でISO800以上は現実的ではないので省きました。
GN36のストロボをISO200で実際にやってみました。
上はストロボの発光部分から天井までの距離が1.5mなので
F値 = GN /(天井までの距離 × 4)
= 36 /(1.5 × 4)= 36 / 6 = 6
計算値はISO100時のものなのでISO200に変換するために√2を掛けます。
6 × √2 = 8.485 = 8.5
よってF8とF11の中間となりました。
上はF8で撮影した結果です。
今回はストロボメーターで測った値もF8.5相当でした。ちょっとびっくりしました。条件によっては多少誤差が発生するかもしれませんが、デジタルカメラならその場で確認&補正できるので大きな問題ではないと思います。
上はストロボの発光部分から天井までの距離が1.5mなので
F値 = GN /(天井までの距離 × 4)
= 36 /(1.5 × 4)= 36 / 6 = 6
計算値はISO100時のものなのでISO200に変換するために√2を掛けます。
6 × √2 = 8.485 = 8.5
よってF8とF11の中間となりました。
上はF8で撮影した結果です。
今回はストロボメーターで測った値もF8.5相当でした。ちょっとびっくりしました。条件によっては多少誤差が発生するかもしれませんが、デジタルカメラならその場で確認&補正できるので大きな問題ではないと思います。
もちろん背面に設置した反射板との距離でも今回の計算式は有効です。
水曜日, 6月 11, 2025
JavaScriptでAI遊び 50
Illustratorでランダムなジグザグ線を描画(pt指定)
Illustratorでランダムなジグザグ線を描画します。必要に迫られてpoint指定になっています。
(function () {
var doc = app.activeDocument;
var artboard =
doc.artboards[doc.artboards.getActiveArtboardIndex()];
var abBounds = artboard.artboardRect;
var centerX = (abBounds[0] + abBounds[2]) / 2;
var centerY = (abBounds[1] + abBounds[3]) / 2;
// ユーザー設定
var waveLength = Number(prompt("波の全体幅 (px):", "500"));
var waveHeight = Number(prompt("波の最大振幅 (px):", "100"));
var segments = Number(prompt("波のセグメント数:", "20"));
if (isNaN(waveLength) || isNaN(waveHeight) ||
isNaN(segments)) {
alert("無効な入力値です");
return;
}
var pathPoints = [];
for (var i = 0; i <= segments; i++) {
var x = centerX - waveLength / 2 +
(i / segments) * waveLength;
var y = centerY + Math.sin(i * Math.PI * 2 / segments +
Math.random() * Math.PI) * (Math.random() * waveHeight);
pathPoints.push([x, y]);
}
// パスを作成
var newPath = doc.pathItems.add();
newPath.setEntirePath(pathPoints);
newPath.stroked = true;
newPath.strokeWidth = 2;
newPath.filled = false;
alert("ランダムなジグザグ線を作成しました!");
})();
実行したら描画値を入力すれば・・・
ギザギザのランダムな線が描画されます。曲線にしたい場合は・・・

ライブコーナーで対処すればOKです。
ラベル:
Illustrator,
JavaScript
火曜日, 6月 10, 2025
Let's start JavaScript 70
ストロボのGNとISOの換算計算機
写ルンです風撮影道で必要に迫られて、ストロボのGNとISOの換算計算機を作成しました。
ISOとGNの関係は・・・
求めるGN = 基準のGN × √(設定したISO / 基準のISO)
ちなみに通常はISO100の時のGNが基準ですが、最近のデジタルカメラでは最低ISO感度が160などがあり、ISOI160のときのGNという表記もあります。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>GN換算計算機</title>
<style>
body {
font-family: sans-serif;
padding: 20px;
max-width: 400px;
margin: auto;
background: black;
color: white;
}
input {
font-size: 1em;
margin-bottom: 10px;
width: 200px; /* 幅を明示的に200pxに指定 */
display: block;
}
button {
font-size: 1em;
margin-bottom: 10px;
width: 209px; /* 幅を明示的に200pxに指定 */
display: block;
}
label {
margin-top: 10px;
display: block;
}
.result {
font-weight: bold;
margin-top: 15px;
}
.bcolor{
background: yellow;
}
</style>
</head>
<body>
<h3>GN(ガイドナンバー)換算計算機</h3>
<label for="isoA">製品仕様基準のISO感度:</label>
<input type="number" id="isoA" value="100">
<label for="gnA">製品仕様基準に対してのGN:</label>
<input type="number" id="gnA" value="10">
<label for="isoB">変換後のISO感度:</label>
<input type="number" id="isoB" value="400">
<br>
<button class="bcolor"
onclick="calculateGN()"> GNを計算する </button>
<div class="result" id="result"></div>
<script>
function calculateGN() {
const isoA =
parseFloat(document.getElementById('isoA').value);
const gnA =
parseFloat(document.getElementById('gnA').value);
const isoB =
parseFloat(document.getElementById('isoB').value);
if (isoA > 0 && gnA > 0 && isoB > 0) {
const gnB = gnA * Math.sqrt(isoB / isoA);
document.getElementById('result').innerText =
`ISO${isoB}でのGNは約 ${gnB.toFixed(2)} です。`;
} else {
document.getElementById('result').innerText =
'すべての値を正しく入力してください。';
}
}
</script>
</body>
</html>
実行するとダミーデータが表示されるので、任意データを入力して「GNを計算する」をクリックすれば・・・
求めるGNが表示されます。
ラベル:
HTML,
JavaScript
登録:
投稿 (Atom)