coding Shift_JIS; // 文字コードの明示(文字化け予防) import Graphics; // 画像処理に必要なライブラリの読み込み import File; // ファイルやフォルダの情報を扱うライブラリの読み込み import Text; // 文字列の操作や判定などに必要なライブラリの読み込み // 入出力フォルダのパスのデフォルト値 const string DEFAULT_INPUT_DIRECTORY = "./input"; const string DEFAULT_OUTPUT_DIRECTORY = "./output"; // 高さの設定モードの選択肢 const string HEIGHT_MODE_MANUAL = "高さの値を手動で設定"; const string HEIGHT_MODE_AUTO = "縦横比が同じになる高さに設定"; // 出力画像の幅をユーザーに入力してもらう int outputWidth = input("拡大・縮小後の画像の幅(ピクセル数)を入力:", 100); // 高さの設定モードをユーザーに選択してもらう string heightMode = select("- 高さの設定モードを選択 -", HEIGHT_MODE_MANUAL, HEIGHT_MODE_AUTO); while (heightMode == "- 高さの設定モードを選択 -") { heightMode = select("- 高さの設定モードを選択 -", HEIGHT_MODE_MANUAL, HEIGHT_MODE_AUTO); } // 高さを手動設定するモードが選択された場合は、高さの値をユーザーに入力してもらう //(自動設定するモードの場合は、高さの値は processFile 関数内で画像毎に求めて設定する) int outputHeight = -1; if (heightMode == HEIGHT_MODE_MANUAL) { outputHeight = input("拡大・縮小後の画像の高さ(ピクセル数)を入力:", 100); } // 保存画像形式などをユーザーに指定してもらう string saveFormat = select("- 保存する画像形式を選択 -", "PNG", "JPEG"); while (saveFormat == "- 保存する画像形式を選択 -") { saveFormat = select("- 保存する画像形式を選択 -", "PNG", "JPEG"); } float quality = 100.0; if (saveFormat == "JPEG") { quality = input("画質(%)を選択(0.0 〜 100.0)", "100.0"); } // ================================================== // 全体的な処理 - この関数は起動時に自動で実行されます // ================================================== void main () { // 入出力フォルダのフルパスを用意 string inputDirectoryPath = getFilePath(DEFAULT_INPUT_DIRECTORY); string outputDirectoryPath = getFilePath(DEFAULT_OUTPUT_DIRECTORY); // 入出力フォルダをデフォルトから変更するかユーザーに尋ね、必要なら変更 if (confirm("入力先/出力先フォルダを指定しますか?(「いいえ」でデフォルトの場所使用)")) { inputDirectoryPath = choose("入力先フォルダを選択", "."); outputDirectoryPath = choose("出力先フォルダを選択", "."); } // 入力先フォルダ内の全ファイルを処理し、出力先フォルダに保存 processAllFiles(inputDirectoryPath, outputDirectoryPath); // 完了メッセージをユーザーに表示 popup("完了しました。画面上のファイル一覧を確認の上、ウィンドウを閉じてください。"); } // ================================================== // フォルダ内の全ファイルを走査して処理する関数 // ================================================== void processAllFiles(string inputDirectoryPath, string outputDirectoryPath) { // 入力フォルダ内にあるファイル名の一覧とファイル個数を取得 string fileNames[] = listDirectory(inputDirectoryPath); int fileN = length(fileNames); // 入力フォルダ内にある個々のファイルについて処理 for (int i=0; i OUTPUT: " + outputFilePath); // 画像の拡大縮小と保存処理を実行 processFile(inputFilePath, outputFilePath); } } } // ================================================== // 画像ファイル1個を読み込み、拡大縮小して保存する関数 // ================================================== void processFile(string inputFilePath, string outputFilePath) { // 画像ファイルを開き、その内容を保持するグラフィックスリソースを生成 int inputGraphics = newGraphics(inputFilePath); // 高さを縦横比から自動設定するモードの場合は、高さを求めて outputHeight に代入(画像毎に変わる) if (heightMode == HEIGHT_MODE_AUTO) { // 元の画像の幅と高さを取得 int inputWidth = getGraphicsWidth(inputGraphics); int inputHeight = getGraphicsHeight(inputGraphics); // 指定された拡大・縮小後の幅を、元の画像の幅で割って拡大率を求める float magnification = (float)outputWidth / (float)inputWidth; // 元の画像の高さに拡大率をかけて、縦横比が保たれる拡大・縮小後の高さを求める outputHeight = (int)(inputHeight * magnification); // 注:グローバル変数に代入している } // inputGraphicsを拡大・縮小した、新しいグラフィックスデータを生成 int outputGraphics = newGraphics(inputGraphics, outputWidth, outputHeight, true); // trueは滑らかにするための指定 // 別のファイル名をつけて保存 exportGraphics(outputGraphics, outputFilePath, saveFormat, quality); // リソースを破棄 deleteGraphics(inputGraphics); deleteGraphics(outputGraphics); }