
测试环境: 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
太棒了
而不是再揣测他派了条老船
由于美帝如此“现代化”的军舰飞机的入侵
不惹事自然无事