LZ4:压缩图像格式的压缩
LZ4: Compression of compressed image formats
我正在使用 LZ4 compressor C 库。我压缩的一些文件是 JPG 和 PNG。出于某种原因,我无法理解,方法
int compressedSize = LZ4_compress_default((char*)data,
compressedData, uncompressedSize, uncompressedSize);
有时 return 图像的负值(或零),我正在压缩。
比如我正在压缩两张标准的JPG图片。一个 return 的值为“-236”,而第二个 return 表示压缩字节数,这意味着第一个压缩失败。零 return 表示 LZ4 压缩失败。我不知道 -236 是什么意思。是因为源数据已经进行了某种程度的压缩吗?
函数return定义为:
return : the number of bytes written into buffer 'dest' (necessarily <= maxOutputSize)
or 0 if compression fails
如果压缩导致的大小大于 uncompressedSize
,这很可能是一个已经压缩的文件,该函数将失败。然而,这并不能解释为什么它 returned 为负值 - 没有记录。但情况仍然如此,如果您需要容纳压缩文件,则需要通过提供更大的缓冲区来允许文件大小增加。
查看 source code,return 值是在 LZ4_compress_generic()
中生成的:
return (int) (((char*)op)-dest);
如果 op
< dest
,指针运算将 return 为负值,尽管查看代码,很难看出这是如何发生的。如果这是一个问题(当然,如果只是提供更大的目标缓冲区不能解决问题),我建议您逐步检查调试器中的代码以确定问题所在。
我正在使用 LZ4 compressor C 库。我压缩的一些文件是 JPG 和 PNG。出于某种原因,我无法理解,方法
int compressedSize = LZ4_compress_default((char*)data,
compressedData, uncompressedSize, uncompressedSize);
有时 return 图像的负值(或零),我正在压缩。
比如我正在压缩两张标准的JPG图片。一个 return 的值为“-236”,而第二个 return 表示压缩字节数,这意味着第一个压缩失败。零 return 表示 LZ4 压缩失败。我不知道 -236 是什么意思。是因为源数据已经进行了某种程度的压缩吗?
函数return定义为:
return : the number of bytes written into buffer 'dest' (necessarily <= maxOutputSize) or 0 if compression fails
如果压缩导致的大小大于 uncompressedSize
,这很可能是一个已经压缩的文件,该函数将失败。然而,这并不能解释为什么它 returned 为负值 - 没有记录。但情况仍然如此,如果您需要容纳压缩文件,则需要通过提供更大的缓冲区来允许文件大小增加。
查看 source code,return 值是在 LZ4_compress_generic()
中生成的:
return (int) (((char*)op)-dest);
如果 op
< dest
,指针运算将 return 为负值,尽管查看代码,很难看出这是如何发生的。如果这是一个问题(当然,如果只是提供更大的目标缓冲区不能解决问题),我建议您逐步检查调试器中的代码以确定问题所在。