[ 前へ | 目次 | 次へ ]
Now Loading...
ダウンロード
PC (※スマートフォンでは動きません) でダウンロードし、ZIPファイルを右クリックメニューから展開して、できたフォルダ内の「 VCSSL.bat(バッチファイル) 」をダブルクリックすると起動します。 Linux等では「 VCSSL.jar 」をコマンド実行してください。
» 詳しい使用方法や、エラーで展開できない際の対応方法などはこちら

画像の矩形(四角形)領域を切り抜く簡易ツール(複数ファイル一括処理版)

このプログラムは、フォルダ内にある全ての画像ファイル(PNG形式またはJPEG形式)を開き、その中の矩形(四角形)領域を切り抜いた上で、別のフォルダに保存する簡易ツールです。

スポンサーリンク


使用方法

ダウンロードと展開(解凍)

まず、PC(スマホは未対応)で上の画面の「 ダウンロード 」ボタンを押してください。 するとZIP形式で圧縮されたファイルがダウンロードされます。

Windows をご使用の方は、ここでまずZIPファイルを右クリックし、「プロパティ」を選んで開かれる画面で、 下の方にあるセキュリティ項目の「許可する」にチェックを入れて「OK」で閉じてください。 これを行わないと、ZIP展開やソフト起動時に、警告メッセージが出て展開完了/起動できない場合があります。

その後、ZIPファイルを右クリックして「すべて展開」や「ここに展開」などで展開(解凍)してください。 展開が成功すると、ZIPファイルと同じ名前のフォルダができ、その中にZIPファイルの中身が入っています。

» 展開がエラーで止まってしまう場合や、ファイル名が文字化けしてしまう場合は…

プログラムの起動

Windows をご使用の場合

上記でZIPファイルを展開したフォルダ内にある、以下のバッチファイルをダブルクリック実行してください:

VCSSL__ダブルクリックでプログラム実行.bat

もしプログラムを書き変えながら使いたい場合は、代わりに「 VCSSL_Editor__プログラム編集はこちら.bat 」を実行してください。

正常に起動できると、初回のみ、Java実行環境を入手するか等を尋ねられるので、適時答えて済ませると、プログラムが起動します。 2回目以降はすぐに起動します。

» うまく起動できずにエラーになってしまう場合は…

Linux 等をご使用の場合

ZIPファイルを展開したフォルダ内へコマンドライン端末で cd して、以下の通り入力して実行してください:

java -jar VCSSL.jar
(プログラムの内容を書き変えながら使いたい場合は、代わりに VCSSL_Editor.jar を実行)

» javaコマンドが使用できない等のエラーが表示される場合は…

実行中にメモリー容量が不足する場合は…

このプログラムは、使い方によっては、それなりに多くのメモリーを使用します。 そのため、デフォルトのメモリー容量設定では不足する場合があります。 その場合は以下の対処方法をご参照ください:

» 実行中にメモリー容量が不足する場合(Microsoft® Windows® をご使用の場合)
» 実行中にメモリー容量が不足する場合(Linux® 等やその他のOSをご使用の場合)

※ 目安として、4288 x 2848 サイズ(約1200万画素)の写真データを切り抜き加工する場合、大体 256MB くらい(以上)割り当てれば動くようです。

切り抜く矩形(四角形)領域を指定

起動すると、まず切り抜く矩形(四角形)領域を尋ねられるので、入力してください。 具体的には、切り抜く四角形の、左上頂点のXとY座標、および幅と高さの値を指定します。

ここでは、サンプル画像(下図)の青色の領域を切り抜くため、左上端のX座標に「100」、Y座標に「50」、幅に「300」、高さに「200」を指定してみましょう (実はデフォルト値がこの値になっているので、「OK」を連打するだけで済みます)。

サンプル画像
サンプル画像「 sample.png 」
ダウンロード・解凍した「input」フォルダ内に同梱されています。青色の四角形の領域を切り抜き、別の画像として保存してみます。

保存するファイルの画像形式や画質を選択

続いて、保存するファイルの画質形式を PNG または JPEG 形式から選択し、JPEGを選んだ場合は画質をパーセントで指定します。 「 100.0 」が最高画質です。なお、PNGを選んだ場合は、そもそも画質が劣化しない(可逆圧縮)形式なので、画質の入力は不要です。

入力先フォルダの選択

その後は、入力先フォルダ(加工したい画像ファイルが入っているフォルダ) を指定するか尋ねられるので、 指定したい場合は「 はい 」を選択して、続けてフォルダの場所を選択してください。

「 いいえ 」を押してスキップすると、ダウンロード・展開したフォルダ内にある「 input 」という名前のフォルダが、自動的に入力先フォルダとみなされます。 この中には、上で示したサンプル画像「 sample.png 」が入っているので、初めての場合はここでは「 いいえ 」を選択してみましょう。

なお、このツールではPNG形式の他にも、JPEG形式の画像の読み込みもサポートしています。

出力先フォルダの選択

続いて同様に、出力先フォルダ(加工済みの画像ファイルを保存するフォルダ) を指定するか尋ねられるので、 指定したい場合は「 はい 」を選択して、続けてフォルダの場所を選択してください。

ここでも「 いいえ 」を押してスキップすると、ダウンロード・展開したフォルダ内にある「 output 」という名前のフォルダが、自動的に入力先フォルダとみなされます。 初めての場合はここでも「 いいえ 」を選択してみましょう。

切り抜き処理の実行

あとは放っておけばOKです。入力先フォルダ内にある全ての画像ファイル(PNG/JPEG形式)が、 指定領域を切り抜いた上で、出力先フォルダ内に自動で保存されます。 その際、保存されるファイル名は、元のファイル名の末尾に「 _crop.png 」または「 _crop.jpg 」が付いたものになります。

入力先&出力先フォルダの指定を「 いいえ 」でスキップした場合は、 「 input 」フォルダ内にある先ほどのサンプル画像を切り抜いたものが、 「 output 」フォルダ内に保存されているはずです。 その内容は下図の通りです(実際にこのツールで変換したファイルそのものを表示しています)。 ちゃんと、指定領域が切り抜かれていますね。

サンプル画像の処理結果
サンプル画像の切り抜き結果「 sample.png_clear.png 」
元画像から、最初に指定した矩形(四角形)領域 = 青色の領域のみを切り抜いた内容になっています。

コード解説

このプログラムのコードはVCSSLで記述されています。

内容を書き変えて改造したい場合には、 プログラムのコード「 ImageCropperMulti.vcssl 」をテキストエディタで開いて改造してください。 スクリプト言語なので、コンパイラなどの別ソフトは不要で、コードを書き換えるだけでOKです。 VCSSLはC系の単純な文法の言語なので、C言語などに触れた事のある方なら簡単に読めると思います。

なお、このコードは「 画像の矩形(四角形)領域を切り抜く簡易ツール 」の回のコードを土台に、 複数ファイルを一括処理するように改造したものです。 具体的には、上記の回のコードの処理を関数にまとめて、フォルダ内の全ファイルに対して毎回呼び出して実行しているような流れです。 なので、最初に上記の回のコードから読み進めるほうがスムーズかもしれません。

また、似たような「単一ファイル処理 → 複数ファイル一括処理」への改造を、 ちょうど以前に 「 特定の色を透明にする簡易ツール(複数ファイル一括処理版) 」 のコードでも行いました。実は今回のコードは、それをかなりコピペして流用しています。 同じように、フォルダ内のファイルについて一括処理を行うプログラムを自作したい場合は、コピペのベースや参考などになるかもしれません。

[前提となるコード]

コード全体

それでは、まずはコード全体を見てみましょう。

以上です。100行〜程度の比較的短いコードですね。 上から下へ順に読むと、トップダウンで処理階層が深く&細かくなる流れになっています。 各部で行っている処理はコード内のコメントの通りですが、 以下では順を追ってもう少し詳しく説明します。

先頭領域

まずは、先頭の4行です。

1行目では、コードのファイルで使用している文字コード(Shift_JIS)を宣言しています。 書かなくても動きますが、書いておくと文字化けを防げます。Shift_JISの他にUTF-8も使用できます。

2行目では、グラフィックスデータを扱うための機能を提供する Graphics ライブラリを読み込んでいます。 ここで「 グラフィックスデータって一体何? 」となるかと思いますが、いわゆる画像データの事だと思ってください。 VCSSLでは、画像を読み込んだり表示したり描画したりといった事に必要なデータを、まとめてグラフィックスデータという形で扱います。

その後に読み込んでいる File ライブラリは、ファイルシステムや各ファイルの情報等にアクセスする機能を提供してくれるものです。 今回はフォルダのフルパスを取得したり、フォルダ内のファイル名の一覧を取得したり、そのファイル名が指す対象がフォルダかどうかを判定するため等に使用します。

Text ライブラリは文字列処理機能を提供してくれるもので、 今回はファイルのパスの末端に付いている拡張子が、このツールが対応しているPNG/JPEG形式のもの( .png / .jpg )かどうかを判定するのに使用します。

グローバル変数や入力部

続いて、グローバル変数の宣言や、その値の入力を行っている部分です。

先頭では、入出力フォルダの指定を「 いいえ 」でスキップした際に使用する、デフォルトの入出力フォルダを、定数(const)として定義しています。 なお、名前の末尾に付いている「 DIRECTORY 」は「 ディレクトリ 」と読みますが、これは「 フォルダ 」のちょっと堅い読み方のようなものと思ってください。

その後は、切り抜く矩形(四角形)領域の座標や幅/高さなどを宣言し、input 関数を呼んでユーザーに値を入力してもらっています。 保存する画像の形式(PNG/JPEG)や画質なども、同様に宣言・入力しています。 このようにグローバル領域に書いた処理は、タイミング的には main 関数の実行よりも先に行われます。

本当はこれらの値はグローバル変数である必要は無く、main 関数内でローカルに宣言して下層の関数の引数に渡せば(行儀的にも)よいのですが、 こういう短い簡易ツールのコードであまり堅くするのも改造や流用時に面倒になりそうなので、パラメータのまとめ書きっぽくグローバルに置いています。 もし画像を切り抜く領域などを、毎回尋ねずに決め打ちしたい場合は、このあたりの宣言行の右辺を書き換えてください。

全体の処理の大枠になっている main 関数

続いて main 関数です。C言語などではおなじみですが、 main 関数は、プログラム実行時に自動で呼び出される関数です。 ここには処理全体の最も上層になる、大枠的な処理を書いています。

頭のほうでは、まず入出力フォルダのフルパスを格納する変数を宣言し、そこにデフォルトの入出力フォルダのフルパスを getFilePath 関数で取得して代入しています。 続いて、ユーザーに入出力フォルダを指定したいか尋ねて、「 はい 」が選択された場合は、choose 関数でユーザーに選んでもらったフォルダのパスで上書きしています。

そして、入出力フォルダのフルパスを引数として processAllFiles 関数を呼び出しています。 これはこのコード内で宣言されている関数で、詳細はすぐ後で解説しますが、 フォルダ内の全ファイルを走査し、それぞれに切り抜き処理を実行する処理をまとめたものです。 このツールの目的となっている処理ですね。

その処理が終わると、ユーザーに popup 関数で処理完了を通知しています。 大枠の処理はこれで終わりです。

最後に exit 関数などでプログラムを実行終了してもいいのですが、 そうすると自動でウィンドウが閉じてしまい、ユーザーが処理済みファイルの一覧を確認できなくなってしまうので、 ここでは処理完了メッセージを出すのに留めています。 ユーザーがウィンドウを手で閉じた時点で、プログラムが終了します。

フォルダ内の全ファイルを走査し、切り抜き処理を実行する processAllFiles 関数

続いて、上で見た main 関数の中から呼んでいた、processAllFiles 関数を見てみましょう。 この関数は、引数 inputFilePath に入力先フォルダ、 outputPath に出力先フォルダを受け取ります。 そして、入力先フォルダの中にある全てのPNG形式およびJPEG形式画像ファイルに対して、切り抜き処理を実行した上で、出力先フォルダに保存します。

先頭では、まず入力先フォルダ内の全ファイルの名前一覧を、listDirectory 関数で配列として取得し、 その要素数 = ファイルの個数を変数 fileN に控えています。 続く for 文で、それらのファイル名を1個1個辿っていっています。

for 文の冒頭で、ファイル名に入力フォルダのパスを結合し、ファイルパスに変換した変数 inputFilePath を宣言しています。 そして、直後の if 文でその内容を検査し、このツールの処理対象ファイルかどうかを判定しています。

if 文の条件式を日本語にすると「 inputFilePath の指すファイルがフォルダではなく、かつ、inputFilePath の内容が『 .png 』または『 .jpg 』で終わる場合」となります。 前半の条件は、入力フォルダ内でさらにフォルダがある場合に、それを処理対象から除外するためのものです(当然、フォルダを画像ファイルとして開く事はできません)。 後半の条件は、フォルダ内の色々なファイルの中で、PNG形式かJPEG形式の画像ファイルだけを処理対象に含めるためのもので、拡張子の一致確認( .png か .jpg なら通す)をしています。 このように、文字列に対して複数通りの一致確認をするには正規表現が便利で、 実際にこの条件「 .(png|jpg) 」も正規表現で書いてあります ( checkText 関数の最後の引数に渡している END_PATTERNは、文字列の終端に対して正規表現でパターンマッチ判定するオプションです )。

if 文の { 〜 } の内側は、処理対象ファイルに対して行う処理が書かれています。 まず出力ファイル名とそのフルパスを用意した上で、 ユーザーが処理結果を確認しやすいように、処理対象ファイルの入出力先パスを println関数で画面上に表示しています。

そして、引数に処理対象ファイルの入出力先パスを渡して、processFile 関数を呼び出しています。 これもこのコード内で宣言されている関数で、詳しくはすぐ後で説明しますが、このツールの中核である、画像ファイルの内容を切り抜いて保存する処理を行います。

processAllFiles 関数の中身は以上です。 つまるところ、このプログラムの流れとしては、入力先フォルダ内の全ファイルに対して、処理対象ファイルかどうかを確認し、 もしそうであれば、そのファイルに processFile 関数の処理を適用する、という具合になっています。

画像ファイル1個を読み込み、内容を切り抜いて保存する processFile 関数

それでは最後に、肝心の processFile 関数の中身を見てみましょう。 この関数は、引数 inputFilePath に入力ファイルのパス、outputFilePath に出力ファイルのパスを受け取ります。 そして、入力ファイルを画像ファイルとして開いて、内容を切り抜き、 それを出力ファイルパスの場所に、PNG形式またはJPEG形式の画像ファイルとして保存します。

なお、この関数は、画像の矩形(四角形)領域を切り抜く簡易ツール の回のコードで行った処理をまとめたものです。詳しい説明については、そちらをご参照ください。 フルで説明するとここだけで結構長くになってしまうので、以下では要点をピックアップして見ていきます。

まずは、引数に受け取った画像ファイルのパス inputFilePath を newGraphics 関数の引数に渡していますが、 これによってファイルが画像として開かれ、その内容を保持するグラフィックスデータが生成されます。 要するに画像データがメモリー上に展開されます。

この newGraphics 関数は、生成したグラフィックスデータにID番号を割りふって返すので、その値をint型変数の inputGraphics に控えています。 このIDは、複数のグラフィックスデータを区別するのに使用します(実際に後で、内容を切り抜いた別のグラフィックスデータを生成します)。

続いて、このツールの要の処理である、画像の切り抜きを行っている部分です。 と言っても以下の通り、少し多い引数で newGraphics 関数を呼んでいるだけです。

この引数の組み合わせで newGraphics 関数を呼ぶと、 既にあるグラフィックスデータから、 矩形(四角形)領域の内側の内容のみを保持するグラフィックスデータを生成してくれます。 最初の引数(inputGraphics)に元のグラフィックスデータのIDを渡します。 その後に続けて、矩形領域の左上端のXとY値を渡し、 さらに後に続けて、矩形領域の幅と高さを渡します。

この関数は、生成した新しいグラフィックスデータにID番号を割りふって返すので、 それをint型変数 outputGraphics に控えています(ファイルの保存の際に使います)。

あとは、生成した(切り抜いた領域の内容を保持する)グラフィックスデータの内容を画像ファイルとして保存した上で、 グラフィックスデータを破棄して終了です。

と、以上の通り説明した processFile 関数内の処理が、フォルダ内の全ての画像ファイルに対して(processAllFiles関数内のループから呼び出される事によって)実行されます。 全画像ファイルに対して処理が終わると、processAllFiles関数のループを抜けて、main 関数の終端に達し、全体の処理は終了します。

( ただし、プログラムを終了させる exit 関数などは呼んでいないので、その後もユーザーがコンソール画面を手動で閉じるまでは、プログラムは「何もしない」状態で待機し続けます。 これは、処理された画像ファイルの一覧を、ユーザーがコンソール画面上でゆっくり確認できるように、あえてそうしています。)

コード内容は以上です。

ライセンス

このVCSSL/Vnanoコード( 拡張子が「.vcssl」や「.vnano」のファイル )は実質的な著作権フリー(パブリックドメイン) である CC0 の状態で公開しています。 記事中にC言語/C++/Java言語などでのサンプルコードが掲載されいてる場合は、それらについても同様です。 そのままでのご利用はもちろん、改造や流用などもご自由に行ってください。

※ ただし、このコードの配布フォルダ内には、ダウンロード後すぐに実行できるように、 VCSSLの実行環境も同梱されており、そのライセンス文書は「 License 」フォルダ内に同梱されています (要約すると、商用・非商用問わず自由に使用できますが、使用の結果に対して開発元は一切の責任を負いません、といった具合の内容です)。 配布フォルダ内の各構成物の一覧やライセンスについては「 ReadMe_使用方法_必ずお読みください.txt 」をご参照ください。

※ Vnano の実行環境については、別途スクリプトエンジンのソースコードも一般公開しており、 何らかのソフトウェア内に組み込んでご利用いただく事も可能です。詳細はこちらをご参照ください。

この記事中の商標などについて

  • OracleとJavaは、Oracle Corporation 及びその子会社、関連会社の米国及びその他の国における登録商標です。文中の社名、商品名等は各社の商標または登録商標である場合があります。
  • Windows は、米国 Microsoft Corporation の米国およびその他の国における登録商標です。この記事は独立著作物であり、Microsoft Corporation と関連のある、もしくはスポンサーを受けるものではありません。
  • Linux は、Linus Torvalds 氏の米国およびその他の国における商標または登録商標です。
  • その他、文中に使用されている商標は、その商標を保持する各社の各国における商標または登録商標です。


スポンサーリンク



[ 前へ | 目次 | 次へ ]
画像を任意サイズに拡大・縮小する簡易ツール(複数ファイル一括処理版)

フォルダ内にある全ての画像ファイルを開き、任意のサイズに拡大・縮小して、別のフォルダに保存する簡易ツールです。
画像を任意サイズに拡大・縮小する簡易ツール

画像ファイルを開き、任意のサイズに拡大・縮小して、別名で保存する簡易ツールです。
画像の矩形(四角形)領域を切り抜く簡易ツール(複数ファイル一括処理版)

フォルダ内にある全ての画像ファイルを開き、その中の矩形(四角形)領域を切り抜いて、別のフォルダに保存する簡易ツールです。
画像の矩形(四角形)領域を切り抜く簡易ツール

画像ファイルを開き、その中の矩形(四角形)領域を切り抜いて保存する簡易ツールです。
連番画像をアニメーション再生する簡易ツール

フォルダ内の連番画像ファイルを、動画への変換不要で、そのままアニメーションとして再生できる簡易ツールです。
条件を満たす色を透明にする簡易ツール(複数ファイル一括処理版)

フォルダ内の全画像ファイルに対して、条件を満たす範囲の色を透明に置き換え、別のフォルダに保存する簡易ツールです。
特定の色を透明にする簡易ツール(複数ファイル一括処理版)

フォルダ内にある全てのPNG形式画像ファイルを開き、特定の色を透明に置き換えた上で、別のフォルダに保存する簡易ツールです。
条件を満たす色を透明にする簡易ツール

画像ファイルを開き、指定された条件を満たす色を透明に置き換えて保存する簡易ツールです。
特定の色を透明にする簡易ツール

画像ファイルを開き、特定の色を透明に置き換えて保存する簡易ツールです。
2DCGと3DCGの合成

2DCGと3DCGを一枚に合成し、画面に表示するプログラムの例です。
RGBやカラーコードの色表示と相互変換ができる簡易ツール

RGB値とカラーコードから、GUI画面上で色の表示や相互変換を行う事ができる簡易ツールです。
頂点配列によるモデルの変形アニメーション

頂点配列によってモデルを変形アニメーションさせるサンプルです。
頂点配列によるモデルの作成(四角形格子メッシュ形式)

四角形格子メッシュの形式で、頂点配列からモデルを作成するサンプルです。
この階層の目次
[ 前へ | 目次 | 次へ ]
お知らせ

各ソフトウェアをアップデート、リニアングラフのコマンド拡張やVCSSLの英語対応など
2024/02/05 - 各ソフトの一斉アップデートの内容をお知らせします。今回は、リニアングラフのコマンド機能を大幅拡張したのがメインです。また、VCSSLのメッセージ類の英語対応も行いました。

Vnano の Ver.1.1 で実装した反復計算高速化の内側
2024/01/17 - 前回のお知らせ記事の続編です。スクリプトエンジン Vnano の Ver.1.1 において実施した高速化を、エンジン内部の実装面から掘り下げて解説します。

スクリプトエンジン Vnano の Ver.1.1 を公開、同じ内容の反復実行が劇的に高速化
2023/12/22 - スクリプトエンジン Vnano の最新版を公開しました。同じ計算式やスクリプトを反復実行する速さが、大幅に向上しました。次期版リニアングラフ3D内での活用例を交えつつ、詳しく解説します。

新着
[公式ガイドサンプル] 各種の図形や画像を描画する

「VCSSL 2DCG開発ガイド」内のサンプルコードです。図形や画像などを描画します。
2022-12-16
角度の「度」とラジアンとを相互変換し、図示もするツール

45度などの「度」の値と、ラジアンの値とを相互に変換できるツールです。対応する角度の図示もできます。
2022-11-22
[公式ガイドサンプル] 立体モデルを回転させるアニメーション

「VCSSL 3DCG開発ガイド」内のサンプルコードです。立体モデルを、アニメーションで回転させ続けます
2022-11-18
[公式ガイドサンプル] 立体モデルを回転させる

「VCSSL 3DCG開発ガイド」内のサンプルコードです。立体モデルを、指定した角度だけ回転させます。
2022-11-17
[公式ガイドサンプル] 四則演算の計算順序や、カッコを使った順序指定

「VCSSLスタートアップガイド」内のサンプルコードです。四則演算が計算される順序や、カッコを使って順序を指定する方法を例示します。
2022-10-31