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."