什么是 Exif?
Exif(Exchangeable image file format)是专门为数码相机的照片设定的,可以记录数码照片的属性信息和拍摄数据。Exif 信息是镶嵌在 JPEG/TIFF 图像文件格式内的一组拍摄参数,它就好像是傻瓜相机的日期打印功能一样,只不过 Exif 信息所记录的资讯更为详尽和完备。Exif 所记录的元数据信息非常丰富,主要包含了以下几类信息:
- 拍摄日期
- 拍摄器材(机身、镜头、闪光灯等)
- 拍摄参数(快门速度、光圈 F 值、ISO 速度、焦距、测光模式等)
- 图像处理参数(锐化、对比度、饱和度、白平衡等)
- 图像描述及版权信息
- GPS 定位数据
- 缩略图
示例:
项目 | 信息(举例) |
制造厂商 | Canon |
相机型号 | Canon EOS-1Ds Mark III |
图象方向 | 正常(upper-left) |
图象分辨率 X | 300 |
图象分辨率 Y | 300 |
分辨率单位 | dpi |
Software | Adobe Photoshop CS Macintosh |
最后异动时间 | 2005:10:06 12:53:19 |
YCbCr Positioning | 2 |
曝光时间 | 0.00800 (1/125) sec |
光圈值 | F22 |
拍摄模式 | 光圈优先 |
ISO 感光值 | 100 |
Exif 信息版本 | 30,32,32,31 |
图象拍摄时间 | 2005:09:25 15:00:18 |
图象存入时间 | 2005:09:25 15:00:18 |
曝光补偿(EV+-) | 0 |
测光模式 | 点测光(Spot) |
闪光灯 | 关闭 |
镜头实体焦长 | 12mm |
Flashpix 版本 | 30,31,30,30 |
图象色域空间 | sRGB |
图象尺寸 X | 5616 pixel |
图象尺寸 Y | 3744 pixel |
0xFFE0–0xFFD9 之间的标识符称为“应用标记”,一般称为 APPn,JPEG 的编码和解码并不会使用这些段,Exif 正是利用这些信息串记录拍摄信息如快门速度、光圈值等。Exif 信息是可以被任意编辑的,因此只有参考的功能。
Exif 包含哪些信息?
Exif/TIFF使用的标签数
下面显示了 Exif/TIFF 使用的标签数,如果这个标签组件数目的上限。CompoNo 一栏就代表这一数值。如果这个数值没有,则说明这儿没有上限值。
IFD0(主图像)使用的标签 | |||||||||||||||||||||||||||||||
标签号 | 标签名 | 格式 | 组件数 | 描述 | |||||||||||||||||||||||||||
0x010e | ImageDescription | ascii string | 用来描述图像.双字节的字符码不能使用,如中文/韩文/日文. | ||||||||||||||||||||||||||||
0x010f | Make | ascii string | 表示数字相机的制造商.在 Exif 标准中,这个标签是可选的,但是在 DCF 中它是必需的. | ||||||||||||||||||||||||||||
0x0110 | Model | ascii string | 表示数字相机的模块代码(型号).在 Exif 标准中,这个标签是可选的,但在 DCF 中它也是必需的. | ||||||||||||||||||||||||||||
0x0112 | Orientation | unsigned short | 1 |
当拍照时,相机相对于场景的方向.在右边表示的是’0th row’以及’0th column’在视觉位置上的关系. |
|||||||||||||||||||||||||||
0x011a | XResolution | unsigned rational | 1 | 图像的显示/打印分辨率.缺省值是 1/72 英寸,但是它没有意义因为个人 PC 在显示/打印图像的时候不使用这个值. | |||||||||||||||||||||||||||
0x011b | YResolution | unsigned rational | 1 | ||||||||||||||||||||||||||||
0x0128 | ResolutionUnit | unsigned short | 1 | XResolution(0x011a)/YResolution(0x011b)的单位.’1’表示没有单位,’2’意味着英寸,’3’表示厘米.缺省值是’2′(英寸). | |||||||||||||||||||||||||||
0x0131 | Software | ascii string | 显示固件的版本号(数字相机的内部控制软件).(固件 Firmware 版本或编辑软件) | DateTime | ascii string | 20 | 图像最后一次被修改时的日期/时间.日期的格式是”YYYY:MM:DD HH:MM:SS”+0x00,一共20个字节.如果没有设置时钟或者数字相机没有时钟,则这个域是用空格来填充.通常,它和DateTimeOriginal(0x9003)具有相同的值 | ||||||||||||||||||||||||
0x013e | WhitePoint | unsigned rational | 2 | 定义图像白点(white point/白点:在彩色分色、照相或摄影时作为色彩平衡测量用途的参考点)的色度(chromaticity).如果图像是用CIE标准照度D65(著名的是’光线/daylight’的国际标准),这个值是’3127/10000,3290/10000′. | |||||||||||||||||||||||||||
0x013f | PrimaryChromaticities | unsigned rational | 6 | 定义图像的原始色度.如果图像使用CCIR推荐709原始色度,则这个值是’640/1000,330/1000,300/1000,600/1000,150/1000,0/1000′. | |||||||||||||||||||||||||||
0x0211 | YCbCrCoefficients | unsigned rational | 3 | 当图像的格式是YCbCr(JPEG的格式),这个值表示转换成RGB格式的一个常量.通常,这个值是’0.299/0.587/0.114′. | |||||||||||||||||||||||||||
0x0213 | YCbCrPositioning | unsigned short | 1 | 当图像的格式是YCbCr并且使用’子采样/Subsampling'(色度数据的剪切值,所有的数字相机都使用),定义了subsampling像素阵列的色度采样点.’1’表示像素阵列的中心,’2’表示基准点. | |||||||||||||||||||||||||||
0x0214 | ReferenceBlackWhite | unsigned rational | 6 | 表示黑点(black point)/白点的参考值.在YCbCr格式中,前两个值是Y的黑点/白点,下两个值是Cb,最后两个值是Cr.而在RGB格式中,前两个表示R的黑点/白点,下两个是G,最后两个是B. | |||||||||||||||||||||||||||
0x8298 | Copyright | ascii string | 表示版权信息 | ||||||||||||||||||||||||||||
0x8769 | ExifOffset | unsigned long | 1 | Exif子IFD的偏移量 |
Exif子IFD使用的标签 | |||||||||||||||||||||||||||||||||||||||||||||||||||
标签号 | 标签名 | 格式 | 组件数 | 描述 | |||||||||||||||||||||||||||||||||||||||||||||||
0x829a | ExposureTime | unsigned rational | 1 | 曝光时间(快门速度的倒数).单位是秒. | |||||||||||||||||||||||||||||||||||||||||||||||
0x829d | FNumber | unsigned rational | 1 | 拍照时的光圈F-number(F-stop). | |||||||||||||||||||||||||||||||||||||||||||||||
0x8822 | ExposureProgram | unsigned short | 1 | 拍照时相机使用的曝光程序.’1’表示手动曝光,’2’表示正常程序曝光,’3’表示光圈优先曝光,’4’表示快门优先曝光,’5’表示创意程序(慢速程序),’6’表示动作程序(高速程序),’7’表示肖像模式,’8’表示风景模式. | |||||||||||||||||||||||||||||||||||||||||||||||
0x8827 | ISOSpeedRatings | unsigned short | 2 | CCD的感光度,等效于Ag-Hr胶片的速率. | |||||||||||||||||||||||||||||||||||||||||||||||
0x9000 | ExifVersion | undefined | 4 | Exif的版本号.用4个ASCII字符来存储.如果图片是基于Exif V2.1的,这个值是”0210″.因为它不是一个用NULL(0x00)来终结的字符串,所以这里的类型是’undefined’. | |||||||||||||||||||||||||||||||||||||||||||||||
0x9003 | DateTimeOriginal | ascii string | 20 | 照片在被拍下来的日期/时间.使用用户的软件是不能被修改这个值的.日期的格式是”YYYY:MM:DD HH:MM:SS”+0x00,一共占用20个字节.如果数字相机没有设置时钟或者数字相机没有时钟,这个域使用空格来填充.在Exif标准中,这个标签是可选的,但是在DCF中是必需的. | |||||||||||||||||||||||||||||||||||||||||||||||
0x9004 | DateTimeDigitized | ascii string | 20 | 照片被数字化时的日期/时间.通常,它与DateTimeOriginal(0x9003)具有相同的值.数据格式是”YYYY:MM:DD HH:MM:SS”+0x00,一共占用20个字节.如果数字相机没有设置时钟或者数字相机没有时钟,这个域使用空格来填充.在Exif标准中,这个标签是可选的,但是在DCF中是必需的. | |||||||||||||||||||||||||||||||||||||||||||||||
0x9101 | ComponentsConfiguration | undefined | 表示的是像素数据的顺序.大多数情况下RGB格式使用’0x04,0x05,0x06,0x00’而YCbCr格式使用’0x01,0x02,0x03,0x00′.0x00:并不存在,其他的对应关系为0x01:Y,0x02:Cb,0x03:Cr,0x04:Red,0x05:Green,0x06:Bllue. | ||||||||||||||||||||||||||||||||||||||||||||||||
0x9102 | CompressedBitsPerPixel | unsigned rational | 1 | JPEG(粗略的估计)的平均压缩率. | |||||||||||||||||||||||||||||||||||||||||||||||
0x9201 | ShutterSpeedValue | signed rational | 1 | 用APEX表示出的快门速度.为了转换成原始的’ShutterSpeed’;则先要计算2的ShutterSpeedValue次幂,然后求倒数.例如,如果ShutterSpeedValue是’4′,快门速度则是1/(24)=1/16秒. | |||||||||||||||||||||||||||||||||||||||||||||||
0x9202 | ApertureValue | unsigned rational | 1 | 拍照时镜头的光圈.单位是APEX.为了转换成普通的F-number(F-stop),则要先计算出根号22(=1.4142)的ApertureValue次幂.例如,如果ApertureValue是’5′,F-number就等于1.41425 =F5.6. | |||||||||||||||||||||||||||||||||||||||||||||||
0x9203 | BrightnessValue | signed rational | 1 | 被拍摄对象的明度,单位是APEX.为了从BrigtnessValue(Bv)计算出曝光量(Ev),你必须加上SensitivityValue(Sv). Ev=Bv+Sv Sv=log2(ISOSpeedRating/3.125) ISO100:Sv=5,ISO200:Sv=6,ISO400:Sv=7,ISO125:Sv=5.32. |
|||||||||||||||||||||||||||||||||||||||||||||||
0x9204 | ExposureBiasValue | signed rational | 1 | 照片拍摄时的曝光补偿.单位是APEX(EV). | |||||||||||||||||||||||||||||||||||||||||||||||
0x9205 | MaxApertureValue | unsigned rational | 1 | 镜头的最大光圈值.你可以通过计算根号2的MaxApertureValue次幂来转换成普通的光圈F-number(跟ApertureValue:0x9202的处理过程一样). | |||||||||||||||||||||||||||||||||||||||||||||||
0x9206 | SubjectDistance | signed rational | 1 | 到焦点的距离,单位是米. | |||||||||||||||||||||||||||||||||||||||||||||||
0x9207 | MeteringMode | unsigned short | 1 | 曝光的测光方法.’0’表示未知,’1’为平均测光,’2’为中央重点测光,’3’是点测光,’4’是多点测光,’5’是多区域测光,’6’部分测光,’255’则是其他. | |||||||||||||||||||||||||||||||||||||||||||||||
0x9208 | LightSource | unsigned short | 1 | 光源,实际上是表示白平衡设置.’0’意味着未知,’1’是日光,’2’是荧光灯,’3’白炽灯(钨丝),’10’闪光灯,’17’标准光A,’18’标准光B,’19’标准光C,’20’D55,’21’D65,’22’D75,’255’为其他. | |||||||||||||||||||||||||||||||||||||||||||||||
0x9209 | Flash | unsigned short | 1 | ‘0’表示闪光灯没有闪光,’1’表示闪光灯闪光,’5’表示闪光但没有检测反射光,’7’表示闪光且检测了反射光. | |||||||||||||||||||||||||||||||||||||||||||||||
0x920a | FocalLength | unsigned rational | 1 | 拍摄照片时的镜头的焦距长度.单位是毫米. | |||||||||||||||||||||||||||||||||||||||||||||||
0x927c | MakerNote | undefined | 制造商的内部数据.一些制造商如Olympus/Nikon/Sanyo等在这个区域中使用IFD格式的数据. | ||||||||||||||||||||||||||||||||||||||||||||||||
0x9286 | UserComment | undefined | 存储用户的注释.这个标签允许使用两字节的德字符或者unicode.前8个字节描述的是字符集.’JIS’是日文(著名的有Kanji). ‘0x41,0x53,0x43,0x49,0x49,0x00,0x00,0x00’:ASCII ‘0x4a,0x49,0x53,0x00,0x00,0x00,0x00,0x00’:JIS ‘0x55,0x4e,0x49,0x43,0x4f,0x44,0x45,0x00’:Unicode ‘0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00’:Undefined |
||||||||||||||||||||||||||||||||||||||||||||||||
0x9290 | SubsecTime | ascii string | 一些数字相机每秒能拍摄2~30张照片,但是DateTime/DateTimeOriginal/DateTimeDigitized标签只能记录到秒单位的时间.SubsecTime标签就是用来记录秒后面的数据(微秒). 例如,DateTimeOriginal=”1996:09:01 09:15:30″,SubSecTimeOriginal=”130″,合并起来的原始的拍摄时间就是”1996:09:01 09:15:30.130″ |
||||||||||||||||||||||||||||||||||||||||||||||||
0x9291 | SubsecTimeOriginal | ascii string | |||||||||||||||||||||||||||||||||||||||||||||||||
0x9292 | SubsecTimeDigitized | ascii string | |||||||||||||||||||||||||||||||||||||||||||||||||
0xa000 | FlashPixVersion | undefined | 4 | 存储FlashPix的版本信息.如果图像数据是基于FlashPix format Ver.1.0,则这个值为”0100″.因为它不是一个用NULL(0x00)来终结的字符串,所以这里的类型是’undefined’. | |||||||||||||||||||||||||||||||||||||||||||||||
0xa001 | ColorSpace | unsigned short | 1 | 定义色彩空间.DCF图像必须使用sRGB色彩空间因此这个值总是’1′.如果这个照片使用了其他的色彩空间,这个值是’65535′:未校准(Uncalibrated). | |||||||||||||||||||||||||||||||||||||||||||||||
0xa002 | ExifImageWidth | unsigned short/long | 1 | 主图像的尺寸大小. | |||||||||||||||||||||||||||||||||||||||||||||||
0xa003 | ExifImageHeight | unsigned short/long | 1 | ||||||||||||||||||||||||||||||||||||||||||||||||
0xa004 | RelatedSoundFile | ascii string | 如果数字相机能够纪录图像的音频数据,则表示音频数据的名字. | ||||||||||||||||||||||||||||||||||||||||||||||||
0xa005 | ExifInteroperabilityOffset | unsigned long | 1 | 表示这是一个扩展”ExifR98″,细节未知.这个值经常是IFD格式的数据.当前这儿有两个目录项,第一个是Tag 0x0001,值是”R98″,下一个是Tag 0x0002,它的值为”0100″. | |||||||||||||||||||||||||||||||||||||||||||||||
0xa20e | FocalPlaneXResolution | unsigned rational | 1 | 表示CCD的像素密度.如果你的相机是百万像素的并且是用低分辨率(如VGA模式)来拍摄照片,这个值可以通过照片的分辨率来重新采样.在这种情况下,FocalPlaneResolution就不是CCD的实际的分辨率. | |||||||||||||||||||||||||||||||||||||||||||||||
0xa20f | FocalPlaneYResolution | unsigned rational | 1 | ||||||||||||||||||||||||||||||||||||||||||||||||
0xa210 | FocalPlaneResolutionUnit | unsigned short | 1 | FocalPlaneXResoluton/FocalPlaneYResolution的单位.’1’表示没有单位,’2’是英寸inch,’3’表示厘米.
注意:一些Fujifilm的数码相机(如.FX2700,FX2900,Finepix4700Z/40i等)使用的值是’3’所以它的单位一定是’厘米’,但是它们的分辨率单位就变成’8.3mm?'(1/3in.?).这是Fuji的BUG?从Finepix4900Z开始这个值就使用’2’了但仍然跟实际的值不吻合. |
|||||||||||||||||||||||||||||||||||||||||||||||
0xa215 | ExposureIndex | unsigned rational | 1 | 跟ISOSpeedRatings(0x8827)一样但是数据类型是unsigned rational.只有Kodak的数字相机使用这个标签来替代ISOSpeedRating,我不知道这是为什么(历史原因?). | |||||||||||||||||||||||||||||||||||||||||||||||
0xa217 | SensingMethod | unsigned short | 1 | 表示图像传感器单元的类型。’2’意味着这是一个芯片颜色区域传感器,几乎所有的数字相机都使用这个类型。 | |||||||||||||||||||||||||||||||||||||||||||||||
0xa300 | FileSource | undefined | 1 | 显示图像来源。值’0x03’表示图像源是数字定格相机。 | |||||||||||||||||||||||||||||||||||||||||||||||
0xa301 | SceneType | undefined | 1 | 表示拍摄场景的类型。值’0x01’表示图像是通过相机直接拍摄出来的。 | |||||||||||||||||||||||||||||||||||||||||||||||
0xa302 | CFAPattern | undefined | 表示色彩过滤阵列(CFA)几何模式。
色彩过滤和CFA值之间的关系。
例如,普通的RGB过滤器使用左表的副本,这个值是’0x0002,0x0002,0x00,0x01,0x01,0x02’。 |
InteroperabilityIFD使用的标签 | ||||
标签号 | 标签名 | 格式 | 组件号 | 描述 |
0x0001 | InteroperabilityIndex | Ascii string | 4 | 如果这个IFD是主图像的IFD并且文件内容采用的是Exif R98 v1.0,那这个值就是”R98″。如果是所略图的,这个值则是”THM”。 |
0x0002 | InteroperabilityVersion | Undefined | 4 | 纪录interoperability的版本。”0100″表示版本1.00。 |
0x1000 | RelatedImageFileFormat | Ascii string | any | 纪录图像文件的文件格式。这个值是ascii字符串(如。”Exif JPEG Ver.2.1″)。 |
0x1001 | RelatedImageWidth | Short or Long | 1 | 纪录图像的大小尺寸。 |
0x1001 | RelatedImageLength | Short or Long | 1 |
IFD1(缩略图)使用的标签 | ||||
标签号 | 标签名 | 格式 | 组件数 | 描述 |
0x0100 | ImageWidth | unsigned short/long | 1 | 表示缩略图的大小。 |
0x0101 | ImageLength | unsigned short/long | 1 | |
0x0102 | BitsPerSample | unsigned short | 3 | 当图像格式没有经过压缩,这个值表示每像素的比特位的数目。通常这个值是’8,8,8′ |
0x0103 | Compression | unsigned short | 1 | 代表压缩的方式。’1’表示非压缩,’6’表示JPEG压缩格式。 |
0x0106 | PhotometricInterpretation | unsigned short | 1 | 表示图像数据组件的色彩空间。’1’意味着单色,’2’表示RGB,’6’表示YCbCr。 |
0x0111 | StripOffsets | unsigned short/long | 如果图像格式没有经过压缩,这个值表示的是到图像数据的偏移量。在图像数据被分割的情况下它有多个值。 | |
0x0115 | SamplesPerPixel | unsigned short | 1 | 如果图像格式没有经过压缩,这个值表示每个像素中存储的组件数目。在彩色图像中,此值为’3’。 |
0x0116 | RowsPerStrip | unsigned short/long | 1 | 如果图像格式没有经过压缩并且图像被分割存储,这个值表示每条数据带存储了多少行数据。如果图像没有被分割,它与ImageLength(0x0101)同值。 |
0x0117 | StripByteConunts | unsigned short/long | 如果图像格式没有经过压缩并且图像被分割存储,这个值表示每条数据带使用了多少字节的数据且有多个值。如果图像没有被分割,它只有一个且表示为图像的所有数据的大小。 | |
0x011a | XResolution | unsigned rational | 1 | 图像的显示/打印分辨率。很多的数字相机都使用 1/72 英寸的规格,但对于个人 PC 来讲这个值没有任何意义因为在显示/打印的时候不使用这个值。 |
0x011b | YResolution | unsigned rational | 1 | |
0x011c | PlanarConfiguration | unsigned short | 1 | 如果图像格式是非压缩 YCbCr 的,这个值表示 YCbCr 数据的字节对齐顺序。’1’,表示 Y/Cb/Cr 值是一个 chunky format,对于每个子采样像素都是连续的。’2’,则表示 Y/Cb/Cr 值被分割存储在 Y plane/Cb plane/Cr plane 格式中。 |
0x0128 | ResolutionUnit | unsigned short | 1 | XResolution (0x011a)/YResolution (0x011b) 的单位。’1′ 表示英寸,’2′ 表示厘米。 |
0x0201 | JpegIFOffset | unsigned long | 1 | 当图像格式是 JPEG 时,这个值表示到 JPEG 数据的偏移量。 |
0x0202 | JpegIFByteCount | unsigned long | 1 | 当图像格式是 JPEG 时,表示 JPEG 图像的数据大小。 |
0x0211 | YCbCrCoefficients | unsigned rational | 3 | 当图像格式是 YCbCr 时,它表示转换成 RGB 格式的一个常量值。通常是 ‘0.299/0.587/0.114’。 |
0x0212 | YCbCrSubSampling | unsigned short | 2 | 当图像格式是 YCbCr 时并且使用子采样(色度数据的剪切值,所有的数字相机都使用)时,这个值表示有多少个色度数据被采样了。首先第一个值表示水平的,下一个值表示垂直的采样率。 |
0x0213 | YCbCrPositioning | unsigned short | 1 | 当图像格式是 YCbCr 时并且使用子采样(色度数据的剪切值,所有的数字相机都使用)时,这个值定义了被采样的像素阵列的色度采样点。’1′ 表示像素阵列的中心,’2′ 表示基准点 (0,0)。 |
0x0214 | ReferenceBlackWhite | unsigned rational | 6 | 表示黑点/白点的参考值。在 YCbCr 格式的情况下,前两个表示了 Y 的黑/白,下两个是 Cb,最后两个是 Cr。在 RGB 的情况下,前两个表示 R 的黑/白,下两个是 G,最后两个是 B。 |
MiscTags | ||||
标签号 | 标签名 | 格式 | 组件数 | 描述 |
0x00fe | NewSubfileType | unsigned long | 1 | |
0x00ff | SubfileType | unsigned short | 1 | |
0x012d | TransferFunction | unsigned short | 3 | |
0x013b | Artist | ascii string | ||
0x013d | Predictor | unsigned short | 1 | |
0x0142 | TileWidth | unsigned short | 1 | |
0x0143 | TileLength | unsigned short | 1 | |
0x0144 | TileOffsets | unsigned long | ||
0x0145 | TileByteCounts | unsigned short | ||
0x014a | SubIFDs | unsigned long | ||
0x015b | JPEGTables | undefined | ||
0x828d | CFARepeatPatternDim | unsigned short | 2 | |
0x828e | CFAPattern | unsigned byte | ||
0x828f | BatteryLevel | unsigned rational | 1 | |
0x83bb | IPTC/NAA | unsigned long | ||
0x8773 | InterColorProfile | undefined | ||
0x8824 | SpectralSensitivity | ascii string | ||
0x8825 | GPSInfo | unsigned long | 1 | |
0x8828 | OECF | undefined | ||
0x8829 | Interlace | unsigned short | 1 | |
0x882a | TimeZoneOffset | signed short | 1 | |
0x882b | SelfTimerMode | unsigned short | 1 | |
0x920b | FlashEnergy | unsigned rational | 1 | |
0x920c | SpatialFrequencyResponse | undefined | ||
0x920d | Noise | undefined | ||
0x9211 | ImageNumber | unsigned long | 1 | |
0x9212 | SecurityClassification | ascii string | 1 | |
0x9213 | ImageHistory | ascii string | ||
0x9214 | SubjectLocation | unsigned short | 4 | |
0x9215 | ExposureIndex | unsigned rational | 1 | |
0x9216 | TIFF/EPStandardID | unsigned byte | 4 | |
0xa20b | FlashEnergy | unsigned rational | 1 | |
0xa20c | SpatialFrequencyResponse | unsigned short | 1 | |
0xa214 | SubjectLocation | unsigned short | 1 |
Exif的读取及修改及删除
读取示例
from PIL import Image from PIL.ExifTags import TAGS for (k, v) in Image.open('DSC03911.JPG')._getexif().iteritems(): print '%s = %s' % (TAGS.get(k), v) import exifread f = open("DSC03911.JPG", 'rb') tags = exifread.process_file(f) for tag in tags.keys(): print tag, tags[tag]
其他工具:
Exif信息的利用
- 读取图片经纬度匹配地理位置
- 读取设备,确定图片质量