2017-05-03 96 views
0

我已經開始使用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); 
      }); 
      }); 
     }); 
     }); 
    }); 
    }); 
}); 

回答

2

我固定它做同樣的方式這個。

return mkdirp(tempLocalDir).then(() => { 
    const bucket = gcs.bucket(event.data.bucket); 
    return bucket.file(filePath).download({ 
     destination: tempLocalFile 
    }).then(() => { 
     return spawn(`convert`, [`-define`, `jpeg:size=1200x800`, tempLocalFile, `-thumbnail`, `1200x800^`, `-gravity`, `center`, `-extent`, `1200x800`, tempLocalThumbFileLarge]).then(() => { 
     return bucket.upload(tempLocalThumbFileLarge, { 
      destination: thumbFilePathLarge 
     }).then(() => { 
      return spawn(`convert`, [`-define`, `jpeg:size=600x400`, tempLocalFile, `-thumbnail`, `600x400^`, `-gravity`, `center`, `-extent`, `600x400`, tempLocalThumbFileMedium]).then(() => { 
      return bucket.upload(tempLocalThumbFileMedium, { 
       destination: thumbFilePathMedium 
      }); 
      }); 
     }); 
     }); 
    }); 
    }); 
相關問題