diff --git a/components/fpexif/examples/file_renamer/file_renamer.lpi b/components/fpexif/examples/file_renamer/file_renamer.lpi index 9f04dc111..383306f70 100644 --- a/components/fpexif/examples/file_renamer/file_renamer.lpi +++ b/components/fpexif/examples/file_renamer/file_renamer.lpi @@ -59,6 +59,9 @@ + + + diff --git a/components/fpexif/fpeexifdata.pas b/components/fpexif/fpeexifdata.pas index c3dc4a197..c361c23f7 100644 --- a/components/fpexif/fpeexifdata.pas +++ b/components/fpexif/fpeexifdata.pas @@ -41,6 +41,12 @@ const FULLTAG_EXIFVERSION = TAGPARENT_EXIF or TAG_EXIFVERSION; FULLTAG_FOCALLENGTH35mm = TAGPARENT_EXIF or TAG_FOCALLENGTH35mm; + EXIFTAG_IMAGEWIDTH = TAGPARENT_EXIF or TAG_IMAGEWIDTH; + EXIFTAG_IMAGELENGTH = TAGPARENT_EXIF or TAG_IMAGELENGTH; + EXIFTAG_COMPRESSION = TAGPARENT_EXIF or TAG_COMPRESSION; + EXIFTAG_MAKE = TAGPARENT_EXIF or TAG_MAKE; + EXIFTAG_MODEL = TAGPARENT_EXIF or TAG_MODEL; + type TExifBeginReadingEvent = procedure of object; TExifEndReadingEvent = procedure of object; @@ -314,13 +320,17 @@ begin AddBinaryTag (I+$0002, 'InterOpVersion', 1, rsInterOpVersion, '', '', TVersionTag); AddULongTag (P+$00FE, 'SubfileType', 1, '', rsSubfileTypeLkup, '', nil, true); AddULongTag (P+$0100, 'ImageWidth', 1, rsImageWidth); + AddULongTag (E+$0100, 'ImageWidth', 1, rsImageWidth); AddULongTag (T+$0100, 'ThumbnailWidth', 1, rsThumbnailWidth); AddULongTag (P+$0101, 'ImageHeight', 1, rsImageHeight); // official: "Image length" + AddULongTag (E+$0101, 'ImageHeight', 1, rsImageHeight); // official: "Image length" AddULongTag (T+$0101, 'ThumbnailHeight', 1, rsThumbnailHeight); // official: "Image length" AddULongTag (P+$0101, 'ImageLength', 1, rsImageHeight); AddULongTag (T+$0101, 'ThumbnailLength', 1, rsThumbnailHeight); AddUShortTag (P+$0102, 'BitsPerSample', 1, rsBitsPerSample); + AddUShortTag (E+$0102, 'BitsPerSample', 1, rsBitsPerSample); AddUShortTag (P+$0103, 'Compression', 1, rsCompression, rsCompressionLkup); + AddUShortTag (E+$0103, 'Compression', 1, rsCompression, rsCompressionLkup); AddUShortTag (T+$0103, 'ThumbnailCompression', 1, rsCompression, rsCompressionLkup); AddUShortTag (P+$0106, 'PhotometricInterpretation', 1, rsPhotometricInt, rsPhotometricIntLkup); AddUShortTag (P+$0107, 'Thresholding', 1, rsThresholding, rsThresholdingLkup); @@ -330,9 +340,12 @@ begin AddStringTag (P+$010D, 'DocumentName', 1, rsDocumentName); AddStringTag (P+$010E, 'ImageDescription', 1, rsImageDescr); AddStringTag (P+$010F, 'Make', 1, rsMake); + AddStringTag (E+$010F, 'Make', 1, rsMake); AddStringTag (P+$0110, 'Model', 1, rsModel); + AddStringTag (E+$0110, 'Model', 1, rsModel); AddULongTag (P+$0111, 'StripOffsets', 1, rsStripOffsets); AddUShortTag (P+$0112, 'Orientation', 1, rsOrientation, rsOrientationLkup); + AddUShortTag (E+$0112, 'Orientation', 1, rsOrientation, rsOrientationLkup); AddUShortTag (T+$0112, 'Orientation', 1, rsOrientation, rsOrientationLkup); AddUShortTag (P+$0115, 'SamplesPerPixel', 1, rsSamplesPerPixel); AddULongTag (P+$0116, 'RowsPerStrip', 1, rsRowsPerStrip); @@ -340,22 +353,28 @@ begin AddUShortTag (P+$0118, 'MinSampleValue', 1, rsMinSampleValue); AddUShortTag (P+$0119, 'MaxSampleValue', 1, rsMaxSampleValue); AddURationalTag(P+$011A, 'XResolution', 1, rsXResolution); + AddURationalTag(E+$011A, 'XResolution', 1, rsXResolution); AddURationalTag(T+$011A, 'ThumbnailXResolution', 1, rsXResolution); AddURationalTag(P+$011B, 'YResolution', 1, rsYResolution); + AddURationalTag(E+$011B, 'YResolution', 1, rsYResolution); AddURationalTag(T+$011B, 'ThumbnailYResolution', 1, rsYResolution); AddUShortTag (P+$011C, 'PlanarConfiguration', 1, rsPlanarConfiguration, rsPlanarConfigurationLkup); AddStringTag (P+$011D, 'PageName', 1, rsPageName); AddURationalTag(P+$011E, 'XPosition', 1, rsXPosition); AddURationalTag(P+$011F, 'YPosition', 1, rsYPosition); AddUShortTag (P+$0128, 'ResolutionUnit', 1, rsResolutionUnit, rsResolutionUnitLkup); + AddUShortTag (E+$0128, 'ResolutionUnit', 1, rsResolutionUnit, rsResolutionUnitLkup); AddUShortTag (T+$0128, 'ThumbnailResolutionUnit', 1, rsResolutionUnit, rsResolutionUnitLkup); AddUShortTag (P+$0129, 'PageNumber', 2, rsPageNumber); AddUShortTag (P+$012D, 'TransferFunction', 768, rsTransferFunction); AddStringTag (P+$0131, 'Software', 1, rsSoftware); + AddStringTag (E+$0131, 'Software', 1, rsSoftware); AddStringTag (T+$0131, 'Software', 1, rsSoftware); AddStringTag (P+$0132, 'DateTime', 1, rsDateTime, '', TDateTimeTag); + AddStringTag (E+$0132, 'DateTime', 1, rsDateTime, '', TDateTimeTag); AddStringTag (T+$0132, 'DateTime', 1, rsDateTime, '', TDateTimeTag); AddStringTag (P+$013B, 'Artist', 1, rsArtist); + AddStringTag (E+$013B, 'Artist', 1, rsArtist); AddStringTag (P+$013C, 'HostComputer', 1, rsHostComputer); AddUShortTag (P+$013D, 'Predictor', 1, rsPredictor, rsPredictorLkup); AddURationalTag(P+$013E, 'WhitePoint', 2, rsWhitePoint); @@ -377,6 +396,10 @@ begin AddStringTag (I+$1000, 'RelatedImageFileFormat', 1, rsRelatedImageFileFormat); AddUShortTag (I+$1001, 'RelatedImageWidth', 1, rsRelatedImageWidth); AddUShortTag (I+$1002, 'RelatedImageHeight', 1, rsRelatedImageHeight); + AddUShortTag (P+$4746, 'Rating', 1, rsRating); + AddUShortTag (E+$4746, 'Rating', 1, rsRating); + AddUShortTag (P+$4749, 'RatingPercent', 1, rsRatingPercent); + AddUShortTag (E+$4749, 'RatingPercent', 1, rsRatingPercent); AddStringTag (P+$8298, 'Copyright', 1, rsCopyright); AddURationalTag(E+$829A, 'ExposureTime', 1, rsExposureTime, '', '', TExposureTimeTag); //, nil, '%0:.0f/%1:.0f s'); AddURationalTag(E+$829D, 'FNumber', 1, rsFNumber); //, nil, 'F/%2:.1f'); @@ -438,7 +461,9 @@ begin AddBinaryTag (E+$A000, 'FlashPixVersion', 1, rsFlashPixVersion, '', '', TVersionTag); AddUShortTag (E+$A001, 'ColorSpace', 1, rsColorSpace, rsColorSpaceLkup); AddUShortTag (E+$A002, 'ExifImageWidth', 1, rsExifImageWidth); +// AddUShortTag (T+$A002, 'ExifImageWidth', 1, rsExifImageWidth); AddUShortTag (E+$A003, 'ExifImageHeight', 1, rsExifImageHeight); // is called "ExifImageLength" in Specs +// AddUShortTag (T+$A003, 'ExifImageHeight', 1, rsExifImageHeight); // is called "ExifImageLength" in Specs AddStringTag (E+$A004, 'RelatedSoundFile', 1, rsRelatedSoundFile); AddULongTag (E+$A005, 'InterOperabilityOffset', 1, rsInterOpOffset, '', '', TSubIFDTag, true); AddURationalTag(E+$A20B, 'FlashEnergy', 1, rsFlashEnergy); diff --git a/components/fpexif/fpeexifreadwrite.pas b/components/fpexif/fpeexifreadwrite.pas index 346ad0ee3..484f8e555 100644 --- a/components/fpexif/fpeexifreadwrite.pas +++ b/components/fpexif/fpeexifreadwrite.pas @@ -424,9 +424,9 @@ begin // Special handling for some tags case tag.TagID of - FULLTAG_MAKE: + FULLTAG_MAKE, EXIFTAG_MAKE: FMake := tag.AsString; - FULLTAG_MODEL: + FULLTAG_MODEL, EXIFTAG_MODEL: FModel := tag.AsString; FULLTAG_THUMBSTARTOFFSET: FThumbPosition := FStartPosition + FixEndian32(AIFDRecord.DataValue); diff --git a/components/fpexif/fpeiptcreadwrite.pas b/components/fpexif/fpeiptcreadwrite.pas index 0ef3e2d62..459b27f62 100644 --- a/components/fpexif/fpeiptcreadwrite.pas +++ b/components/fpexif/fpeiptcreadwrite.pas @@ -283,6 +283,8 @@ begin start := 0; while (start < High(ABuffer) - 1) do begin + if ABuffer[start] = 0 then + break; if ABuffer[start] <> $1C then Error(rsNoValidIptcFile); diff --git a/components/fpexif/fpestrconsts.pas b/components/fpexif/fpestrconsts.pas index a93b33168..5488e9c8a 100644 --- a/components/fpexif/fpestrconsts.pas +++ b/components/fpexif/fpestrconsts.pas @@ -257,6 +257,8 @@ resourcestring rsPressure = 'Pressure'; rsPrimaryChromaticities = 'Primary chromaticities'; rsQuality = 'Quality'; + rsRating = 'Rating'; + rsRatingPercent = 'Rating (%)'; rsRecExpIndex = 'Recommended exposure index'; rsRefBlackWhite = 'Reference black & white'; rsRelatedImageFileFormat = 'Related image file format'; diff --git a/components/fpexif/languages/fpestrconsts.de.po b/components/fpexif/languages/fpestrconsts.de.po index 493aefa31..337c88020 100644 --- a/components/fpexif/languages/fpestrconsts.de.po +++ b/components/fpexif/languages/fpestrconsts.de.po @@ -573,7 +573,7 @@ msgid "Incorrect file structure" msgstr "Falsche Dateistruktur" #: fpestrconsts.rsincorrecttagtype -#, object-pascal-format +#, object-pascal-format, fuzzy, badformat msgid "Incorrect tag type %d: Index=%d, TagID=$%.04x, File:\"%s\"" msgstr "Falscher Tag-Typ %d: Index=%d, TagID=$%.94x, Datei: \"%s\"" @@ -857,6 +857,14 @@ msgstr "Qualität" msgid "Range check error." msgstr "" +#: fpestrconsts.rsrating +msgid "Rating" +msgstr "" + +#: fpestrconsts.rsratingpercent +msgid "Rating (%)" +msgstr "" + #: fpestrconsts.rsreadincompleteifdrecord #, object-pascal-format msgid "Read incomplete IFD record at stream position %d."