zlib
 
Запатентованная библиотека для сжатия данных без потерь с использованием алгоритма Deflate.

Вебсайт: http://www.zlib.net
Поддерживаемые платформы: Win32, Linux, DOS
Заголовки: zlib.bi
Версия заголовков: 1.2.6
Примеры: в examples/compression/

Пример

Пример загрузки\сохранения PNG , базирующийся на ZLIB: http://www.freebasic.net/forum/viewtopic.php?t=3936

Пример сжатия в памяти:
'' Zlib Пример сжатия/распаковки, от yetifoot

#include once "zlib.bi"

Dim As Integer errlev

'' Это размер наших тестовых данных в байтах.
Dim As Integer src_len = 100000

Print "ZLib test - Version " & *zlibVersion()
Print
Print "Test data size      : " & src_len & " bytes." 

'' Размер конечного буфера для сжатых данных рассчитывается путем
'' использования функции compressBound.
Dim As Integer dest_len = compressBound(src_len)

'' Выделить необходимую память.
Dim As UByte Ptr src = Allocate(src_len)
Dim As UByte Ptr dest = Allocate(dest_len)

'' Заполнить буфер src случайными данными.
For i As Integer = 0 To src_len - 1
    src[i] = Rnd * 4
Next

'' Сохраним контрольную сумму crc32 входных данных, после распаковки,
''  мы сможем ее проверить.
Dim As UInteger crc = crc32(0, src, src_len)

'' Выполнить сжатие. dest_len передается как адрес,
'' после работы функции, он будет содержать размер сжатых данных.

errlev = compress(dest, @dest_len, src, src_len)
If errlev <> 0 Then
    '' Если функция возвращает значение, отличное от 0, то произошла ошибка.
    Print "**** Error during compress - code " & errlev & " ****"
End If
Print "Compressed to       : " & dest_len & " bytes."

'' Примечание: при обычном использовании программы, вы бы сохраняли данные
'' src_len , для того, чтобы знать какой размер будет после распаковки ,
'' но в нашем примере мы получим размер программно.

'' Стираем буфер src, перед распаковкой, для того чтобы убедиться,  
'' что распаковка работает.
For i As Integer = 0 To src_len - 1
    src[i] = 0
Next

'' Выполнение распаковки. Распаковываем данные обратно в src.  
'' src_len передается в качестве адреса, в нем будет
'' размер несжатых данных. 

errlev = uncompress(src, @src_len, dest, dest_len)
If errlev <> 0 Then
    '' Если функция возвращает значение отличное от 0, то произошла ошибка.
    Print "**** Error during uncompress - code " & errlev & " ****"
End If
Print "Uncompressed to     : " & src_len & " bytes."

'' Убедимся, что контрольная сумма совпадает.
If crc <> crc32(0, src, src_len) Then
    Print "crc32 checksum      : FAILED"
Else
    Print "crc32 checksum      : PASSED"
End If

'' Освобождаем буферы, используемые в тесте.
Deallocate(src)
Deallocate(dest)

Print
Print "Press any key to end . . . "
Sleep