皆さん、
1 つの画像を開き、複数のサイズに拡大縮小し、各拡大縮小サイズを変数に保存する最適な方法は何ですか?
現在、複数の画像を開いて拡大縮小・配置し、最終的な画像をPowerPointにコピーして保存しようとしています。しかし、インポートする画像の種類によっては、2つの異なる配置(添付のスクリプトでは「coltwin_1」と「coltwin_2」)が必要になります。配置ごとに異なるスケール値が使用されます。
例として、開いた画像を拡大縮小し、「coltwin_1」内の「col1」として保存してみました。2番目に拡大縮小された変数は、「coltwin_2」配置で使用される「col1x」です。しかし、col1x = col1 << Scale(1.5) を使用すると、col1の拡大縮小が両方のレイアウトに伝播しました。
この問題に対する最善かつ最もクリーンなアプローチは何でしょうか?
どうもありがとう、
ニール
col1 = Open(SD1 || samplename2 || "_a1_16col_filt.jpg", jpg);
col1 << Scale(.16);
col1x = col1 << Scale(1.5);
col2 = Open(SD1 || samplename2 || "_a2_16col_filt.jpg", jpg);
col2 << Scale(.16);
col2x = col2 << Scale(1.5);
coltwin_1 = Expr( // For surface orientation
V List Box(
H List Box(
sem1,
col1 ,
LT1 ,
),
sp1 = Spacer Box( size(0, 50)),
H List Box(
sem2,
col2,
LT2,
),
sp2 = Spacer Box( size(0, 50)),
H List Box(
sem3,
col3,
LT3
)
)
);
coltwin_2 = Expr( // For Xsec orientation
V List Box(
H List Box(sem1,
V Splitter Box(
col1x,
LT1x
),
),
sp1 = Spacer Box( size(0, 50)),
H List Box(sem2,
V Splitter Box(
col2x,
LT2x
),
),
sp2 = Spacer Box( size(0, 50)),
H List Box(sem3,
V Splitter Box(
col3x,
LT3x
),
)
)
);
並外れた!
完璧に動作します。
どうもありがとう、
これには「新規画像」機能の正しい使い方も含まれています。添付のコードは私の場合はうまくいきました。
ニール
col1 = Open(SD1 || samplename2 || "_a1_16col_filt.jpg", jpg);
col1 << Scale(.16);
col1x = New Image(col1);
col1x << Scale(2.2);
col1x = New Image(col1); のように新しい画像を作成する必要があるようです。
Names Default To Here(1);
img = Open("$SAMPLE_IMAGES/tile.jpg", jpg);
Show(img << get size());
img << scale(0.5);
Show(img << get size());
img2 = img;
img2 << Scale(2);
Show(img << get size(), img2 << get size());
img3 = New Image(img);
img3 << scale(3);
Show(img << get size(), img3 << get size, img2 << get size());
ご意見ありがとうございます。
ご提案いただいた最初のアプローチを試してみましたが、依然としてセカンダリ スケーリング係数が最初の col1 変数に影響を及ぼす状況が発生しました。最後の行にコメントする前と後に何が起こったかを示すグラフィックを添付しました。

これが最善の、あるいは良い方法かどうかは分かりませんが…<< Scale() を使うと新しい画像が返されず、古い画像が更新されるだけだと思います。一番簡単な解決策は、col1 を colx にコピーして、それをスケールすることだと思います。
col1 = Open(SD1 || samplename2 || "_a1_16col_filt.jpg", jpg);
col1 << Scale(.16);
col1x = col1;
col1x << Scale(1.5);
これにより、最初に元の画像が 0.16 に拡大され、次に元の画像が最初に 0.16 に拡大され、次に 1.5 に拡大された新しい画像が取得されます (ただし、0.16 に拡大する前にコピーを作成し、正しい値に拡大する方がよい場合があります)。