小编Ali*_*avi的帖子

在C(libpng)中读取和写入png文件而不更改文件大小

我想读取png文件,请参阅图像数据并再次写入,文件大小没有任何变化.基于libpng文档,png是无损的,使用deflatelz77进行压缩.在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)

png image-processing deflate libpng

3
推荐指数
2
解决办法
588
查看次数

标签 统计

deflate ×1

image-processing ×1

libpng ×1

png ×1