【问题标题】:Node ImageMagick resize doesn't preserve file name节点 ImageMagick 调整大小不保留文件名
【发布时间】:2013-01-29 16:29:59
【问题描述】:

很多解决方案都指向使用 mogrify,如果它是 Node js 实现的一部分,它会很好用。我需要做的就是调整图像大小并保留文件名,但将它们放在单独的“调整大小”文件夹中。这是我在这里所做的(在咖啡脚本中,作为 DocPad 静态网站生成器的插件):

# 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 插件,尽管我认为当它运行良好时,我们绝对可以修改它以供一般使用。

感谢您的帮助!

谢谢

【问题讨论】:

    标签: node.js image-processing imagemagick docpad node-imagemagick


    【解决方案1】:

    我这样修改了你的代码:

    # 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
    

    或者只是在插件的配置对象中设置它!

    【讨论】:

    • 太棒了,非常感谢佛法!我今晚应该有时间来测试一下。将其标记为完成后测试:)
    • 这非常有效。非常感谢您提供简单整洁的解决方案!
    猜你喜欢
    • 1970-01-01
    • 2014-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-02
    • 2020-01-27
    • 2013-08-28
    • 2014-09-07
    相关资源
    最近更新 更多