在 Azure Functions 上使用 ImageMagick 或 GraphicsMagick
Using ImageMagick or GraphicsMagick on Azure Functions
我想看看我的公司是否可以使用 Azure Functions 自动将 TIFF 文件转换为多种 JPG 和 PNG 格式和大小。我在 Node.js 中使用 Functions,但也可以使用其他语言。
我的问题是,我无法让 GraphicsMagick 或 ImageMagick 处理函数。我使用正常的安装程序使用 npm install。
似乎安装正常,模块似乎也加载了,但是当我尝试处理文件时没有任何反应。没有,因为也没有错误。
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); };
我什至不确定这是否可能,但我还没有找到任何信息表明它不能。
那么,我可以在 Functions 中使用 ImageMagick、GraphicsMagick 或第三方图像转换器吗?如果是,安装时有什么特别需要注意的吗?
还有 C# 解决方案吗?
Azure 中的 Web 应用程序是一种 SaaS(软件即服务)。您将您的位部署到 Azure IIS 容器,Azure 会完成剩下的工作。我们没有太多的控制权。
因此,我们将无权在 Azure Functions App(例如 ImageMagick 或 GraphicsMagick)上安装任何第 3 方可执行文件。如果您需要这样做,请查看虚拟机。另一种选择是使用 Cloud Services 的 Web 或 Worker Role。
或者,有一个很好的 Node 图像处理库,完全用 JavaScript 编写,零外部或本机依赖性,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) => {
//...
});
您可以使用站点扩展使 imagemagick 为 azure web 应用程序工作。
您可以查看存储库以获取更多信息:https://github.com/fatihturgut/azure-imagemagick-nodejs
Azure 函数还可以 运行 自定义 docker 图像
https://docs.microsoft.com/en-us/azure/azure-functions/functions-create-function-linux-custom-image
不确定您对哪种语言感兴趣,但您可以使用以下样式的 python 图像 Dockerfile
FROM mcr.microsoft.com/azure-functions/python:2.0
RUN apt-get update && \
apt-get install -y --no-install-recommends apt-utils && \
apt-get install -y imagemagick
ENV AzureWebJobsScriptRoot=/home/site/wwwroot \
AzureFunctionsJobHost__Logging__Console__IsEnabled=true
COPY . /home/site/wwwroot
RUN cd /home/site/wwwroot && \
pip install -r requirements.txt
然后使用 PythonMagick 来处理相同的
我想看看我的公司是否可以使用 Azure Functions 自动将 TIFF 文件转换为多种 JPG 和 PNG 格式和大小。我在 Node.js 中使用 Functions,但也可以使用其他语言。
我的问题是,我无法让 GraphicsMagick 或 ImageMagick 处理函数。我使用正常的安装程序使用 npm install。
似乎安装正常,模块似乎也加载了,但是当我尝试处理文件时没有任何反应。没有,因为也没有错误。
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); };
我什至不确定这是否可能,但我还没有找到任何信息表明它不能。
那么,我可以在 Functions 中使用 ImageMagick、GraphicsMagick 或第三方图像转换器吗?如果是,安装时有什么特别需要注意的吗?
还有 C# 解决方案吗?
Azure 中的 Web 应用程序是一种 SaaS(软件即服务)。您将您的位部署到 Azure IIS 容器,Azure 会完成剩下的工作。我们没有太多的控制权。 因此,我们将无权在 Azure Functions App(例如 ImageMagick 或 GraphicsMagick)上安装任何第 3 方可执行文件。如果您需要这样做,请查看虚拟机。另一种选择是使用 Cloud Services 的 Web 或 Worker Role。
或者,有一个很好的 Node 图像处理库,完全用 JavaScript 编写,零外部或本机依赖性,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) => {
//...
});
您可以使用站点扩展使 imagemagick 为 azure web 应用程序工作。
您可以查看存储库以获取更多信息:https://github.com/fatihturgut/azure-imagemagick-nodejs
Azure 函数还可以 运行 自定义 docker 图像
https://docs.microsoft.com/en-us/azure/azure-functions/functions-create-function-linux-custom-image
不确定您对哪种语言感兴趣,但您可以使用以下样式的 python 图像 Dockerfile
FROM mcr.microsoft.com/azure-functions/python:2.0
RUN apt-get update && \
apt-get install -y --no-install-recommends apt-utils && \
apt-get install -y imagemagick
ENV AzureWebJobsScriptRoot=/home/site/wwwroot \
AzureFunctionsJobHost__Logging__Console__IsEnabled=true
COPY . /home/site/wwwroot
RUN cd /home/site/wwwroot && \
pip install -r requirements.txt
然后使用 PythonMagick 来处理相同的