1

許多解決方案都指向使用mogrify,如果它是Node js實現的一部分,這將很有用。我需要做的只是調整圖像大小並保留文件名,但將它們放在單獨的「調整大小」文件夾中。這是我在這裏做什麼(在CoffeeScript中,作爲DocPad靜態網站生成一個插件):節點ImageMagick調整大小不保留文件名

# Export Plugin 
module.exports = (BasePlugin) -> 

    im = require 'imagemagick' 

    # Define Plugin 
    class ImageMagickPlugin extends BasePlugin 

     # Plugin name 
     name: 'imagemagick' 

     im.resize 
     srcPath: './src/files/images/source/*.jpg' 
     dstPath: "./src/files/images/resized/.jpg" 
     width: 256 
     , (err, stdout, stderr) -> 
     throw err if err 
     console.log "resized some files to fit within 256" 

的結果是,我的圖像正確調整大小,並放置在正確的文件夾,但它們的名稱是「-0.jpg,-1.jpg,-2.jpg」等等。我真的寫這是爲了我們自己的具體使用,而不是DocPad的一個嚴肅的插件,但我認爲當它運行良好時,我們可以絕對修改它以供一般使用。

我感謝任何幫助!

感謝

回答

0

我修改你的代碼是這樣的:

# Export Plugin 
module.exports = (BasePlugin) -> 

    im = require('imagemagick') 

    # Define Plugin 
    class ImageMagickPlugin extends BasePlugin 
    # Plugin name 
     name: 'imagemagick' 
     config: 
     source: "images" 
     suffix: "_resized" 
     width: 256 

     writeAfter: (opts,next) -> 
     docpad = @docpad 
     config = @config 
     docpad.getDatabase().forEach (document) -> 
      attr = document.attributes 
      if attr.extension is 'jpg' and attr.relativeDirPath is config.source 
      srcPath = './src/files/' + attr.relativePath 
      dstPath = './out/' + config.source + "/" + attr.basename + config.suffix + ".jpg" 
      im.resize 
       srcPath: srcPath 
       dstPath: dstPath 
       width: config.width 
      , (err, stdout, stderr) -> 
       throw err if err 
       console.log "File resized: " + attr.filename 
     next() 

這樣,你遍歷文件尋找./src/files/images/ JPG文件,你寫的大小版本直接在./out/images/中修改後的名稱:foo.jpg在foo_resized.jpg中調整大小。通過這樣做,你不會「污染」你的src文件。

如果你只是想在./out/images/的調整那些替換源圖像,你可以簡單地在​​定義爲後綴一個空字符串:

plugins: 
    imagemagick: 
    suffix: "" 
    width: 300 

或只是將其設置成插件的配置對象!

+0

太棒了,非常感謝你的佛法!今晚我應該有一段時間來測試一下。將此標記爲完成後測試:) – 2013-02-18 20:38:41

+0

這工作完美。非常感謝您的簡單和整潔的解決方案! – 2013-02-25 23:59:45