img4d 0.0.6

PNG decoder/encoder in Dlang.

To use this package, run the following command in your project's root directory:


licence status coverage

PNG images Decoder/Encoder for D language. Please see current status on commit page or dub page

Please feel free to throw PRs or issues.


decode, convert to grayscale and encode

import some required modules

import img4d;
import std.stdio,


Header hdr;
Pixel colorPix = hdr.load("png_img/lena.png");

rgb to grayscale

Pixel grayPix = hdr.rgbToGrayscale(colorPix, true);
hdr.colorType = colorTypes.grayscale;


bool encodedData =, "png_img/encoded_lena.png");








  • ref auto load(ref Header header, string filename)
  • ubyte[] save(ref Header header, ref Pixel pix, string filename)
  • bool isGrayscale(int colorType)
  • bool isColorNoneAlpha(int colorType)
  • auto canny(T)(T[][] actualData, int tMin, int tMax)
  • ref auto rgbToGrayscale(T)(ref Header header, ref Pixel pix, bool fastMode=false)
  • pure auto toBinary(T)(ref T[][] gray, T threshold=127)
  • pure auto toBinary(T)(T[][] array)
  • pure auto differ(T)(ref T[][] origin, ref T[][] target)
  • pure auto mask(T)(ref T[][][] colorTarget, ref T[][] gray)


  • Header readIHDR(ubyte[] header) Set Header struct and Return its struct
  • Params: ubyte[] header: Header byte-data
  • int byteToInt(T)(T[] data) Return ChunkData-length(Convert byte array to int)
  • string byteToString(T)(T[] data) Return Chunk Type(Convert byte array to string)
  • ubyte[] readIDAT(ubyte[] data) Calculate CRC and Return IDAT Chunk-Data
  • Params: ubyte[] data : IDAT array expect for Chunk-Data-Size
  • void crcCheck(ubyte[] crc, in ubyte[] chunk) The function of CRC calculation
  • Params ubyte[] crc : The CRC code at the end of the chunk ubyte[] chunk : Byte array to be CRC calculated
  • int paethPredictor(int left, int upper, int upperLeft) Calculate and Return Paeth-Predictor
  • auto normalizePixelValue(T)(T value) Return the value which are subtracted 256 if it exceeds 256
  • int[][] inverseFiltering(string op, string inequality, string inverseOp)(ubyte[][] data)
  • int[][] parse(ref Header info, string filename)


  • ubyte[] makeIHDR(in Header info) Return IHDR which required for encoding
  • Params: Header info : arranged Header
  • ubyte[] makeIDAT(T)(T[][] actualData, in Header info) Return IDAT which required for encoding
  • Params: T actualData : IDAT chunk data Header info : arranged Header
  • ubyte[] makeAncillary() Not implemented
  • ubyte[] makeIEND() Return IEND which required for encoding
  • auto makeCrc(in ubyte[] data) Calculate and Return CRC value
  • auto sumScanline(ubyte[][] src) Cast to int[] and Calculate sum every horizontal line
  • auto chooseFilterType(ref Header header, ref Pixel pix) Choose optimal filter and Return filtered pixel


  • pure ref auto inverseSub(ref ubyte[][] scanline)
  • ref auto inverseSub(ref ubyte[][] scanline, bool gray)
  • pure ubyte[][] sub(ref ubyte[][] src) Calculate and Return Sub filter(Difference from left pixel)
  • pure ubyte[][] up(ref ubyte[][] src)
  • pure ubyte[][] neighborDifference(ubyte[][] src) Calculate difference neighbor pixel
  • pure ref auto joinVertical(T)(ref T[][] src) Make array vertical
  • auto inverseUp() Not implemented
  • auto ave() Not implemented
  • auto inverseAve() Not implemented
  • auto paeth() Not implemented
  • auto inversePaeth() Not implemented


  • ref auto toGrayscale(T)(ref T[][][] color) Convert to grayscale by weighting


  • auto differential(T)(T[][] array, T[][] filter)
  • auto gradient(T)(T[][] Gr, T[][] Gth)
  • auto hysteresis(T)(T[][] src, int t_min, int t_max)
  • DYGV
1.3.4 2020-Feb-08
1.3.3 2020-Feb-05
1.3.2 2019-Dec-11
1.3.1 2019-Oct-22
1.3.0 2019-Oct-22
Show all 21 versions
Download Stats:
  • 0 downloads today

  • 0 downloads this week

  • 5 downloads this month

  • 13 downloads total

Short URL: