我想利用Cloud Functions for Firebase在上传时调整图片大小并覆盖原始图片,因此每次上传只有一个图片。
此外,我不想创建具有指定宽度和高度的图像,而是希望ImageMagick根据给定的宽度调整大小,例如800px。
我已经查看了Firebase ImageMagick示例,以便在上传时创建缩略图作为开始,但我看不到如何修改它以满足此需求。我真的很感激如何实现这一目标。
编辑:以下是我在Firebase示例中使用的代码(https://github.com/firebase/functions-samples/blob/master/quickstarts/thumbnails/functions/index.js)
// Download file from bucket.
const bucket = gcs.bucket(fileBucket);
const tempFilePath = `/tmp/${fileName}`;
return bucket.file(filePath).download({
destination: tempFilePath
}).then(() => {
console.log('Image downloaded locally to', tempFilePath);
// Generate a thumbnail using ImageMagick.
return spawn('convert', [tempFilePath, '-thumbnail', '200x200>', tempFilePath]).then(() => {
console.log('Thumbnail created at', tempFilePath);
// We add a 'thumb_' prefix to thumbnails file name. That's where we'll upload the thumbnail.
const thumbFilePath = filePath.replace(/(\/)?([^\/]*)$/, '$1thumb_$2');
// Uploading the thumbnail.
return bucket.upload(tempFilePath, {
destination: thumbFilePath
});
});
});
答案 0 :(得分:2)
当您使用缩略图覆盖原始文件路径时,可以使用自定义元数据而不是“thumb_”前缀来避免函数循环:
const filePath = event.data.name
const metadata = event.data.metadata
if (metadata.isThumb) {
console.log('Exiting: Already a thumbnail')
return
}
您只需在spawn
完成大小调整后设置它:
return spawn(/* ... */)
}).then(_ => {
metadata.isThumb = true // We add custom metadata
const options = {
destination: filePath, // Destination is the same as original
metadata: { metadata: metadata }
}
// Overwrite the original path
return bucket.upload(/* localThumb */, options)
})
答案 1 :(得分:0)
在imagemagick中,你可以通过
完成convert inputimage -resize 800x outputimage
没有指定高度且只有宽度800和“x”,它会将宽度转换为800并使高度达到预设的宽高比。
抱歉,我不知道Firebase。