import BarcodeFormat from '../BarcodeFormat' ; import EncodeHintType from '../EncodeHintType' ; import Writer from '../Writer' ; import AztecCode from './encoder/AztecCode' ; import Encoder from './encoder/Encoder' ; import BitMatrix from '../common/BitMatrix' ; import Charset from '../util/Charset' ; import StandardCharsets from '../util/StandardCharsets' ; import Integer from '../util/Integer' ; import IllegalStateException from '../IllegalStateException' ; import IllegalArgumentException from '../IllegalArgumentException' ; import StringUtils from '../common/StringUtils' ; import { int } from '../../customTypings' ; /**
 * Renders an Aztec code as a  BitMatrix .
  export default class AztecWriter implements Writer { public encode ( contents , format , width , height ) { return this . encodeWithHints ( contents , format , width , height , null ) ; } public encodeWithHints ( contents , format , width , height , hints ) { let charset = StandardCharsets . ISO_8859_1 ; let eccPercent = Encoder . DEFAULT_EC_PERCENT ; let layers = Encoder . DEFAULT_AZTEC_LAYERS ; if ( hints != null ) { if ( hints . has ( EncodeHintType . CHARACTER_SET ) ) { charset = Charset . forName ( hints . get ( EncodeHintType . CHARACTER_SET ) . toString ( ) ) ; } if ( hints . has ( EncodeHintType . ERROR_CORRECTION ) ) { eccPercent = Integer . parseInt ( hints . get ( EncodeHintType . ERROR_CORRECTION ) . toString ( ) ) ; } if ( hints . has ( EncodeHintType . AZTEC_LAYERS ) ) { layers = Integer . parseInt ( hints . get ( EncodeHintType . AZTEC_LAYERS ) . toString ( ) ) ; } } return AztecWriter . encodeLayers ( contents , format , width , height , charset , eccPercent , layers ) ; } private static encodeLayers ( contents , format , width , height , charset , eccPercent , layers ) { if ( format !== BarcodeFormat . AZTEC ) { throw new IllegalArgumentException ( 'Can only encode AZTEC, but got ' + format ) ; } let aztec = Encoder . encode ( StringUtils . getBytes ( contents , charset ) , eccPercent , layers ) ; return AztecWriter . renderResult ( aztec , width , height ) ; } private static renderResult ( code , width , height ) { let input = code . getMatrix ( ) ; if ( input == null ) { throw new IllegalStateException ( ) ; } let inputWidth = input . getWidth ( ) ; let inputHeight = input . getHeight ( ) ; let outputWidth = Math . max ( width , inputWidth ) ; let outputHeight = Math . max ( height , inputHeight ) ; let multiple = Math . min ( outputWidth / inputWidth , outputHeight / inputHeight ) ; let leftPadding = ( outputWidth - ( inputWidth * multiple ) ) / 2 ; let topPadding = ( outputHeight - ( inputHeight * multiple ) ) / 2 ; let output = new BitMatrix ( outputWidth , outputHeight ) ; for ( let inputY = 0 , outputY = topPadding ; inputY < inputHeight ; inputY ++ , outputY += multiple ) { for ( let inputX = 0 , outputX = leftPadding ; inputX < inputWidth ; inputX ++ , outputX += multiple ) { if ( input . get ( inputX , inputY ) ) { output . setRegion ( outputX , outputY , multiple , multiple ) ; } } } return output ; } }