C程序将Exif信息添加到jpg图片中

电脑杂谈  发布时间:2020-06-28 06:01:19  来源:网络整理

c 读取exif_怎么读取exif信息_读取照片exif信息

测试环境: Linux Fedora16 + Windows

打开图片的工具: UltraEdit

截屏工具: FSCaptrue

源代码下载:

在写入Exif信息之前,图片的相关数据,以下是图片开头的数据排列;

这里写图片描述

图片以0xFF 0xD8开头,0xFF 0xE0是图片的下一个数据块的开头,0x00 0x10表示数据块的长度,该长度包括标记(0xFF 0xE0)2个字节;

以下是图片末尾的数据排列. 请注意,结束地址从0开始为0x0003515c,但数据大小为0x0003515d字节

这里写图片描述

根据我们程序的打印信息,我们可以看到

写入的Exif信息数据大小: 1162字节_十六进制: 0x48a

原始图像数据的大小: (217435 + 2)字节(0xFF 0xD8开头为2字节)十六进制: 0x3515d

输出图像数据的大小: (218597 + 2)字节(0xFF 0xD8的前2个字节)__十六进制: 0x355e7

0x48a + 0x3515d = 0x355e7

这里写图片描述

从何处开始将数据写入JPG图像:

这里写图片描述

在JPG图像中写入数据的结尾:

这里写图片描述

结束地址为0x000048b,写入数据的大小为0x000048b-2 + 1 = 0x48a;减去两个字节0xFF 0xD8c 读取exif,地址从0开始计算,因此写入数据的总大小必须增加1;从0xFF 0xE0开始的数据是图片的原始数据;

在JPG图片的末尾:

这里写图片描述

与程序计算一致;

效果如下:

在写入数据之前c 读取exif,Windows解析图片的效果如下:

这里写图片描述

这里写图片描述

写入数据后,Windows解析图片的效果如下:

这里写图片描述

这里写图片描述

当然,您也可以编写自己的结构化数据,使用VC编写软件以根据您的结构化格式解析数据(PC报告软件的生产);

————- 1. 将缓冲数据添加到JPEG图片

————- 2. 将JPEG图像X数据提取到缓冲区中

————- 3. 将文件中的数据添加到JPEG图片中

————- 4. 提取JPEG图像X数据并生成一个新的数据文件

————- 5. 将缓冲区中的数据添加到JPEG图片中以生成新的JPEGX图片

————- 6. 将文件中的数据添加到JPEG图片中以生成新的JPEGX图片

以下是这种情况的源代码. 如果Exif信息具有冗余性,则可以自行修改;

程序代码

#ifndef __EXIFPARAM_H__
#define __EXIFPARAM_H__
#endif
typedef unsigned char   UCHAR;
typedef unsigned long   ULONG;
typedef unsigned int    UINT;
typedef unsigned long   DWORD;
typedef unsigned int    UINT32;
typedef int             INT32;
typedef unsigned char   UINT8;
typedef enum {FALSE, TRUE} BOOL;
typedef struct tagExifFileInfo
{
        char    Make[32];
        char    Model[32];
        char    Version[32];
        char    DateTime[32];
        char    CopyRight[32];
        UINT    Height;
        UINT    Width;
        UINT    Orientation;
        UINT    ColorSpace;
        UINT    Process;
        UINT    Flash;
        UINT    FocalLengthNum;
        UINT    FocalLengthDen;
        UINT    ExposureTimeNum;
        UINT    ExposureTimeDen;
        UINT    FNumberNum;
        UINT    FNumberDen;
        UINT    ApertureFNumber;
        int             SubjectDistanceNum;
        int             SubjectDistanceDen;
        UINT    CCDWidth;
        int             ExposureBiasNum;
        int             ExposureBiasDen;
        int             WhiteBalance;
        UINT    MeteringMode;
        int             ExposureProgram;
        UINT    ISOSpeedRatings[2];
        UINT    FocalPlaneXResolutionNum;
        UINT    FocalPlaneXResolutionDen;
        UINT    FocalPlaneYResolutionNum;
        UINT    FocalPlaneYResolutionDen;
        UINT    FocalPlaneResolutionUnit;
        UINT    XResolutionNum;
        UINT    XResolutionDen;
        UINT    YResolutionNum;
        UINT    YResolutionDen;
        UINT    RUnit;
        int             BrightnessNum;
        int             BrightnessDen;
        char    UserComments[150];
        UCHAR   GpsLatitudeRef;         
        UCHAR   GpsLatitude[20];                
        UCHAR   GpsLongitudeRef;        
        UCHAR   GpsLongitude[20];               
        UCHAR   GpsAltitude[10];                
}ExifFileInfo;

makeExif.c


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/ruanjian/article-261079-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      • 汪柱
        汪柱

        不惹事自然无事

      • 刘广
        刘广

        而不是再揣测他派了条老船

      • 平田裕一郎
        平田裕一郎

        由于美帝如此“现代化”的军舰飞机的入侵

      热点图片
      拼命载入中...