在Azure函数上使用ImageMagick或GraphicsMagick

我正在尝试查看我的公司是否可以使用Azure函数将TIFF文件的转换自动转换为多种JPG和PNG格式和大小。 我使用Node.js函数,但也可以使用其他语言。

我的问题是,我无法得到GraphicsMagick或ImageMagickfunction。 我使用正常的程序安装使用npm安装

它似乎安装好,模块也似乎加载,但是当我尝试处理文件时没有任何反应。 没有什么,也没有错误。

var fs = require('fs'); var gm = require('gm');

module.exports = function(context,req){context.log('Start …');

try { context.log('Looking for GM...'); context.log(require.resolve("gm")); } catch(e) { console.log("GM is not found"); process.exit(e.code); } gm('D:/home/site/wwwroot/HttpTriggerJS1/input/870003-02070-main-nfh.jpg') .resize(240, 240) .noProfile() .write('D:/home/site/wwwroot/HttpTriggerJS1/output/resize.jpg', function (err) { context.log('TEST'); if (!err) { context.log('done'); } } ); context.done(null, res); }; 

我不确定这是甚至可能的,但我还没有发现任何信息说明它不能

那么,我可以在函数中使用ImageMagick,GraphicsMagick或第三个图像转换器吗? 如果是的话,有什么特别的,我需要在安装时注意?

Azure中的Web应用程序是一种SaaS(软件即服务)。 您将自己的位部署到Azure IIS容器,Azure完成剩下的工作。 我们没有太多的控制。 因此,我们无权在Azurefunction应用程序(例如ImageMagick或GraphicsMagick)上安装任何第三方可执行文件。 如果您需要这样做,请查看虚拟机。 另一种select是使用云服务的Web或工作者angular色。

另外,还有一个完全用JavaScript编写的用于Node的良好image processing库,具有零外部或本地依赖性,Jimp。 https://github.com/oliver-moran/jimp

用法示例:

 var Jimp = require("jimp"); Jimp.read("lenna.png").then(function (lenna) { lenna.resize(256, 256) // resize .quality(60) // set JPEG quality .greyscale() // set greyscale .write("lena-small-bw.jpg"); // save }).catch(function (err) { console.error(err); }); 

还有另一个名为sharp的 node.js库来实现您的要求。 你可以试试这个方法:

首先,将sharp安装在本地环境中,然后使用包含已编译模块的node_modules文件夹将应用程序部署到Azure。 最后,将Azure App Service上的节点可执行文件升级到64位。

类似的线程你可以参考这里 。

用法示例:

 var sharp = require("sharp"); sharp(inputBuffer) .resize(320, 240) .toFile('output.webp', (err, info) => { //... });