【GAS】画像のファイル形式を一括変換する(png/jpeg)
この記事では、Google Apps Script(GAS)で複数の画像ファイルの形式を一括で変換する(png→jpeg)方法を解説します。
単発での画像ファイル形式の変換(特定の画像ファイルを読み込んでGASで形式変換)するコードは下記で説明しているので、GASについてそもそもよくわからないという方は、まずはこちらをご覧ください。
またファイルの形式変換方法に関しては下記のようなことも行えます。
画像ファイル形式を一括変換する前の準備
画像を準備してGoogleドライブに保存する
GASが処理対象とできるように、自分のGoogleドライブのマイドライブにフォルダーを作成し、形式変換したい画像ファイルをまとめておきます。この記事ではpng→jpegの変換を扱うため、コードをコピペで実行したい方はpngファイルのアップをお願いします。
画像を一つ一つ読み込ませることもできますが、ファイルが一つのフォルダにまとまっていると、フォルダを指定してGASの処理を実行することで、フォルダ内の画像を自動的にすべて読み込ませることができるので便利です。
読み込み用と書き出し用のフォルダのIDをコピー
画像をアップロードした読み込み用フォルダに加え、わかり易い場所に書き出し用フォルダを用意し、それぞれのフォルダのIDをコピーします。
(ちなみに大量に画像ファイルがある場合、どれが変換前でどれが後かわからなくなるため、読み込み用と書き出し用のフォルダは別に分けておいたほうが後々楽です。)
フォルダのIDはURLの「…/folders/」に続く文字列です。下記画像を参照してください。
さてこれで前準備は整いました。エディターを開いて下記コードを実行しましょう。
サンプルコード
コード全体像
function myFunction(){
//folderのidを指定
const imId = '[ここにインポート用フォルダのID]';
const exId = '[ここにエクスポート用フォルダのID]';
//フォルダid(読み込み用)指定
let folder = DriveApp.getFolderById(imId);
//指定したフォルダ内のすべてのファイルをブジェクト化
let files = folder.getFiles();
//ファイル数分ループ
while (files.hasNext()) {
let png = files.next();
let jpeg = png.getAs(MimeType.JPEG);
DriveApp.getFolderById(exId).createFile(jpeg);
}
実行結果
実行後の書き出し用フォルダは下記のとおりになってました。無事すべてのpng画像ファイルがjpegファイルに変換されたようです。
それではコードを一つずつ解説していきます。
読み込み用と書き出し用のフォルダIDを格納
//folderのidを指定
const imId = '[ここにインポート用フォルダのID]';
const exId = '[ここにエクスポート用フォルダのID]';
画像ファイルの読み込み
DriveAppクラスのgetFolderByIdメソッドと上で指定した読み込み用フォルダIDを使って、画像ファイルをすべて読み込みます。
//フォルダid(読み込み用)指定
var folder = DriveApp.getFolderById(imId);
//指定したフォルダ内のすべてのファイルをオブジェクト化
var files = folder.getFiles();
上記はわかりやすくフォルダ指定とファイル読み込みを分けて記述していますが、もちろん<files = DriveApp.getFolderById(imId) .getFiles() >という連続した記述も可能です。
ちなみにファイルの読み込み順序は指定できませんが、最終更新日が新しい順に読み込んでいるそうです。処理する順序を細かく指定したい場合は一度読み込んでからソートしてください。
要素数分ループして処理を実行する
hasNext()メソッドは次の要素があればtrue、なければfalseを返すBoolean型の戻り値をもつメソッドで、next()メソッドは次の要素そのものを返します。これらを組み合わせて要素数分、各要素ごとに処理を実行します。
while (files.hasNext()) {
var png = files.next();
読み込み時点でファイルタイプをconsole.logすると、pngであることが確認できます。
//取得結果を出力
//getMimeType:ファイルのMIMEタイプ、getName:ファイルの名前、getUrl:ファイルのURL
console.log([png.getMimeType(),png.getName()]);
[ 'image/png', 'osechiryouri' ]
[ 'image/png', 'komainu' ]
[ 'image/png', 'ebisu' ]
jpegに変換して指定したフォルダに書き出し
getAsメソッドでファイル形式をマインタイプでjpegに指定します。サンプル<MimeType.JPEG>で指定していますが<'image/jpeg’>で指定しても問題ありません。
var jpeg = png.getAs(MimeType.JPEG);
DriveApp.getFolderById(exId).createFile(jpeg);
先程と同様にファイルタイプをconsole.logすると、jpegに変換されていることを確認できました。
console.log([jpeg.getContentType(),jpeg.getName()]);
[ 'image/jpeg', 'osechiryouri.jpg' ]
[ 'image/jpeg', 'komainu.jpg' ]
[ 'image/jpeg', 'ebisu.jpg' ]
まとめ
pngからjpegへのファイル変換を例に、Google Apps Script(GAS)で複数の画像ファイルの形式を一括で変換する方法を解説しました。
サンプルコードは意外とシンプルで、要素ループとフィアル変換さえ分かってしまえば理解には困らない内容かと思います。ぜひ参考にしてみてください!