月曜日, 4月 21, 2025

Wordで図形に対して正確に画像を埋め込む

Wordで図形に対して正確に画像を埋め込む方法を整理しました。今までちゃんと解説していなかった事を今頃気がついたので・・・。ちなみに以下の手順はイマイチなので今回の手順が完璧です・・・多分。


用意した画像。

wordに貼り付けるので解像度はこんな感じにしました。W

最初に図形を配置します。

続けて画像を配置します。配置直後は[レイアウトオプション]で [テキストの全面に移動]偽呈します。

[図の形式]>[図の書式設定]>[図]で透明度を適当に調整して下の図形が確認できるようにします。

ここで図形に表示したい位置とサイズを調整し、その時のサイズをメモします。

透明度を元に戻し画像と図形の位置関係を入れ替えます。

ここで図形を選択し[図形の書式]>[図形の書式設定]>[塗りつぶしと線]>[塗りつぶし(図またはテクスチャ)]を選択するとデフォルトのテクスチャで」塗り潰されますが・・・[挿入する]で、画像を指定して読み込みます。

画像は読みこんが直が葉図形に自動的に収まってしまうので残念な結果になりますが・・・

[図形の書式]>[図形の書式設定]>[図]で不透明度を調整し、めっおしておいたサイズを[トリミング]>[画像の位置]の調整し、画面でズレが発生しない状態を確認できたら透明度を戻して完成です。

背面の画像を削除すればもて盛るサイズとレイアウトで図形の中に画像が埋め込まれていることを確認できます。

TCDW8378
2台のMacを切り替えて使って居るので有線でないと困る

Baby Alien 079
ベビィーなのに、すでにオジサンの貫禄(^o^)
数日前から挙動不審だったMac側のキーボードが、どうやら昇天してしまったようで速攻で注文に入りました。購入して4年だったので妥当?なのかはカナリ怪しいです。そんなコトより価格が倍になっていたのにはビックリ。ちなみに2台のMacを切り替えて共有キーボード&タブレットで使って居るので有線でないと困るため、サードパーティー製です。買い換えの連鎖が出ないことを祈りたいです。

日曜日, 4月 20, 2025

JavaScriptでAI遊び 44 
辺の長さを指定して正N角形を描画(RGB)

辺の長さを指定して正N角形を描画させます。(RGB版)

正多角形の・・・
辺の長さをL
半径をr
正多角形の画数をN
とすると・・・

L=2×r×sin(180°/N)

となり、Excelで計算させると
A1にr、A2にNっを指定し、B1に・・・

L=2*A1*sin(PI()/A2)

で求めることが出来ます。これを応用して・・・

function mmToPt(mm) {
return mm * 2.83465; // mm を pt に変換
}

function drawRegularPolygon(sideLengthMM, sides) {
if (sides < 3) {
alert("3以上の辺の数を入力してください。");
return;
}

var doc = app.activeDocument;
var artboard =
        doc.artboards[doc.artboards.getActiveArtboardIndex()];
var bounds = artboard.artboardRect;

var centerX = (bounds[0] + bounds[2]) / 2;
var centerY = (bounds[1] + bounds[3]) / 2;
var sideLengthPt = mmToPt(sideLengthMM);
var radiusPt = sideLengthPt / (2 * Math.sin(Math.PI / sides));
    // 外接円半径
var angleStep = 360 / sides;
var pathPoints = [];

for (var i = 0; i < sides; i++) {
var angle = (angleStep * i - 90) * Math.PI / 180;
var x = centerX + radiusPt * Math.cos(angle);
var y = centerY + radiusPt * Math.sin(angle);
pathPoints.push([x, y]);
}

var polygon = doc.pathItems.add();
polygon.setEntirePath(pathPoints.
        concat([pathPoints[0]])); // 最後に始点を追加して閉じる
polygon.closed = true;
// ランダムなRGB塗り色
polygon.filled = true;
polygon.fillColor = getRandomRGBColor();
polygon.stroked = true;
polygon.strokeColor = getBlackColor();
polygon.strokeWidth = 1;
}

function getRandomRGBColor() {
var color = new RGBColor();
color.red = Math.random() * 255;
color.green = Math.random() * 255;
color.blue = Math.random() * 255;
return color;
}

function getBlackColor() {
var color = new RGBColor();
color.red = 0;
color.green = 0;
color.blue = 0;
return color;
}

// ユーザー入力
var sideLengthMM = Number(prompt("1辺の長さをmmで入力", "50"));
var sides = Number(prompt("辺の数を入力(3以上)", "6"));

if (!isNaN(sideLengthMM) && sideLengthMM >
    0 && !isNaN(sides) && sides >= 3) {
drawRegularPolygon(sideLengthMM, sides);
} else {
alert("正しい値を入力してください。");
}

実行したら、1辺の長さを指定し・・・

辺の数を入力すれば・・・

描画します。色はRGBのランダム色で生成されます。

TCDW8377
暑いと脳内がダレるので、これからの季節は苦手です

昨夜は深夜でも室温30度越えでエアコンの準備を本気で考え始めました(>_<)。暑いと脳内がダレるので、これからの季節は苦手です(>_<)。

土曜日, 4月 19, 2025

Photoshopのレベル補正は気分で乗り切る

質問がありましたので・・・
Photoshopのレベル補正もトーンカーブと同様に苦手意識を持つ方が多いようですが、難しく考えなくて大丈夫です。

全体的に色温度が低く赤みが強いので、色温度を高く青みがかったイメージに変更したいとします。なお、処理画像はスマートオブジェクトに変換しておけが、後から何度でもレベル補正の処理をやり直すことが出来ます。

まずレベル処理は[レッド]チャンネルに切り替えて、グレータブを右にスライドします。全体的の緑がかればOKです。後からいくらでも修正できるので細かいことは気にしません。

処理結果に対して

[グリーン]チャンネルに切り替えて、ブラックとグレータブを右にスライドします。全体的に青がかればOKです。後からいくらでも修正できるので細かいことは気にしません。

処理結果に対して

[ブルー]チャンネルに切り替えて、ブラックとグレータブを若干右にスライドします。

こんな感じで処理します。気になる部分は何度でも修正できます。

 

TCDW8376
あんまりウルサイので途中下車した事もあります

日本人は電車の中で静かにしていると海外の方から絶賛されていますが、嘘くさいですね。高校生がメチャ混みの地下鉄内で馬鹿騒ぎ〜に、かなりの確率で遭遇します。あんまりウルサイので途中下車した事もあります。ガマン強くなりました。

金曜日, 4月 18, 2025

JavaScriptでAI遊び 43 
辺の長さを指定して正N角形を描画(CMYK)

辺の長さを指定して正N角形を描画させます。(CMYK版)

正多角形の・・・
辺の長さをL
半径をr
正多角形の画数をN
とすると・・・

L=2×r×sin(180°/N)

となり、Excelで計算させると
A1にr、A2にNっを指定し、B1に・・・

L=2*A1*sin(PI()/A2)

で求めることが出来ます。これを応用して・・・

function mmToPt(mm) {
return mm * 2.83465; // mm を pt に変換
}

function drawRegularPolygon(sideLengthMM, sides) {
if (sides < 3) {
alert("3以上の辺の数を入力してください。");
return;
}

var doc = app.activeDocument;
var artboard =
        doc.artboards[doc.artboards.getActiveArtboardIndex()];
var bounds = artboard.artboardRect;

var centerX = (bounds[0] + bounds[2]) / 2;
var centerY = (bounds[1] + bounds[3]) / 2;
var sideLengthPt = mmToPt(sideLengthMM);
var radiusPt = sideLengthPt / (2 * Math.sin(Math.PI / sides));
    // 外接円半径
var angleStep = 360 / sides;
var pathPoints = [];

for (var i = 0; i < sides; i++) {
var angle = (angleStep * i - 90) * Math.PI / 180;
var x = centerX + radiusPt * Math.cos(angle);
var y = centerY + radiusPt * Math.sin(angle);
pathPoints.push([x, y]);
}

var polygon = doc.pathItems.add();
polygon.setEntirePath(pathPoints.concat([pathPoints[0]]));
    // 最後に始点を追加して閉じる
polygon.closed = true;
// ランダムなCMYK塗り色
polygon.filled = true;
polygon.fillColor = getRandomCMYKColor();
polygon.stroked = true;
polygon.strokeColor = getBlackColor();
polygon.strokeWidth = 1;
}

function getRandomCMYKColor() {
var color = new CMYKColor();
color.cyan = Math.random() * 100;
color.magenta = Math.random() * 100;
color.yellow = Math.random() * 100;
color.black = Math.random() * 0;
return color;
}

function getBlackColor() {
var color = new CMYKColor();
color.cyan = 0;
color.magenta = 0;
color.yellow = 0;
color.black = 100;
return color;
}

// ユーザー入力
var sideLengthMM = Number(prompt("1辺の長さをmmで入力", "50"));
var sides = Number(prompt("辺の数を入力(3以上)", "6"));

if (!isNaN(sideLengthMM) && sideLengthMM >
    0 && !isNaN(sides) && sides >= 3) {
drawRegularPolygon(sideLengthMM, sides);
} else {
alert("正しい値を入力してください。");
}

実行したら、1辺の長さを指定し・・・

辺の数を入力すれば・・・

描画します。色はCMYKのランダム色で生成されます。
なお、CMYでのランダム色で黒は使いません。

TCDW8375
悪趣味で下品、学芸会レベルな「誰この人?」

YouTubeは、マンガ系、映画紹介系、化学情報系あたりがオンリーなのですが、広告映像で最近多い、悪趣味で下品、学芸会レベルな「誰この人?」を調べてみたら、知らない旬の「ミュージシャン」「芸人」「タレント」「ユーチューバー」だと分かって笑うしかないです。

木曜日, 4月 17, 2025

Let's start JavaScript 62 
HTML上でスピログラフを描画

HTML上でスピログラフを描画させてみました。

■スピログラフのパラメータ
外側の固定円(半径 R)
内側の回転円(半径 r)
描画点の距離 d(内円の中心からの距離)
角度 θ(回転角)

■スピログラフの方程式
スピログラフの曲線 (x, y) は、以下のパラメータ方程式で表されます。

基本形(ハイポサイクロイド)
x(θ)=(R-r)cos(θ)+d cos(((R-r)r)θ)
y(θ)=(R-r)sin(θ)-d sin(((R-r)r)θ)

ここで:

θ は回転角(0 から 2π × ループ回数 まで変化)
(R - r) の比が整数であれば閉じた軌跡になる

<!-- index.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 { text-align: center; font-family: Arial, sans-serif; }
canvas { border: 1px solid black; margin-top: 10px;
            background-color: black;}
input { margin: 5px; text-align: right; width: 40px; }
</style>
</head>
<body bgcolor="#333">
<font color="white">
<h2>スピログラフ描画</h2>
<label>外円 R: <input type="number"
        id="R" value="150"></label>
<label>内円 r: <input type="number"
        id="r" value="70"></label>
<label>距離 d: <input type="number"
        id="d" value="100"></label>
<label>回転数 loops: <input type="number"
        id="loops" value="10"></label>
</font>
<button onclick="drawSpirograph()">描画</button>
<br>
<canvas id="canvas" width="550" height="550"></canvas>

<script>
function drawSpirograph() {
const canvas = document.getElementById("canvas");
const ctx = canvas.getContext("2d");
            // 画面クリア
ctx.clearRect(0, 0, canvas.width, canvas.height);

// ユーザー入力取得
let R = parseFloat(document.getElementById("R").value);
let r = parseFloat(document.getElementById("r").value);
let d = parseFloat(document.getElementById("d").value);
let loops = parseInt(document.getElementById("loops").
                value, 10);
let step = 0.1; // 角度のステップ(小さいほど滑らか)

let centerX = canvas.width / 2;
let centerY = canvas.height / 2;
let t = 0;
let totalSteps = Math.PI * 2 * loops;
let points = [];

// 計算して座標を取得
while (t < totalSteps) {
let x = (R - r) * Math.cos(t) + d * Math.cos((R - r) / r * t);
let y = (R - r) * Math.sin(t) - d * Math.sin((R - r) / r * t);
points.push({ x: centerX + x, y: centerY + y });
t += step;
}

// スピログラフを描画
ctx.beginPath();
ctx.moveTo(points[0].x, points[0].y);
for (let i = 1; i < points.length; i++) {
ctx.lineTo(points[i].x, points[i].y);
}
ctx.closePath();
ctx.strokeStyle = "yellow";
ctx.lineWidth = 2;
ctx.stroke();
}

// 初回の描画
drawSpirograph();
</script>
</body>
</html>
<!-- index.html -->

実行直後の状態です。赤枠で囲んだ部分の処理は今後の課題です(>_<)

パラメーター変更例(その1)

パラメーター変更例(その2)
線がブレているように見えますね(>_<)

パラメーター変更例(その3)

TCDW8374
連続食べ過ぎ注意報が鳴りっぱなしです

Baby Alien 078
笑うセールスマンではありません(^o^)
いよいよタケノコの季節。天麩羅、煮物、炊き込みご飯と、とにかく何でも美味しいですね。連続食べ過ぎ注意報が鳴りっぱなしです。