Class PNGCanvas

java.lang.Object
net.codecrete.qrbill.canvas.AbstractCanvas
net.codecrete.qrbill.canvas.PNGCanvas
All Implemented Interfaces:
Closeable, AutoCloseable, ByteArrayResult, Canvas

public class PNGCanvas extends AbstractCanvas implements ByteArrayResult
Canvas for generating PNG files.

PNGs are not an optimal file format for QR bills. Vector formats such a SVG or PDF are of better quality and use far less processing power to generate.

  • Nested Class Summary

    Nested classes/interfaces inherited from interface net.codecrete.qrbill.canvas.Canvas

    Canvas.LineStyle
  • Field Summary

    Fields inherited from class net.codecrete.qrbill.canvas.AbstractCanvas

    MM_TO_PT
  • Constructor Summary

    Constructors
    Constructor
    Description
    PNGCanvas(double width, double height, int resolution, String fontFamilyList)
    Creates a new instance with the specified image size, resolution and font family.
  • Method Summary

    Modifier and Type
    Method
    Description
    void
    addRectangle(double x, double y, double width, double height)
    Adds a rectangle to the path
    void
     
    void
    Closes the current subpath
    void
    cubicCurveTo(double x1, double y1, double x2, double y2, double x, double y)
    Adds a cubic Beziér curve to the open path going from the previous point to the specified position.
    void
    fillPath(int color, boolean smoothing)
    Fills the current path and ends it
    void
    lineTo(double x, double y)
    Adds a line segment to the open path from the previous point to the specified position.
    void
    moveTo(double x, double y)
    Moves the current point of the open path to the specified position.
    void
    putText(String text, double x, double y, int fontSize, boolean isBold)
    Adds text to the graphics.
    void
    saveAs(Path path)
    Saves the resulting PNG image to the specified path.
    void
    setTransformation(double translateX, double translateY, double rotate, double scaleX, double scaleY)
    Sets a translation, rotation and scaling for the subsequent operations
    void
    Starts a path that can be filled or stroked
    void
    strokePath(double strokeWidth, int color, Canvas.LineStyle lineStyle, boolean smoothing)
    Strokes the current path and ends it
    byte[]
    Gets the resulting graphics as a byte array.
    void
    Writes the resulting PNG image to the specified output stream.

    Methods inherited from class net.codecrete.qrbill.canvas.AbstractCanvas

    getAscender, getDescender, getLineHeight, getTextWidth, putTextLines, setupFontMetrics, splitLines

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Constructor Details

    • PNGCanvas

      public PNGCanvas(double width, double height, int resolution, String fontFamilyList)
      Creates a new instance with the specified image size, resolution and font family.

      It is recommended to use at least 144 dpi for a readable result.

      The first font family in the list is used.

      Parameters:
      width - image width, in mm
      height - image height, in mm
      resolution - resolution of the result (in dpi)
      fontFamilyList - list of font families (comma separated, CSS syntax)
  • Method Details

    • setTransformation

      public void setTransformation(double translateX, double translateY, double rotate, double scaleX, double scaleY)
      Description copied from interface: Canvas
      Sets a translation, rotation and scaling for the subsequent operations

      Before a new translation is applied, the coordinate system is reset to it's original state.

      The transformations are applied in the order translation, rotation, scaling.

      Specified by:
      setTransformation in interface Canvas
      Parameters:
      translateX - translation in x direction (in mm)
      translateY - translation in y direction (in mm)
      rotate - rotation angle, in radians
      scaleX - scale factor in x direction (1.0 = no scaling)
      scaleY - scale factor in y direction (1.0 = no scaling)
    • putText

      public void putText(String text, double x, double y, int fontSize, boolean isBold)
      Description copied from interface: Canvas
      Adds text to the graphics.

      The text position refers to the left most point on the text's baseline.

      Specified by:
      putText in interface Canvas
      Parameters:
      text - the text
      x - x position of the text's start (in mm)
      y - y position of the text's top (in mm)
      fontSize - the font size (in pt)
      isBold - indicates if the text is in bold or regular weight
    • startPath

      public void startPath()
      Description copied from interface: Canvas
      Starts a path that can be filled or stroked
      Specified by:
      startPath in interface Canvas
    • moveTo

      public void moveTo(double x, double y)
      Description copied from interface: Canvas
      Moves the current point of the open path to the specified position.
      Specified by:
      moveTo in interface Canvas
      Parameters:
      x - x-coordinate of position
      y - y-coordinate of position
    • lineTo

      public void lineTo(double x, double y)
      Description copied from interface: Canvas
      Adds a line segment to the open path from the previous point to the specified position.
      Specified by:
      lineTo in interface Canvas
      Parameters:
      x - x-coordinate of position
      y - y-coordinate of position
    • cubicCurveTo

      public void cubicCurveTo(double x1, double y1, double x2, double y2, double x, double y)
      Description copied from interface: Canvas
      Adds a cubic Beziér curve to the open path going from the previous point to the specified position. Two control points control the curve
      Specified by:
      cubicCurveTo in interface Canvas
      Parameters:
      x1 - x-coordinate of first control point
      y1 - y-coordinate of first control point
      x2 - x-coordinate of second control point
      y2 - y-coordinate of second control point
      x - x-coordinate of position
      y - y-coordinate of position
    • addRectangle

      public void addRectangle(double x, double y, double width, double height)
      Description copied from interface: Canvas
      Adds a rectangle to the path
      Specified by:
      addRectangle in interface Canvas
      Parameters:
      x - the rectangle's left position (in mm)
      y - the rectangle's top position (in mm)
      width - the rectangle's width (in mm)
      height - rectangle's height (in mm)
    • closeSubpath

      public void closeSubpath()
      Description copied from interface: Canvas
      Closes the current subpath
      Specified by:
      closeSubpath in interface Canvas
    • fillPath

      public void fillPath(int color, boolean smoothing)
      Description copied from interface: Canvas
      Fills the current path and ends it
      Specified by:
      fillPath in interface Canvas
      Parameters:
      color - the fill color (expressed similar to HTML, e.g. 0xffffff for white)
      smoothing - true for using smoothing techniques such as antialiasing, false otherwise
    • strokePath

      public void strokePath(double strokeWidth, int color, Canvas.LineStyle lineStyle, boolean smoothing)
      Description copied from interface: Canvas
      Strokes the current path and ends it
      Specified by:
      strokePath in interface Canvas
      Parameters:
      strokeWidth - the stroke width (in pt)
      color - the stroke color (expressed similar to HTML, e.g. 0xffffff for white)
      lineStyle - the line style
      smoothing - true for using smoothing techniques such as antialiasing, false otherwise
    • toByteArray

      public byte[] toByteArray() throws IOException
      Description copied from interface: ByteArrayResult
      Gets the resulting graphics as a byte array.
      Specified by:
      toByteArray in interface ByteArrayResult
      Returns:
      the byte array
      Throws:
      IOException - thrown if the construction of the byte array fails
    • writeTo

      public void writeTo(OutputStream os) throws IOException
      Writes the resulting PNG image to the specified output stream.
      Parameters:
      os - the output stream
      Throws:
      IOException - thrown if the image cannot be written
    • saveAs

      public void saveAs(Path path) throws IOException
      Saves the resulting PNG image to the specified path.
      Parameters:
      path - the path to write to
      Throws:
      IOException - thrown if the image cannot be written
    • close

      public void close()
      Specified by:
      close in interface AutoCloseable
      Specified by:
      close in interface Closeable