Documentación:
Codigo:unsigned int qlz_compress(const void *source, char *destination, unsigned int size);
This function will compress the source and store the result in the destination. The size in bytes of the source must be given in the size parameter. If the function fails, the return value is 0 else the size of the compressed data is returned.
qlz_compress expects that the destination buffer is exactly size + 36000 bytes or larger and will crash otherwise.
unsigned int qlz_decompress(const char *source, void *destination);
This function will decompress the source and store the result in the destination. If decompression fails the return value is 0 else the return value tells the size of the decompressed data.
unsigned int qlz_size_decompressed(char *source);
This function takes data compressed with QuickLZ as argument and returns its uncompressed size. The function can be used for allocating the correct amount of memory before decompression.
unsigned int qlz_size_source(char *source);
This function takes the first 32 bytes of data compressed with QuickLZ as argument (these 32 bytes contain a header) and returns the size of the entire compressed data.
Copyright (C) Lasse Mikkel Reinhold.
#cs ----------------------------------------------------------------------------
AutoIt Version: 3.3.8.1
Author: Naker90
Créditos: Copyright (C) Lasse Mikkel Reinhold.
Script Function:
Comprime los datos de un archivo reduciendo su peso usando la libreria Quick32.dll.
Las funciones retornan los bytes del archivo comprimido/descomprimido.
Ejemplo de uso para compresion:
Local $DataCompress = _Quick32DataCompress('AAA.exe')
Local $FileNew = FileOpen('Compress.exe', 17)
FileWrite($FileNew, $DataCompress)
FileClose($FileNew)
Ejemplo de uso para Descompresion:
Local $DataDecompress = _Quick32DataDecompress('Compress.exe')
Local $FileNew2 = FileOpen('Decompress.exe', 17)
FileWrite($FileNew2, $DataDecompress)
FileClose($FileNew2)
#ce ----------------------------------------------------------------------------
Func _Quick32DataCompress($FileDecompressPath)
Local $OpenFileDecompress = FileOpen($FileDecompressPath, 16)
Local $FileDecompress = FileRead($OpenFileDecompress)
FileClose($OpenFileDecompress)
Local $Size = FileGetSize($FileDecompressPath)
Local $FileStruct = DllStructCreate('byte[' & $Size & ']')
DllStructSetData($FileStruct, 1, $FileDecompress)
Local $DstCompressStruct = DllStructCreate('byte[' & $Size + 36000 & ']')
Local $DLL = DllOpen('quick32.dll')
Local $Compress = DllCall($DLL, 'int', 'qlz_compress', 'ptr', DllStructGetPtr($FileStruct), 'ptr', DllStructGetPtr($DstCompressStruct), 'ulong', $Size + 1)
If $Compress[0] = 0 Then
MsgBox(16, 'ERROR', 'Hubo un error comprimiendo el archivo!')
Return 0
EndIf
Local $FileCompressStruct = DllStructCreate('byte[' & $Compress[0] & ']', DllStructGetPtr($DstCompressStruct))
Return DllStructGetData($FileCompressStruct, 1)
EndFunc
Func _Quick32DataDecompress($FileCompressPath)
Local $OpenFileCompress = FileOpen($FileCompressPath, 16)
Local $FileCompress = FileRead($OpenFileCompress)
FileClose($OpenFileCompress)
Local $Size = FileGetSize($FileCompressPath)
Local $FileStruct = DllStructCreate('byte[' & $Size & ']')
DllStructSetData($FileStruct, 1, $FileCompress)
Local $DLL = DllOpen('quick32.dll')
Local $CompressFileSize = DllCall($DLL, 'ulong', 'qlz_size_decompressed', 'ptr', DllStructGetPtr($FileStruct))
Local $DstDecompressStruct = DllStructCreate('byte[' & $CompressFileSize[0] & ']')
Local $Decompress = DllCall($DLL, 'int', 'qlz_decompress', 'ptr', DllStructGetPtr($FileStruct), 'ptr', DllStructGetPtr($DstDecompressStruct))
If $Decompress[0] = 0 then
MsgBox(16, 'ERROR', 'Hubo un error descomprimiendo el archivo!')
Return 0
EndIf
Local $FileDecompressStruct = DllStructCreate('byte[' & $Decompress[0] & ']', DllStructGetPtr($DstDecompressStruct))
Return DllStructGetData($FileDecompressStruct, 1)
EndFunc
Hice dos pruebas con dos archivos de diferente peso, el resultado fue el siguiente:1.61MB(Archivo original) >> 1.01MB(Archivo Comprimido)
16KB(Archivo original) >> 4.94KB(Archivo Comprimido)
No he puesto los créditos del autor de la librería porque no sé quien la hizo .
PD: Ya que el foro esta cambiando en cuanto aspecto me gustaría que implementaran la sintaxis de AutoIt, si no es mucha molestia .
Saludos