Node.js에서 임의의 이미지에서 부드러운 부분을 자동으로 잘라냅니다.

임의의 이미지에서 부드러운 부분을 자동으로 잘라내는 스크립트 「smartcrop.js」 기사에서 smartcrop의 Node.js 버전을 사용해 보았습니다.

smartcrop-sharp 이라는 라이브러리를 사용합니다.

환경


  • Node.js 12.10.0
  • $ npm i sharp smartcrop-sharp
    

    코드



    코드도 간단합니다.

    app.js
    'use strict';
    
    const fs = require('fs');
    const sharp = require('sharp');
    const smartcrop = require('smartcrop-sharp');
    
    const main = (input, output, width=500, height=500) => {
        const body = fs.readFileSync(input);
        return smartcrop.crop(body, { width: width, height: height })
        .then(result => {
            const crop = result.topCrop;
            return sharp(body)
            .extract({ width: crop.width, height: crop.height, left: crop.x, top: crop.y })
            .resize(width, height)
            .toFile(output);
        });
    }
    
    //実行
    main('./input.png', './output.png').then();
    

    결과



    이런 느낌이 들었습니다. 이미지는 twilio 로고를 흉내내 쓴 사람입니다.

    원본 이미지




    반환 후 이미지


    여백을 좋은 느낌으로 자르고있어, 상당히 좋은 인상입니다.

    Node.js만으로 화상 처리를 할 수 있는 것이 좋네요. 안의 알고리즘은 전혀 파악하고 있지 않지만 사용하는 분에는 즐거울 것 같습니다.

    좋은 웹페이지 즐겨찾기