这是我第一次使用 Google 产品进行编程,所以请多多支持。
我创建了一个 Google 表单,它接受照片作为文件输入,并将它们放入 Google 云端硬盘中由表单响应确定的目标文件夹中。
我从这个资源开始:https://developers.google.com/apps-script/samples/automations/upload-files#code.gs
我当前的代码工作正常,将图像放置在正确的目标文件夹中。
我想将 .heic 文件转换为 .jpeg,以便所有设备都可以打开这些文件。我正在尝试使用函数 getAs("image/jpeg") 进行转换。
如果我省略 getAs() 函数,.heic 文件将被放置在正确的目标文件夹中。
当我使用 getAs() 函数时,.heic 文件被放置在默认的 Files(文件响应) 文件夹中,但不会创建 .jpeg,并且目标文件夹中也没有放置任何内容。
请注意,一旦我弄清楚如何做到这一点,我将使用 if/else 语句仅将转换应用于 .heic 文件。
预先感谢您的帮助!
...
function onFormSubmit(e) {
// Get the destination folder
var destFolder = folder_based_on_form_response; // this part works
// Get all form responses
let itemResponses = e.response.getItemResponses();
// Get the file upload response as an array to allow for multiple files
let fileUploads = itemResponses.filter((itemResponse) => itemResponse
.getItem().getType().toString() === "FILE_UPLOAD")
.map((itemResponse) => itemResponse.getResponse())
.reduce((a, b) => [...a, ...b], []);
// Move the files to the destination folder
if (fileUploads.length > 0) {
fileUploads.forEach((fileId) => {
DriveApp.getFileById(fileId).getAs("image/jpeg").moveTo(destFolder);
});
}
}
...
最佳答案
我相信您的目标如下。
- 您想要通过修改脚本将
.heic
格式转换为 Jpeg 格式。
既然如此,下面的修改如何?在本次修改中,使用以下流程。
- 检测
.heic
文件。 - 将
.heic
格式转换为 PNG 格式。 - 将 PNG 格式转换为 JPEG 格式。
- 在目标文件夹中以 JPEG 格式创建图像数据作为文件。
修改后的脚本:
来自:
if (fileUploads.length > 0) {
fileUploads.forEach((fileId) => {
DriveApp.getFileById(fileId).getAs("image/jpeg").moveTo(destFolder);
});
}
致:
if (fileUploads.length > 0) {
fileUploads.forEach((fileId) => {
const file = DriveApp.getFileById(fileId);
const name = file.getName();
const mimeType = file.getMimeType();
if (name.includes("heic") || name.includes("heif") || mimeType == "image/heic") {
try {
const url = `https://drive.google.com/thumbnail?id=${fileId}&sz=w1000`;
const blob = UrlFetchApp.fetch(url, { headers: { authorization: "Bearer " + ScriptApp.getOAuthToken() } }).getBlob().getAs("image/jpeg");
destFolder.createFile(blob.setName(name.split(".")[0] + ".jpg"));
// file.setTrashed(true); // If you want to remove the original file, please use this.
} catch (e) {
console.log(e); // If an error occurs, you can see it in the log.
}
} else {
file.moveTo(destFolder); // or file.getAs("image/jpeg").moveTo(destFolder);
}
});
}
- 当文件为
.heic
文件时运行此脚本,.heic
文件将转换为 Jpeg 格式并移至目标文件夹。
注意:
- 当我使用示例
.heic
文件测试此脚本时,没有发生错误。.heic
文件可以转换为 Jpeg 格式并移动到目标文件夹。但是,如果您的.heic
文件是无法转换的文件,则会发生错误。请小心这一点。 - 此脚本需要一个“On Form Submit”可安装触发器。
关于google-apps-script - 如何使用 Google Apps 脚本将 .heic 从 Google 表单转换为 .jpeg,然后上传到 Google 云端硬盘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76623974/