我想读取png文件,请参阅图像数据并再次写入,文件大小没有任何变化.基于libpng文档,png是无损的,使用deflate和lz77进行压缩.在libpng中有一个示例项目声称可以无损地读写图像,它在像素值方面是正确的,但是改变文件的结构(例如IDAT的数量,可选的块等)png文件大小.
我的明确问题:如何从压缩流(libpng中的Zstream)中提取编码参数(例如deflate params或lz77 params)并使用此参数对原始图像进行编码以创建与输入文件相同的图像文件而不进行任何更改?
这是我的代码.我试着在info_ptr中保持params 来写图像,但不能正常工作.怎么做?
int main(int argc, char *argv[])
{
inname = argv[1];
outname = argv[2];
png_structrp read_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
png_infop info_ptr = png_create_info_struct(read_ptr);
if (!info_ptr)
{
png_destroy_read_struct(&read_ptr, (png_infopp)NULL, (png_infopp)NULL);
}
png_FILE_p imageFile, imageFile2, imageFileW;
imageFile=fopen(inname, "rb"); imageFileW = fopen(outname, "wb"); imageFile2 = fopen(inname, "rb");
int fileSize=fsize(imageFile2);
unsigned char* bufImWrite = malloc(sizeof(char)*fileSize);
fread(bufImWrite, 1, fileSize, imageFile2);
png_init_io(read_ptr, imageFile);
png_read_info(read_ptr, info_ptr);
png_uint_32 height;
height = info_ptr->height; …Run Code Online (Sandbox Code Playgroud)