PHP Classes

File: toastui/src/js/extension/mask.js

Recommend this page to a friend!
  Classes of Mark de Leon  >  PHP Document Scanner using SANE or eSCL AirPrint  >  toastui/src/js/extension/mask.js  >  Download  
File: toastui/src/js/extension/mask.js
Role: Auxiliary data
Content type: text/plain
Description: Auxiliary data
Class: PHP Document Scanner using SANE or eSCL AirPrint
Web interface to scan printed documents
Author: By
Last change:
Date: 1 year ago
Size: 2,792 bytes
 

Contents

Class file image Download
/**
 * @author NHN Ent. FE Development Team <dl_javascript@nhn.com>
 * @fileoverview Mask extending fabric.Image.filters.Mask
 */
import fabric from 'fabric/dist/fabric.require';

/**
 * Mask object
 * @class Mask
 * @extends {fabric.Image.filters.Mask}
 * @ignore
 */
const Mask = fabric.util.createClass(fabric.Image.filters.Mask, /** @lends Mask.prototype */{
    /**
     * Apply filter to canvas element
     * @param {Object} canvasEl - Canvas element to apply filter
     * @override
     */
    applyTo(canvasEl) {
        if (!this.mask) {
            return;
        }

        const {width, height} = canvasEl;
        const maskCanvasEl = this._createCanvasOfMask(width, height);
        const ctx = canvasEl.getContext('2d');
        const maskCtx = maskCanvasEl.getContext('2d');
        const imageData = ctx.getImageData(0, 0, width, height);

        this._drawMask(maskCtx, canvasEl, ctx);
        this._mapData(maskCtx, imageData, width, height);

        ctx.putImageData(imageData, 0, 0);
    },

    /**
     * Create canvas of mask image
     * @param {number} width - Width of main canvas
     * @param {number} height - Height of main canvas
     * @returns {HTMLElement} Canvas element
     * @private
     */
    _createCanvasOfMask(width, height) {
        const maskCanvasEl = fabric.util.createCanvasElement();

        maskCanvasEl.width = width;
        maskCanvasEl.height = height;

        return maskCanvasEl;
    },

    /**
     * Draw mask image on canvas element
     * @param {Object} maskCtx - Context of mask canvas
     * @private
     */
    _drawMask(maskCtx) {
        const {mask} = this;
        const maskImg = mask.getElement();

        const left = mask.getLeft();
        const top = mask.getTop();
        const angle = mask.getAngle();

        maskCtx.save();
        maskCtx.translate(left, top);
        maskCtx.rotate(angle * Math.PI / 180);
        maskCtx.scale(mask.scaleX, mask.scaleY);
        maskCtx.drawImage(maskImg, -maskImg.width / 2, -maskImg.height / 2);
        maskCtx.restore();
    },

    /**
     * Map mask image data to source image data
     * @param {Object} maskCtx - Context of mask canvas
     * @param {Object} imageData - Data of source image
     * @param {number} width - Width of main canvas
     * @param {number} height - Height of main canvas
     * @private
     */
    _mapData(maskCtx, imageData, width, height) {
        const sourceData = imageData.data;
        const maskData = maskCtx.getImageData(0, 0, width, height).data;
        const {channel} = this;
        const len = imageData.width * imageData.height * 4;

        for (let i = 0; i < len; i += 4) {
            sourceData[i + 3] = maskData[i + channel]; // adjust value of alpha data
        }
    }
});

module.exports = Mask;
For more information send a message to info at phpclasses dot org.