1

多くのソリューションは、mogrifyを使用することを指しています。これは、Nodejsの実装の一部である場合にうまく機能します。画像のサイズを変更してファイル名を保持するだけですが、それらを別の「サイズ変更された」フォルダーに配置します。これが私がここで行っていることです(coffeescriptで、DocPad静的Webサイトジェネレーターのプラグインとして):

# 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の本格的なプラグインではなく、私たち自身の特定の用途のためにこれを書いていますが、うまく機能していれば、一般的な用途のために間違いなく変更できると思います。

助けてくれてありがとう!

ありがとう

4

1 に答える 1

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/内のサイズ変更された画像に置き換えるだけの場合は、次のサフィックスに空の文字列を定義するだけですdocpad.coffee

plugins:
  imagemagick:
    suffix: ""
    width: 300

または、プラグインの構成オブジェクトに設定するだけです。

于 2013-02-17T01:54:18.707 に答える