用c语言如何读取和保存jpg图片文件?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用c语言如何读取和保存jpg图片文件?相关的知识,希望对你有一定的参考价值。

#include <stdio.h>

#include <stdlib.h>

#include <windows.h>

int file_size(char* filename)//获取文件名为filename的文件大小。

FILE *fp = fopen(filename, "rb");//打开文件。

int size;

if(fp == NULL) // 打开文件失败

return -1;

fseek(fp, 0, SEEK_END);//定位文件指针到文件尾。

size=ftell(fp);//获取文件指针偏移量,即文件大小。

fclose(fp);//关闭文件。

return size;

int main ()

int size=0;

size=file_size("qw");

printf("%d\\n",size);

FILE * pFile,*qw;

char *buffer=(char*)malloc(sizeof(char)*size);

qw   =fopen("qw","r");

pFile = fopen ( "qwe" , "wb" );

printf("%d==\\n",pFile);

printf("%d\\n",size);

fread(buffer,1,size,qw);

fwrite (buffer , sizeof(byte), size , pFile );

fclose (pFile);

rename("qwe","Groot.jpg");

return 0;

扩展资料:

c语言读取TXT文件:

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#define MAX_LINE 1024

int main()

 char buf[MAX_LINE];  /*缓冲区*/

 FILE *fp;            /*文件指针*/

 int len;             /*行字符个数*/

 if((fp = fopen("test.txt","r")) == NULL)

 

 perror("fail to read");

 exit (1) ;

 

 while(fgets(buf,MAX_LINE,fp) != NULL)

 

 len = strlen(buf);

 buf[len-1] = '\\0';  /*去掉换行符*/

 printf("%s %d \\n",buf,len - 1);

 

return 0;




参考技术A 有这样一个二进制文件,大小在100M左右,里面存放了多张JPG图片,文件格式如下:
无关数据区
JPG图片数据区
无关数据区
JPG图片数据区
无关数据区
JPG图片数据区
......
已知JPG图片起始标志为:“FF D8 FF E0 00 10 4A”,结束标志为:“FF D9”。
现想把这些JPG图片数据从该文件中读出来,生成一个个单独的图片文件,该如何做呢?
帮你写了个程序, 测试了只含有一个图片信息的文件
int len=0;
int filesn=0;
void ReadJpg(CFile *sfp,const char *dstfile,unsigned char a,unsigned char b)

CFile nf;
nf.Open(dstfile,CFile::modeCreate|CFile::modeWrite|CFile::typeBinary);
unsigned t=0,t1=0;
nf.Write(&a,sizeof(char));
nf.Write(&b,sizeof(char));
while(1)

sfp->Read(&t,sizeof(char));
len++;
nf.Write(&t,sizeof(char));
if(t==0xFF)

sfp->Read(&t1,sizeof(char));
len++;
if(t1==0xD9)
break;
else
nf.Write(&t1,sizeof(char));


nf.Close();


调用:
void test()

CFile fp;
fp.Open("86b05621.jpg",CFile::modeRead|CFile::typeBinary);//文件名改一下
unsigned char a=0,b=0;
len=0;
while(1)

fp.Read(&a,sizeof(char));
len++;
if(len>=fp.GetLength())
break;
if(a==0xFF)

fp.Read(&b,sizeof(char));
len++;
if(b==0xD8)

filesn++;
char filename[256];
sprintf(filename,"Jpg %d.jpg",filesn);
ReadJpg(&fp,filename,a,b);



fp.Close();

思路是,先得到FF的值,然后再判断下一位是否是0xD8, 但这里要说明一下,如果你的其它数据信息里也含有FF D8值的话就会出错了, 所以为保险起见,应该再多比较几位, JPG的头是固定的,再往下就是EF E0 00 1E, 建议楼主再往下比较四位比较保险(在程序中稍作修改即可)

你是不是在 分析某个 游戏的或程序的资源文件呀,如果是的话,这个资源文件应该配有一个 索引文件!或在其文件自身。索引可以列表索引,链表形示……
如果是你自已生成的文件包,最好加上索引,因为这样可以提高效率!
参考技术B 图片文件需要解码,解码后,可以用open函数直接打开,记得打开选项要设置成同步,然后就可以修改图片内容,程序运行完,图片就已经被更改了,也就是说已经自动保存了 参考技术C VC中,使用getimage();putimage()函数或是loadimage();putimage函数读取并显示图片,而getimage()与loadimage()函数都要定义一个保存图像信息的指针追问

谢谢!我已解决。用c。

本回答被提问者采纳
参考技术D 用hafuman转码接口函数就可以转换了

亿图图示为啥不能保存成jpg格式

我现在用亿图图示,版本号是:亿图图示9.1破解版。我画了一个图,可以保存为eddx文件,eps文件,pdf文件,但就是不能保存为jpg文件。我用了“另存为”和“导出”都试了。在保存为jpg文件时,出现了如图的提示,我也选择了,但就是保存不了图片。请大牛指教。

不会用这个软件。实在不让导出,就截屏。 参考技术A 9.1版本很多BUG,经常会自动缩到最小,而且放不大,输出图片格式是没有字或者根本无法输出的,以前没这毛病,近期用起来我也发现了这个问题,所以改用了7.3版本,导出2张后,又出现这毛病,不过相对BUG较少,可以输出pdf格式,转化成图片格式就行,挺好用的软件,本来想用XMIND代替的,可用起来,还真不如这个顺手,建议你也改用低版本的吧。
版权问题就不分享给你了,一搜一大堆。好运~!
对了,可以直接用软件打印,没毛病。
参考技术B 已找到替代解决方法。
我也有类似的情况,不管怎么保存、导出,都不能存储为jpg,但是我试了下,png格式是可以的,所以如果仅仅是需要图片,那就选择png格式好了。

以上是关于用c语言如何读取和保存jpg图片文件?的主要内容,如果未能解决你的问题,请参考以下文章

C语言中怎样获得jpg图片的宽和高?

请问如何把图片保存为JPG和BMP

如何把网页上的PHP图片下载后成为JPG格式

如何把动态jpg图片转成gif?

如何在oracle中的blob字段下读取jpg格式文件保存

php生成的图片如何保存为jpg