相关方法和属性:
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;
浙公网安备 33010602011771号