Skip to content

Instantly share code, notes, and snippets.

@rijkerd
Last active June 2, 2023 21:46
Show Gist options
  • Save rijkerd/80b77145ca3f7c8f256d5835c7f282b5 to your computer and use it in GitHub Desktop.
Save rijkerd/80b77145ca3f7c8f256d5835c7f282b5 to your computer and use it in GitHub Desktop.
Get dimension of an image object uploaded to firebase storage
const functions = require('firebase-functions');
const mkdirp = require('mkdirp-promise');
const admin = require('firebase-admin');
const { execFile } = require('child-process-promise');
const path = require('path');
const os = require('os');
const fs = require('fs');
admin.initializeApp();
exports.getImageDimensions = functions.storage
.object()
.onFinalize(async object => {
// File and directory paths.
const { name: filePath, contentType } = object;
console.log(object);
const tempLocalFile = path.join(os.tmpdir(), filePath);
const tempLocalDir = path.dirname(tempLocalFile);
// Exit if this is triggered on a file that is not an image.
if (!contentType.startsWith('image/')) {
return console.log('This is not an image.');
}
// Cloud Storage files.
const bucket = admin.storage().bucket(object.bucket);
const file = bucket.file(filePath);
// Create the temp directory where the storage file will be downloaded.
await mkdirp(tempLocalDir);
// Download file from bucket.
await file.download({ destination: tempLocalFile });
console.log('The file has been downloaded to', tempLocalFile);
// Get Dimensions of the image
const { stdout } = await execFile(
'identify',
['-format', '%wx%h', tempLocalFile],
{
capture: ['stdout', 'stderr'],
}
);
const [height, width] = stdout.split('x');
console.log(`Height:${height}Width:${width}`);
fs.unlinkSync(tempLocalFile);
return console.log('Done');
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment