File and data compression using Qt is extremely easy. There are many cases where you’d possibly like your data to be compressed (for example before sending it over network to a remote host) and in such cases you can use the approach below:
What I have described here shows both data and file compression.
Function qCompress is used to compress a QByteArray or any other raw data read from a file. Similarly you can also use qUncompress to un-compress your compressed files or data.
Note that compress_level parameter below specifies how much compression should be used. According to Qt Documentation valid values are between 0 and 9, with 9 corresponding to the greatest compression (i.e. smaller compressed data) at the cost of using a slower algorithm. Smaller values (8, 7, …, 1) provide successively less compression at slightly faster speeds. The value 0 corresponds to no compression at all. The default value is -1, which specifies zlib’s default compression.
And here is the code :
QFile fi("C:/Files/Input.jpg"); // this is your input file
QFile fo("C:/Files/output.compressed"); // this is your compressed output file
if (fi.open(QFile::ReadOnly) && fo.open(QFile::WriteOnly))
{
int compress_level = 9; // compression level
fo.write(qCompress(fi.readAll(), compress_level)); // read input, compress and write to output is a single line of code
fi.close();
fo.close();
}
Quite easy right? And here is how you can un-compress your compressed data:
QByteArray un_cmp = qUncompress(cmp);
cmp is the compressed data.