⚙️
Google Apps Script(GAS) で画像をリサイズする
はじめに
GAS で Google Drive 上の画像をリサイズする機会があったので、実装をメモ書きとして残しておきます。
今回こちらのライブラリを使用しました。
ライブラリの導入方法はREADMEをご覧ください。
リサイズの実装
Google Drive 上の画像サイズを直接書き換えることは出来ないので、リサイズされた画像を新規作成し保存します。
function doResize(fileId) {
// 対象のファイルをリサイズ(width=40)
const res = ImgApp.doResize(fileId, 40);
// リサイズ後の画像を保存するフォルダを指定
const folderId = "xxxx";
const folder = DriveApp.getFolderById(folderId);
// 画像ファイルを新規作成
const uuid = Utilities.getUuid();
const file = folder.createFile(res.blob.setName(uuid));
}
スプレッドシート上の画像をリサイズして置き換える例
GAS で画像をリサイズするユースケースとして、
「Google Form でアップロードされた画像のサイズを揃える」
という実装例を紹介します。
方針
Google Form でアップロードされた画像は Google Drive 上に保存され、その URL がセルの値として登録されます。
前述のように、Google Drive 上の画像サイズを直接書き換えることは出来ないので、リサイズされた画像の URL と元の URL を置き換えます。
実装
function parseQuery(url) {
const query = url.split("?")[1];
return query
? query.split("&").reduce((acc, item) => {
const [key, value] = item.split("=");
acc[key] = value;
return acc;
}, {})
: {};
}
function getResizedFileId(fileId) {
const res = ImgApp.doResize(fileId, 40);
const folderId = "xxx";
const folder = DriveApp.getFolderById(folderId);
const uuid = Utilities.getUuid();
const file = folder.createFile(res.blob.setName(uuid));
return file.getId();
}
function doResize() {
const SHEET_NAME = "sheet1";
const COLUMN_NAME = "プロフィール画像";
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(SHEET_NAME);
const lastRow = sheet.getLastRow();
const rows = sheet.getDataRange().getValues();
const keys = rows.splice(0, 1)[0];
const targetIdx = keys.indexOf(COLUMN_NAME) + 1;
for (let i = 2; i <= lastRow; i++) {
const cell = sheet.getRange(i, targetIdx);
const value = cell.getValue();
// Google Form回答でアップロードされた画像のurlの書式は https://drive.google.com/open?id=[id]
const fileId = parseQuery(value)["id"];
// リサイズした画像を生成
const resizedFileId = getResizedFileId(fileId);
const url = "https://drive.google.com/uc?id=" + resizedFileId;
// スプレッドシートの値を書き換える
cell.setValue(url);
}
}
実行結果
-
実行前
-
実行後
Discussion