2016-11-17 4 views
2

내 회사에서 Azure 함수를 사용하여 TIFF 파일을 여러 JPG 및 PNG 형식 및 크기로 자동 변환 할 수 있는지 확인하려고합니다. Node.js에서 Functions를 사용하고 있지만 다른 언어를 사용할 수도 있습니다.Azure 함수에서 ImageMagick 또는 GraphicsMagick 사용

제 문제는 GraphicsMagick 또는 ImageMagick이 함수에서 작동하지 않는다는 것입니다. 나는 npm을 사용하여 정상적인 절차를 사용하여을 설치합니다.

설치가 잘되는 것처럼 보이며 모듈도로드하는 것처럼 보이지만 파일을 처리하려고하면 아무 일도 발생하지 않습니다. 아무런 오류없이 마찬가지입니다.

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

module.exports = function (context, req) { context.log ('시작 ...');

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 또는 세 번째 이미지 변환기를 사용할 수 있습니까? 그렇다면 설치할 때 알아야 할 특별한 것이 있습니까?

답변

1

Azure의 웹 앱은 SaaS (Software as a Service)입니다. Azure IIS 컨테이너에 비트를 배포하면 Azure가 나머지 작업을 수행합니다. 우리는 많은 통제력을 갖지 못합니다. Azure Functions App (예 : ImageMagick 또는 GraphicsMagick)에 타사 실행 파일을 설치할 수있는 권한이 없습니다. 그렇게해야한다면 가상 머신을 살펴보십시오. 또 다른 옵션은 클라우드 서비스의 웹 또는 작업자 역할을 사용하는 것입니다.

다른 방법으로는 외부 또는 네이티브 종속 Jimp가없는 JavaScript 용으로 작성된 Node 용 이미지 처리 라이브러리가 있습니다. 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를 도서관이 있습니다. 다음과 같이 시도하십시오 :

먼저 로컬 환경에 샤프를 설치 한 다음 컴파일 된 모듈이 들어있는 node_modules 폴더를 사용하여 응용 프로그램을 Azure에 배포하십시오. 마지막으로, Azure App Service의 노드 실행 파일을 64 비트로 업그레이드하십시오.

비슷한 스레드는 here을 참조 할 수 있습니다.

사용 예제 :

var sharp = require("sharp"); 

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

예, 나는 또한 당신이 푸른 기능에 대한 실행 파일을 설치할 수없는 곳 읽기 ...하지만 어쨌든 그것을 시도, 그것은 작동한다! GraphicsMagick을 폴더에 설치하고 GraphicsMagick의 자식 프로세스를 실행하고 실제로 원하는 파일을 변환합니다. 이 버그입니까, 아니면 의도 한대로 사용합니까? 나는 또한 Jimp를 보았지만, TIFF를 변환 할 수는 없다. 그것은 불행히도 거래 차단기이다. –

+0

안녕하세요 @MortenHansen, 내 답장을 업데이트했습니다. –