相关方法和属性:
IGPImage.GetPropertyItem(); { 获取属性项 } IGPImage.SetPropertyItem(); { 设置属性项 } IGPImage.RemovePropertyItem(); { 删除属性项 } IGPImage.PropertyIdList; { 获取图像属性 ID 数组 } IGPImage.PropertyItems; { 获取图像属性集合 }
IGPImage.PropertyItems 指向一个 IGPPropertyItems 类型的数组;
IGPPropertyItem 是 IGPPropertyItems 属性数组中的一个属性(或叫属性项).
每个属性项都包含:
IGPPropertyItem.Id; { 属性 ID, 也就是属性类别, 譬如是标题还是版权说明等 } IGPPropertyItem.ValueType; { 属性的数据类型 } IGPPropertyItem.Length; { 属性数据长度 } IGPPropertyItem.Value; { 属性数据指针 }
IGPImage.PropertyIdList 只是获取属性 ID 的数组.
IGPPropertyItem.ValueType 常数:
PropertyTagTypeByte = 1; { 字节数组 } PropertyTagTypeASCII = 2; { PAnsiChar } PropertyTagTypeShort = 3; { Word } PropertyTagTypeLong = 4; { Cardinal } PropertyTagTypeRational = 5; { Cardinal/Cardinal; 第一个数是分子, 第二个数是分母 } PropertyTagTypeUndefined = 7; { 可包含任何数据类型的字节数组 } PropertyTagTypeSLONG = 9; { Integer } PropertyTagTypeSRational = 10; { Integer/Integer; 第一个数是分子, 第二个数是分母 }
IGPPropertyItem.Id 常数:
PropertyTagGpsVer = $0000 PropertyTagGpsLatitudeRef = $0001 PropertyTagGpsLatitude = $0002 PropertyTagGpsLongitudeRef = $0003 PropertyTagGpsLongitude = $0004 PropertyTagGpsAltitudeRef = $0005 PropertyTagGpsAltitude = $0006 PropertyTagGpsGpsTime = $0007 PropertyTagGpsGpsSatellites = $0008 PropertyTagGpsGpsStatus = $0009 PropertyTagGpsGpsMeasureMode = $000A PropertyTagGpsGpsDop = $000B PropertyTagGpsSpeedRef = $000C PropertyTagGpsSpeed = $000D PropertyTagGpsTrackRef = $000E PropertyTagGpsTrack = $000F PropertyTagGpsImgDirRef = $0010 PropertyTagGpsImgDir = $0011 PropertyTagGpsMapDatum = $0012 PropertyTagGpsDestLatRef = $0013 PropertyTagGpsDestLat = $0014 PropertyTagGpsDestLongRef = $0015 PropertyTagGpsDestLong = $0016 PropertyTagGpsDestBearRef = $0017 PropertyTagGpsDestBear = $0018 PropertyTagGpsDestDistRef = $0019 PropertyTagGpsDestDist = $001A PropertyTagNewSubfileType = $00FE PropertyTagSubfileType = $00FF PropertyTagImageWidth = $0100 PropertyTagImageHeight = $0101 PropertyTagBitsPerSample = $0102 PropertyTagCompression = $0103 PropertyTagPhotometricInterp = $0106 PropertyTagThreshHolding = $0107 PropertyTagCellWidth = $0108 PropertyTagCellHeight = $0109 PropertyTagFillOrder = $010A PropertyTagDocumentName = $010D PropertyTagImageDescription = $010E PropertyTagEquipMake = $010F PropertyTagEquipModel = $0110 PropertyTagStripOffsets = $0111 PropertyTagOrientation = $0112 PropertyTagSamplesPerPixel = $0115 PropertyTagRowsPerStrip = $0116 PropertyTagStripBytesCount = $0117 PropertyTagMinSampleValue = $0118 PropertyTagMaxSampleValue = $0119 PropertyTagXResolution = $011A PropertyTagYResolution = $011B PropertyTagPlanarConfig = $011C PropertyTagPageName = $011D PropertyTagXPosition = $011E PropertyTagYPosition = $011F PropertyTagFreeOffset = $0120 PropertyTagFreeByteCounts = $0121 PropertyTagGrayResponseUnit = $0122 PropertyTagGrayResponseCurve = $0123 PropertyTagT4Option = $0124 PropertyTagT6Option = $0125 PropertyTagResolutionUnit = $0128 PropertyTagPageNumber = $0129 PropertyTagTransferFunction = $012D PropertyTagSoftwareUsed = $0131 PropertyTagDateTime = $0132 PropertyTagArtist = $013B PropertyTagHostComputer = $013C PropertyTagPredictor = $013D PropertyTagWhitePoint = $013E PropertyTagPrimaryChromaticities = $013F PropertyTagColorMap = $0140 PropertyTagHalftoneHints = $0141 PropertyTagTileWidth = $0142 PropertyTagTileLength = $0143 PropertyTagTileOffset = $0144 PropertyTagTileByteCounts = $0145 PropertyTagInkSet = $014C PropertyTagInkNames = $014D PropertyTagNumberOfInks = $014E PropertyTagDotRange = $0150 PropertyTagTargetPrinter = $0151 PropertyTagExtraSamples = $0152 PropertyTagSampleFormat = $0153 PropertyTagSMinSampleValue = $0154 PropertyTagSMaxSampleValue = $0155 PropertyTagTransferRange = $0156 PropertyTagJPEGProc = $0200 PropertyTagJPEGInterFormat = $0201 PropertyTagJPEGInterLength = $0202 PropertyTagJPEGRestartInterval = $0203 PropertyTagJPEGLosslessPredictors = $0205 PropertyTagJPEGPointTransforms = $0206 PropertyTagJPEGQTables = $0207 PropertyTagJPEGDCTables = $0208 PropertyTagJPEGACTables = $0209 PropertyTagYCbCrCoefficients = $0211 PropertyTagYCbCrSubsampling = $0212 PropertyTagYCbCrPositioning = $0213 PropertyTagREFBlackWhite = $0214 PropertyTagGamma = $0301 PropertyTagICCProfileDescriptor = $0302 PropertyTagSRGBRenderingIntent = $0303 PropertyTagImageTitle = $0320 PropertyTagResolutionXUnit = $5001 PropertyTagResolutionYUnit = $5002 PropertyTagResolutionXLengthUnit = $5003 PropertyTagResolutionYLengthUnit = $5004 PropertyTagPrintFlags = $5005 PropertyTagPrintFlagsVersion = $5006 PropertyTagPrintFlagsCrop = $5007 PropertyTagPrintFlagsBleedWidth = $5008 PropertyTagPrintFlagsBleedWidthScale = $5009 PropertyTagHalftoneLPI = $500A PropertyTagHalftoneLPIUnit = $500B PropertyTagHalftoneDegree = $500C PropertyTagHalftoneShape = $500D PropertyTagHalftoneMisc = $500E PropertyTagHalftoneScreen = $500F PropertyTagJPEGQuality = $5010 PropertyTagGridSize = $5011 PropertyTagThumbnailFormat = $5012 PropertyTagThumbnailWidth = $5013 PropertyTagThumbnailHeight = $5014 PropertyTagThumbnailColorDepth = $5015 PropertyTagThumbnailPlanes = $5016 PropertyTagThumbnailRawBytes = $5017 PropertyTagThumbnailSize = $5018 PropertyTagThumbnailCompressedSize = $5019 PropertyTagColorTransferFunction = $501A PropertyTagThumbnailData = $501B PropertyTagThumbnailImageWidth = $5020 PropertyTagThumbnailImageHeight = $5021 PropertyTagThumbnailBitsPerSample = $5022 PropertyTagThumbnailCompression = $5023 PropertyTagThumbnailPhotometricInterp = $5024 PropertyTagThumbnailImageDescription = $5025 PropertyTagThumbnailEquipMake = $5026 PropertyTagThumbnailEquipModel = $5027 PropertyTagThumbnailStripOffsets = $5028 PropertyTagThumbnailOrientation = $5029 PropertyTagThumbnailSamplesPerPixel = $502A PropertyTagThumbnailRowsPerStrip = $502B PropertyTagThumbnailStripBytesCount = $502C PropertyTagThumbnailResolutionX = $502D PropertyTagThumbnailResolutionY = $502E PropertyTagThumbnailPlanarConfig = $502F PropertyTagThumbnailResolutionUnit = $5030 PropertyTagThumbnailTransferFunction = $5031 PropertyTagThumbnailSoftwareUsed = $5032 PropertyTagThumbnailDateTime = $5033 PropertyTagThumbnailArtist = $5034 PropertyTagThumbnailWhitePoint = $5035 PropertyTagThumbnailPrimaryChromaticities = $5036 PropertyTagThumbnailYCbCrCoefficients = $5037 PropertyTagThumbnailYCbCrSubsampling = $5038 PropertyTagThumbnailYCbCrPositioning = $5039 PropertyTagThumbnailRefBlackWhite = $503A PropertyTagThumbnailCopyRight = $503B PropertyTagLuminanceTable = $5090 PropertyTagChrominanceTable = $5091 PropertyTagFrameDelay = $5100 PropertyTagLoopCount = $5101 PropertyTagGlobalPalette = $5102 PropertyTagIndexBackground = $5103 PropertyTagIndexTransparent = $5104 PropertyTagPixelUnit = $5110 PropertyTagPixelPerUnitX = $5111 PropertyTagPixelPerUnitY = $5112 PropertyTagPaletteHistogram = $5113 PropertyTagCopyright = $8298 PropertyTagExifExposureTime = $829A PropertyTagExifFNumber = $829D PropertyTagExifIFD = $8769 PropertyTagICCProfile = $8773 PropertyTagExifExposureProg = $8822 PropertyTagExifSpectralSense = $8824 PropertyTagGpsIFD = $8825 PropertyTagExifISOSpeed = $8827 PropertyTagExifOECF = $8828 PropertyTagExifVer = $9000 PropertyTagExifDTOrig = $9003 PropertyTagExifDTDigitized = $9004 PropertyTagExifCompConfig = $9101 PropertyTagExifCompBPP = $9102 PropertyTagExifShutterSpeed = $9201 PropertyTagExifAperture = $9202 PropertyTagExifBrightness = $9203 PropertyTagExifExposureBias = $9204 PropertyTagExifMaxAperture = $9205 PropertyTagExifSubjectDist = $9206 PropertyTagExifMeteringMode = $9207 PropertyTagExifLightSource = $9208 PropertyTagExifFlash = $9209 PropertyTagExifFocalLength = $920A PropertyTagExifMakerNote = $927C PropertyTagExifUserComment = $9286 PropertyTagExifDTSubsec = $9290 PropertyTagExifDTOrigSS = $9291 PropertyTagExifDTDigSS = $9292 PropertyTagExifFPXVer = $A000 PropertyTagExifColorSpace = $A001 PropertyTagExifPixXDim = $A002 PropertyTagExifPixYDim = $A003 PropertyTagExifRelatedWav = $A004 PropertyTagExifInterop = $A005 PropertyTagExifFlashEnergy = $A20B PropertyTagExifSpatialFR = $A20C PropertyTagExifFocalXRes = $A20E PropertyTagExifFocalYRes = $A20F PropertyTagExifFocalResUnit = $A210 PropertyTagExifSubjectLoc = $A214 PropertyTagExifExposureIndex = $A215 PropertyTagExifSensingMethod = $A217 PropertyTagExifFileSource = $A300 PropertyTagExifSceneType = $A301 PropertyTagExifCfaPattern = $A302
遍历属性:
uses GdiPlus; procedure TForm1.Button1Click(Sender: TObject); var Image: IGPImage; PropertyItem: IGPPropertyItem; begin Image := TGPImage.Create('C:\GdiPlusImg\FakePhoto.jpg'); Memo1.Clear; for PropertyItem in Image.PropertyItems do with Memo1.Lines do begin Add(Format('Id: $%.4x', [PropertyItem.Id])); Add(Format('ValueType: %d', [PropertyItem.ValueType])); Add(Format('Length: %d', [PropertyItem.Length])); Add(Format('Value: $%p', [PropertyItem.Value])); Add(EmptyStr); end; end;
只遍历属性 ID:
uses GdiPlus; procedure TForm1.Button1Click(Sender: TObject); var Image: IGPImage; PropID: Cardinal; begin Image := TGPImage.Create('C:\GdiPlusImg\FakePhoto.jpg'); Memo1.Clear; for PropID in Image.PropertyIdList do begin Memo1.Lines.Add(Format('$%.4x', [PropID])); end; end;
下面例子测试了 SetPropertyItem、GetPropertyItem、RemovePropertyItem 三个方法.
先给图像添加了标题属性(其属性 ID 是 PropertyTagImageTitle);
保存图像后重新打开再读取这个属性;
删除这个属性后有试着找了找...
uses GdiPlus; procedure TForm1.Button1Click(Sender: TObject); var Image: IGPImage; PropTitle: IGPPropertyItem; Title: AnsiString; i: Integer; begin ChDir('C:\GdiPlusImg\'); Image := TGPImage.Create('FakePhoto.jpg'); // Title := 'New Title'; PropTitle := TGPPropertyItem.Create; PropTitle.Id := PropertyTagImageTitle; PropTitle.ValueType := PropertyTagTypeASCII; PropTitle.Length := Length(Title) + 1; PropTitle.Value := PAnsiChar(Title); Image.SetPropertyItem(PropTitle); Image.Save('FakePhoto_Test.jpg', TGPImageFormat.Jpeg); Image := nil; // PropTitle := nil; Image := TGPImage.Create('FakePhoto_Test.jpg'); PropTitle := Image.GetPropertyItem(PropertyTagImageTitle); ShowMessage(PAnsiChar(PropTitle.Value)); { New Title } // Image.RemovePropertyItem(PropertyTagImageTitle); for i := 0 to Image.PropertyIdList.Count - 1 do if Image.PropertyIdList[i] = PropertyTagImageTitle then ShowMessage('检测到属性标题存在'); { 已删除不会再有了 } end;