使用GraphicsMagick输出多个文件

时间:2014-05-27 10:56:39

标签: javascript node.js express graphicsmagick

我有以下功能设置,它捕获上传的图像,转换它们并将它们写入服务器。如何重命名转换后的文件?

目前,此功能会获取上传的图片并保存一个版本的图片。

目标:

  • 根据图片大小保存上传图片的多个版本。
  • 使用图像大小附加文件名,例如。 filename-400x400.jpg,filename-200x200.jpg

我不太确定如何去做第一个和第二个,我认为busboy正在干扰它,因为下面函数中的filename包括扩展。我需要能够在扩展名之前附加大小的文件名。这可以用正则表达式完成吗?

功能:

// upload new user image
    app.post('/api/users/user/upload_image', function (req, res) {
        req.pipe(req.busboy);
        req.busboy.on('file', function (fieldname, file, filename) {

            console.log('\n\nUploading file: '.underline +filename .underline);
            console.log('Uploaded\nConverting...');
            var size = { width: 200, height: 200 };

            gm(file,'www/uploads/' + filename)
            .resize(size.width * 2, (size.height * 2) + '')
            .thumbnail(size.width, size.height + '^')
            .gravity('Center')
            .extent(size.width, size.height)
            .file(filename)
            .profile('*')
            .write('www/uploads/' + filename, function (err) {
                console.log("Success!".bold);
            });

        });

        req.busboy.on('finish', function () {
            res.writeHead(303, { Connection: 'close', Location: '/' });
            res.end();
        });
    });

1 个答案:

答案 0 :(得分:1)

就创建多个文件而言,您可以只复制已经使用的gm链,只需使用不同的文件名。

对于文件名问题,您可以创建自己的文件名,也可以使用正则表达式将维度插入原始文件名。后者你可以使用类似的东西:

// changes "foo.jpg" to "foo-400x400.jpg"
filename.replace(/\.[^\.]+$/, '-400x400$&')