jpg文件读取.docx
- 文档编号:8375940
- 上传时间:2023-01-30
- 格式:DOCX
- 页数:43
- 大小:30.35KB
jpg文件读取.docx
《jpg文件读取.docx》由会员分享,可在线阅读,更多相关《jpg文件读取.docx(43页珍藏版)》请在冰豆网上搜索。
jpg文件读取
jpg文件读取.txt我的优点是:
我很帅;但是我的缺点是:
我帅的不明显。
什么是幸福?
幸福就是猫吃鱼,狗吃肉,奥特曼打小怪兽!
令堂可是令尊表姐?
我是胖人,不是粗人。
////////////////////////////////////////////////////////////////////////////////
//.h 文件
/********************************************************************
Copyright@版权所有@1998-2005hengai。
保留所有权利。
********************************************************************/
/********************************************************************
文件说明:
能够读取JPG图像文件中的EXIF信息
文件名称:
exif.h
版本号:
1.0.0
作者:
hengai
修改纪录:
使用方法:
包含此头文件,然后调用函数
intEXIF_Read(LPCTSTRpszJpgFileName,EXIFINFO*pExifInfo)
即可获取EXIF信息。
EXIF信息包含在参数pExifInfo中
在定义了#defineEXIF_OUTPUT_ERRMSG(默认下已经定义)后可以使用
LPCTSTREXIF_GetErrorString();获取出错信息
*********************************************************************
//////////////////////////////////////////////////////////////////////////
#ifndefSTATIC
#defineSTATICstatic
#endif
#defineEXIF_OUTPUT_ERRMSG//定义是否输出出错信息
//////////////////////////////////////////////////////////////////////////
//定义常量
#defineMAX_COMMENT1000//最大的注释字符串长度
//////////////////////////////////////////////////////////////////////////
//写入注释时,表明注释的类型,如ASCII,UNICODE等
typedefenumECT{
CT_ASCII=0,
CT_UNICODE,
CT_JIS,
CT_UNDEFINE
}COMMENT_TYPE;
//////////////////////////////////////////////////////////////////////////
//定义需要的结构体
#defineET_NOT_CLOSE_FILE0x00000001//最后不关闭打开的文件句柄
#defineET_MALLOC_THUMBNAIL0x00000002//拷贝缩略图的数据,调用者需要使用free()
#defineET_MALLOC_USERCOM0x00000004//是否拷贝用户注释,调用者需要使用free()
#defineET_MALLOC_MAKERCOM0x00000008//是否拷贝厂商注释,调用者需要使用free()
//JPG文件中的读入后的EXIFF信息保存到这个结构体中
typedefstructtag_ExifInfo{
DWORDdwExifType;//取值为ET_NOT_CLOSE_FILE|ET_MALLOC_THUMBNAIL,....
DWORDdwExifType2;
charVersion[5];//EXIF信息版本
charCameraMake[32];//DC制造商
charCameraModel[40];//DC型号
charDateTime[20];//JPG文件日期
charDateTimeDigitized[20];//JPG文件被其它软件修改日期
intHeight,Width;//图像高度、宽度
intOrientation;//拍摄方向,例如相机向左手方向旋转后拍摄的
intIsColor;//
intProcess;//被处理
intFlashUsed;//是否使用闪光灯
floatFocalLength;//焦距
floatExposureTime;//曝光时间(快门速度)
floatApertureFNumber;//光圈数
floatDistance;//拍摄物体距离
floatCCDWidth;//CCD大小
floatExposureBias;//曝光补偿
intWhitebalance;//白平衡
intMeteringMode;//测光模式
intExposureProgram;//曝光
intISOequivalent;//ISO
intCompressionLevel;//压缩
floatFocalplaneXRes;//焦平面X轴分辨率
floatFocalplaneYRes;//焦平面Y轴分辨率
floatFocalplaneUnits;//焦平面分辨率单位
floatXresolution;//X轴分辨率
floatYresolution;//Y轴分辨率
floatResolutionUnit;//分辨率单位
floatBrightness;//亮度
charComments[MAX_COMMENT];//注释
DWORDUserCOMLength;//用户注释长度。
如果==0表示没有用户注释
char*UserCOM;//用户注释
//if(dwExifType&ET_MALLOC_USERCOM==TRUE)这个数值保存了用户注释数据,调用者需要使用free()
//否则为用户注释的偏移量(相对于文件起始0处)
DWORDMakerCOMLength;//厂商注释长度。
如果==0表示没有厂商注释
char*MakerCOM;//厂商注释
//if(dwExifType&ET_MALLOC_MAKERCOM==TRUE)这个数值保存了厂商注释数据,调用者需要使用free()
//否则为厂商注释的偏移量(注意:
是在当前SECTION中的偏移量,不是相对整个文件的)
UCHAR*ThumbnailPointer;//缩略图数据。
//if(dwExifType&ET_MALLOC_THUMBNAIL==TRUE)这个数值保存了缩略图的数据
//否则为一个DWORD(需要强制转换)表示缩略图在JPG文件中的偏移值(相对于文件起始0处)
DWORDThumbnailSize;//缩略图的大小(字节流ThumbnailPointer的长度)
//如果<=0表示该JPG文件没有缩略图
HFILEhJpgFileHandle;//返回打开的JPG文件句柄。
必须dwExifType&ET_NOT_CLOSE_FILE==TRUE才是有效句柄
//用户需要使用CloseHandle(hJpgFileHandle)来关闭这个句柄
BOOLIsExif;//是否存在EXIF信息
}EXIFINFO;
//////////////////////////////////////////////////////////////////////////
//接口函数
intEXIF_Read(LPCTSTRpszJpgFileName,EXIFINFO*pExifInfo);
LPCTSTREXIF_GetErrorString();
intEXIF_AddUserComments(LPCTSTRpszJpgFileName,LPCTSTRpszUserComments,DWORDdwCommentLength,COMMENT_TYPEnCommentType);
////////////////////////////////////////////////////////////////////////
//.c文件
/********************************************************************
Copyright@版权所有@1998-2005HENGAI。
保留所有权利。
********************************************************************/
/********************************************************************
文件说明:
文件名称:
exif.c
版本号:
1.0.0
作者:
hengai
修改纪录:
*********************************************************************/
#include"exif.h"
//////////////////////////////////////////////////////////////////////////
//读取EXIF过程中需要的结构体
typedefstructtag_Section_t{
UCHAR*Data;
intType;
unsignedSize;
}Section_t;
//////////////////////////////////////////////////////////////////////////
#ifdefEXIF_OUTPUT_ERRMSG
STATICTCHARm_szLastError[256];//这里保存了出错的信息
#defineEXIF_ERR_OUT(str_err)strcpy(m_szLastError,str_err);
LPCTSTREXIF_GetErrorString()
{
return(LPCTSTR)m_szLastError;
}
#else
#defineEXIF_ERR_OUT
LPCTSTREXIF_GetErrrorString()
{
return"Plese#defineEXIT_ERR_OUTinexif.h";
}
#endif
STATICEXIFINFO*m_pExifInfo=0;//
STATICintm_MotorolaOrder=0;//
STATICintm_ExifImageWidth=0;//
//////////////////////////////////////////////////////////////////////////
/*Describesformatdescriptor*/
staticconstintm_BytesPerFormat[]={0,1,1,2,4,8,1,1,2,4,8,4,8};
#defineNUM_FORMATS12
#defineFMT_BYTE1//FormatByte
#defineFMT_STRING2
#defineFMT_USHORT3
#defineFMT_ULONG4
#defineFMT_URATIONAL5
#defineFMT_SBYTE6
#defineFMT_UNDEFINED7
#defineFMT_SSHORT8
#defineFMT_SLONG9
#defineFMT_SRATIONAL10
#defineFMT_SINGLE11
#defineFMT_DOUBLE12
//////////////////////////////////////////////////////////////////////////
#defineMAX_SECTIONS20//JPG文件中能够允许的最多SECTION个数
#ifndefM_SOI
#defineM_SOF00xC0//StartOfFrameN
#defineM_SOF10xC1//Nindicateswhichcompressionprocess
#defineM_SOF20xC2//OnlySOF0-SOF2arenowincommonuse
#defineM_SOF30xC3
#defineM_SOF50xC5//NB:
codesC4andCCareNOTSOFmarkers
#defineM_SOF60xC6
#defineM_SOF70xC7
#defineM_SOF90xC9
#defineM_SOF100xCA
#defineM_SOF110xCB
#defineM_SOF130xCD
#defineM_SOF140xCE
#defineM_SOF150xCF
#defineM_SOI0xD8//StartOfImage(beginningofdatastream)
#defineM_EOI0xD9//EndOfImage(endofdatastream)
#defineM_SOS0xDA//StartOfScan(beginscompresseddata)
#defineM_JFIF0xE0//Jfifmarker
#defineM_EXIF0xE1//Exifmarker
#defineM_COM0xFE//COMment
//定义APP标识(SECTION)
#defineM_APP00xE0
#defineM_APP10xE1
#defineM_APP20xE2
#defineM_APP30xE3
#defineM_APP40xE4
#defineM_APP50xE5
#defineM_APP60xE6
//...
#endif
//Describestagvalues
//注意:
下面的定义是按照IntelCPU来定义的,也就是说所有的都是高位在后,
//这样的定义可能与EXIF白皮书上的定义不一致。
例如白皮书上把TAG_MAKE定义为0F01
//下面是主要信息
#defineTAG_MAKE0x010F//相机DC制造商
#defineTAG_MODEL0x0110//DC型号
#defineTAG_ORIENTATION0x0112//拍摄时方向,例如向左手旋转DC90度拍摄照片
#defineTAG_XRESOLUTION0x011A//X轴分辨率
#defineTAG_YRESOLUTION0x011B//Y轴分辨率
#defineTAG_RESOLUTIONUNIT0x0128//分辨率单位,例如inch,cm
#defineTAG_DATATIME0x0132//日期时间
#defineTAG_YBCR_POSITION0x0213//YCbCr位置控制,例如居中
#defineTAG_COPYRIGHT0x8298//版权
#defineTAG_EXIF_OFFSET0x8769//EXIF偏移,这时候相当于处理一个新的EXIF信息
//
#defineTAG_IMAGEWIDTH0x0001//图像宽度
#defineTAG_IMAGEHEIGHT0x0101//图像高度
//BOOKMARK
//辅助信息
#defineTAG_EXPOSURETIME0x829A//曝光时间,例如1/30秒
#defineTAG_FNUMBER0x829D//光圈,例如F2.8
#defineTAG_EXIF_VERSION0x9000//EXIF信息版本
#defineTAG_DATETIME_ORIGINAL0x9003//照片拍摄时间,例如2005-10-1311:
09:
35
#defineTAG_DATATIME_DIGITIZED0x9004//相片被其它图像修改软件修改后的时间,例如2005-10-1311:
36:
35
#defineTAG_COMPONCONFIG0x9101//ComponentsConfiguration色彩空间配置
#defineTAG_COMPRESS_BIT0x9202//每像素压缩位数
#defineTAG_SHUTTERSPEED0x9201//快门速度,例如1/30秒
#defineTAG_APERTURE0x9202//光圈值,例如F2.8
#defineTAG_BRIGHTNESS0x9203//亮度
#defineTAG_EXPOSURE_BIAS0x9204//曝光补偿,例如EV0.0
#defineTAG_MAXAPERTURE0x9205//最大光圈值,例如F2.8
#defineTAG_SUBJECT_DISTANCE0x9206//拍摄物距离,例如3.11米
#defineTAG_METERING_MODE0x9207//测光模式,例如矩阵
#defineTAG_WHITEBALANCE0x9208//LightSource白平衡
#defineTAG_FLASH0x9209//是否使用闪光灯
#defineTAG_FOCALLENGTH0x920A//焦距,例如7.09mm
#defineTAG_USERCOMMENT0x9286//用户注释
#defineTAG_MAKE_COMMENT0x927C//厂商注释。
这个版本不提供(2005-10-13)
#defineTAG_SUBSECTIME0x9290//SubSecTime
#defineTAG_SUBTIME_ORIGINAL0x9291//SubSecTimeOriginal
#defineTAG_SUBTIME_DIGITIZED0x9292//SubSecTimeDigitized
#defineTAG_FLASHPIXVERSION0x00A0//FlashPix版本
#defineTAG_COLORSPACE0x01A0//色彩空间,例如sRGB
#defineTAG_PIXEL_XDIMENSION0x02A0//
#defineTAG_PIXEL_YDIMENSION0x03A0//
#defineTAG_
//EXIFR98
//缩略图
#defineTAG_INTEROP_OFFSET0xa005//偏移
#defineTAG_FOCALPLANEXRES0xA20E//焦平面X轴分辨率,例如1024000/278
#defineTAG_FOCALPLANEYRES0xA20F//焦平面X轴分辨率,例如768000/209
#defineTAG_FOCALPLANEUNITS0xA210//焦平面分辨率单位
#defineTAG_EXIF_IMAGEWIDTH0xA002//EXIF图像宽度(就是这张JPG图像)
#defineTAG_EXIF_IMAGELENGTH0xA003//EXIF图像高度
#defineTAG_EXPOSURE_PROGRAM0x8822//
#defineTAG_ISO_EQUIVALENT0x8827//
#defineTAG_COMPRESSION_LEVEL0x9102//
#defineTAG_THUMBNAIL_OFFSET0x0201//缩略图偏移
#defineTAG_THUMBNAIL_LENGTH0x0202//缩略图大小
#defineTAG_GPS_VERSIONID0x0000//GPS版本
#defineTAG_GPS_LATITUDEREF0x0001//纬度参考,例如南纬
#defineTAG_GPS_LATITUDE0x0002//纬度值
#defineTAG_GPS_LONGITUDEREF0x0003//经度参考,例如东经
#defineTAG_GPS_LONGITUDE0x0004//经度值
#defineTAG_GPS_ALTITUDEREF0x0005//海拔高度参考
#defineTAG_GPS_ALTITUDE0x0006//海拔
#defineTAG_GPS_TIMESTAMP0x0007//时间戳
#defineTAG_GPS_SATELLITES0x0008//卫星
#defineTAG_GPS_STATUS0x0009//状态
#defineTAG_GPS_MEASUREMODE0x000A//
#defineTAG_GPS_DOP0x000B//
#defineTAG_GPS_SPEEDREF0x000C//
#defineTAG_GPS_SPEED0x000D//
#defineTAG_GPS_TRACKREF0x000E//
#defineTAG_GPS_TRACK0x000F//
#defineTAG_GPS_IMGDIRECTIONREF0x0010//
#defineTAG_GPS_IMGDIRECTION0x0011//
#defineTAG_GPS_MAPDATUM0x0012//
#defineTAG_GPS_DESTLATITUDEREF0x0013//
#defineTAG_GPS_DESTLATITUDE0x0014//
#defineTAG_GPS_DESTLONGITUDEREF0x0015//
#defineTAG_GPS_DESTLONGI
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- jpg 文件 读取