Tool to apply LZW compression. Lempel-Ziv-Welch (LZW) is a lossless data compression algorithm created by Abraham Lempel, Jacob Ziv, et Terry Welch.

LZW Compression - dCode

Tag(s) : Compression

dCode is free and its tools are a valuable help in games, maths, geocaching, puzzles and problems to solve every day!

A suggestion ? a feedback ? a bug ? an idea ? *Write to dCode*!

LZW encoding algorithm uses a predefined dictionary, such as 128 ASCII values, and encodes characters with their entry number in the dictionary.

__Example:__ The dictionary is `0:A,1:B,2:C,...,25:Z` and the plain text is `DECODED` which can be written `3,4,2,14,3,4,3` (made of 7 items) in the dictionary.

At each step, look for a substring in the dictionary, if it does not exists, the dictionary evolves and stores a new entry constituted of the last two entries found.

__Example:__ Step 1, look for `DE`, which is not in the dictionary. Store `DE` (position `26`) and save the position of `D` (position `3`) as output.

Step 2, look for `EC`, which is not in the dictionary. Store `EC` (position `27`) and save the position of `E` (position `4`) as output. And so on with other steps 3 and 4.

Step 5, look for `DE` again, this time `DE` exists in the dictionary, go to step 6.

Step 6, look for `DED`, which is not in the dictionary. Store `DED` (position `30`) and save the position of `DE` (position `26`).

Dictionary has become `0:A,1:B,...,25:Z,26:DE,27:EC,28:CO,29:OD,DED:30`

The ciphertext is made up of numbers saved for output.

__Example:__ The ciphertext is `3,4,2,14,26,3` (made of 6 items, the message have been compressed)

LZW decompression/decoding/decryption requires to know the dictionary used and the sequence of values from the compression.

__Example:__ The cipher text is `3,4,2,14,26,3` and the dictionary be `0:A,1:B,2:C,...,25:Z`

For each value, check for the corresponding character in the dictionary.

At each step, the dictionary evolves like in the compression part (see above).

__Example:__ Step 1: `3` corresponds to `D`

Step 2: `4` corresponds to `E`, add `DE` in the dictionary in position 26,

Step 3: `2` corresponds to `C`, add `EC` in the dictionary in position 27, the same for step 4

Step 5: `26` corresponds to `DE`, etc.

The decompressed plain text is `DECODED`.

Many variants exist for LZW improving the compression such as LZ77 and LZ78, LZMA, LZSS, or the algorithm Deflate. It is also interesting to combine this compression with Burrows-Wheeler or Huffman coding.

In 1987 by Abraham Lempel, Jacob Ziv, and Terry Welch

dCode retains ownership of the "LZW Compression" source code. Except explicit open source licence (indicated Creative Commons / free), the "LZW Compression" algorithm, the applet or snippet (converter, solver, encryption / decryption, encoding / decoding, ciphering / deciphering, translator), or the "LZW Compression" functions (calculate, convert, solve, decrypt / encrypt, decipher / cipher, decode / encode, translate) written in any informatic language (Python, Java, PHP, C#, Javascript, Matlab, etc.) and all data download, script, or API access for "LZW Compression" are not public, same for offline use on PC, tablet, iPhone or Android !

The copy-paste of the page "LZW Compression" or any of its results, is allowed as long as you cite the online source

Reminder : dCode is free to use.

lzw,compression,algorithm,string,encoding,lempel,ziv,welch,gif,tiff,lz77

Source : https://www.dcode.fr/lzw-compression

© 2022 dCode — The ultimate 'toolkit' to solve every games / riddles / geocaching / CTF.

Feedback