我已經開始使用Cloud Functions for Cloudbase在圖像上傳到我的Firebase存儲時裁剪和調整多種尺寸。我使用了Firebase示例代碼來啓動我。使用ImageMagick命令。但是,我沒有得到工作。Cloud功能:裁剪圖像>調整大小以適應多種尺寸
我的目標是獲得功能,就像Wordpress一樣。上傳圖片x。做一個固定的比例作物。並調整到3種尺寸。
我現在已將代碼調整爲大中型圖片並將其上傳到我的存儲空間。任何人都有關於如何讓作物運作的方法?
這是到目前爲止我的代碼:
'use strict';
const functions = require(`firebase-functions`);
const mkdirp = require(`mkdirp-promise`);
const gcs = require(`@google-cloud/storage`)();
const spawn = require(`child-process-promise`).spawn;
const LOCAL_TMP_FOLDER = `/tmp/`;
// Thumbnail prefix added to file names.
const THUMB_PREFIX_LARGE = `large_`;
const THUMB_PREFIX_MEDIUM = `medium_`;
/**
* When an image is uploaded in the Storage bucket We generate a thumbnail automatically using
* ImageMagick.
*/
exports.generateThumbnail = functions.storage.object().onChange(event => {
const filePath = event.data.name;
const filePathSplit = filePath.split(`/`);
const fileName = filePathSplit.pop();
const fileDir = filePathSplit.join(`/`) + (filePathSplit.length > 0 ? `/` : ``);
const thumbFilePathLarge = `${fileDir}${THUMB_PREFIX_LARGE}${fileName}`;
const thumbFilePathMedium = `${fileDir}${THUMB_PREFIX_MEDIUM}${fileName}`;
const tempLocalDir = `${LOCAL_TMP_FOLDER}${fileDir}`;
const tempLocalFile = `${tempLocalDir}${fileName}`;
const tempLocalThumbFileLarge = `${LOCAL_TMP_FOLDER}${thumbFilePathLarge}`;
const tempLocalThumbFileMedium = `${LOCAL_TMP_FOLDER}${thumbFilePathMedium}`;
// Exit if this is triggered on a file that is not an image.
if (!event.data.contentType.startsWith(`image/`)) {
console.log(`This is not an image.`);
return;
}
// Exit if the image is already a thumbnail.
if (fileName.startsWith(THUMB_PREFIX_LARGE) || fileName.startsWith(THUMB_PREFIX_MEDIUM)) {
console.log(`Already a Thumbnail.`);
return;
}
// Exit if this is a move or deletion event.
if (event.data.resourceState === `not_exists`) {
console.log(`This is a deletion event.`);
return;
}
// Create the temp directory where the storage file will be downloaded.
return mkdirp(tempLocalDir).then(() => {
// Download file from bucket.
const bucket = gcs.bucket(event.data.bucket);
return bucket.file(filePath).download({
destination: tempLocalFile
}).then(() => {
console.log(`The file has been downloaded to`, tempLocalFile);
// Generate a LARGE thumbnail using ImageMagick.
return spawn(`convert`, [tempLocalFile, `-thumbnail`, `1200x800`, tempLocalThumbFileLarge]).then(() => {
console.log(`Thumbnail created at`, tempLocalThumbFileLarge);
// Uploading the large Thumbnail.
return bucket.upload(tempLocalThumbFileLarge, {
destination: thumbFilePathLarge
}).then(() => {
console.log(`Thumbnail uploaded to Storage at`, thumbFilePathLarge);
}).then(() => {
console.log(`The file has been downloaded to`, tempLocalFile);
// Generate a MEDIUM thumbnail using ImageMagick.
return spawn(`convert`, [tempLocalFile, `-thumbnail`, `600x400`, tempLocalThumbFileMedium]).then(() => {
console.log(`Thumbnail created at`, tempLocalThumbFileMedium);
// Uploading the medium Thumbnail.
return bucket.upload(tempLocalThumbFileMedium, {
destination: thumbFilePathMedium
}).then(() => {
console.log(`Thumbnail uploaded to Storage at`, thumbFilePathMedium);
});
});
});
});
});
});
});