You cannot. gzip is a stream compression method, it is not a container. In this case, the images are stored in a file container, which is described at the bottom of the page:
the IDX file format is a simple format for vectors and multidimensional matrices of various numerical types.
The basic format is
magic number
size in dimension 0
size in dimension 1
size in dimension 2
.....
size in dimension N
data
The magic number is an integer (MSB first). The first 2 bytes are always 0.
The third byte codes the type of the data:
0x08: unsigned byte
0x09: signed byte
0x0B: short (2 bytes)
0x0C: int (4 bytes)
0x0D: float (4 bytes)
0x0E: double (8 bytes)
The 4-th byte codes the number of dimensions of the vector/matrix: 1 for vectors, 2 for matrices....
The sizes in each dimension are 4-byte integers (MSB first, high endian, like in most non-Intel processors).
The data is stored like in a C array, i.e. the index in the last dimension changes the fastest.
A more typical approach is to use a tarball archive, as a container, and then compress the archive. The benefit is that this is a standard way of creating gzip-compressed archives, and does not require a custom script to extract the files.
An example on how to do this with a given directory of images is as follows (using Bash, on a *Nix system):
tar -zcvf tar-archive-name.tar.gz source-folder-name
Gzip compression is built-in with the -z flag, or you can also use the gzip
command to do your own.
In Python, you can also create a tarfile archive, with gzip compression:
A simple example, modified from the documentation, is as follows:
import tarfile
tar = tarfile.open("sample.tar", "w:gz")
for name in ["foo", "bar", "quux"]:
tar.add(name)
tar.close()
The mode 'w:gz'
specifies that the archive will be gzip compressed, and this will work on any operating system.