PackBits es un esquema de compresión sin pérdidas rápido y sencillo para la codificación de datos de longitud variable . [ 1 ]
Apple introdujo el formato Packbits con el lanzamiento de MacPaint para Macintosh . Este esquema de compresión se puede usar en archivos TIFF . Los archivos TGA también utilizan este esquema de compresión RLE, pero tratan el flujo de datos como píxeles en lugar de bytes. La compresión Packbit también se usó en archivos ILBM .
Un flujo de datos PackBits consta de paquetes con una cabecera de un byte seguida de los datos. La cabecera es un byte con signo; los datos pueden tener signo, no tener signo o estar empaquetados (como los píxeles de MacPaint).
En la siguiente tabla, n es el valor del byte de cabecera como un entero con signo.
Tenga en cuenta que interpretar el 0 como positivo o negativo no afecta al resultado. Las secuencias de dos bytes adyacentes a secuencias sin datos se suelen escribir como datos literales. No existe ninguna forma, a partir de los datos de PackBits, de determinar el final del flujo de datos; es decir, es necesario conocer el tamaño de los datos comprimidos o sin comprimir antes de leer un flujo de datos de PackBits para saber dónde termina.
Apple Computer (ver el enlace externo) proporciona este breve ejemplo de datos empaquetados: FE AA 02 80 00 2A FD AA 03 80 00 2A 22 F7 AA
El siguiente código, escrito en Microsoft VBA , descomprime los datos:
Sub UnpackBitsDemo () Dim File As Variant Dim MyOutput As String Dim Count As Long Dim i As Long , j As Long File = "FE AA 02 80 00 2A FD AA 03 80 00 2A 22 F7 AA" File = Split ( File , " " ) For i = LBound ( File ) To UBound ( File ) Count = Application . WorksheetFunction . Hex2Dec ( Archivo ( i )) Seleccionar Caso Count Caso Is >= 128 Count = 256 - Count 'Complemento a dos Para j = 0 Hasta Count 'basado en cero MyOutput = MyOutput & Archivo ( i + 1 ) & " " Siguiente j i = i + 1 'Ajustar el puntero Caso Else Para j = 0 Hasta Count 'basado en cero MyOutput = MyOutput & Archivo ( i + j + 1 ) & " " Siguiente j i = i + j 'Ajustar el puntero Fin Seleccionar Siguiente iDepurar . Imprimir MiSalida 'AA AA AA 80 00 2A AA AA AA AA 80 00 2A 22 AA AA AA AA AA AA AA AA AA Fin SubLa misma implementación en JavaScript :
/** * Funciones auxiliares para crear entrada y salida legibles * * Además, consulte este ejemplo en jsfiddle para ver un decodificador interactivo de PackBits: * https://jsfiddle.net/y13xkh65/3/ */función str2hex ( str ) { return str . split ( '' ). map ( function ( char ) { var value = char . charCodeAt ( 0 );return (( valor < 16 ? '0' : '' ) + valor . toString ( 16 )). toUpperCase (); }). join ( ' ' ); }function hex2str ( hex ) { return hex . split ( ' ' ). map ( function ( string ) { return String . fromCharCode ( parseInt ( string , 16 )); }). join ( '' ); }/** * Función de desempaquetado de PackBits * * @param {String} datos * @return {String} */ function unpackBits ( datos ) { var salida = '' , i = 0 ;mientras ( i < data . length ) { var hex = data . charCodeAt ( i );if ( hex == 128 ) { // No hacer nada, nop } else if ( hex > 128 ) { // Este es un byte repetido hex = 256 - hex ;for ( var j = 0 ; j <= hex ; ++ j ) { output += data . charAt ( i + 1 ); }++ i ; } else { // Estos son bytes literales for ( var j = 0 ; j <= hex ; ++ j ) { output += data . charAt ( i + j + 1 ); }i += j ; }++ i ; }devolver salida ; }var original = 'FE AA 02 80 00 2A FD AA 03 80 00 2A 22 F7 AA' , data = unpackBits ( hex2str ( original ));// La salida es: AA AA AA 80 00 2A AA AA AA AA 80 00 2A 22 AA AA AA AA AA AA AA AA AA AA consola . iniciar sesión ( str2hex ( datos ));Referencias
- ↑ Hernández León, Raudel; Pérez Suárez, Airel; Feregrino-Uribe, Claudia (2010). "Un algoritmo de compresión para la minería de conjuntos de elementos frecuentes" (PDF) . Nuevas tendencias en ingeniería eléctrica, control automático, informática y ciencias de la comunicación . pp. 485–499 . Archivado del original (PDF) el 16 de junio de 2015.
Enlaces externos
- Página web de Apple que describe el formato PackBits en la Wayback Machine (archivada el 5 de julio de 2008).
- El algoritmo TIFF PackBits se ha obtenido del sitio web https://www.fileformat.info con permiso de Corion.net.
- ¿Compresión PACKBITS o por qué admitimos el método de compresión TIFF sin pérdidas? El artículo en el sitio https://www.universal-document-converter.com también describe el algoritmo.
- Algoritmos de compresión sin pérdidas
- Sistema operativo Mac clásico