我正在寻找可以将 EXIF 数据写入 JPG 图像的 Delphi7 组件。
我经常制作全景图,加入一些我用相机拍摄的照片。PTGui 是我用来制作此类全景图的程序。问题是原始图片中的 EXIF 数据不会保留在最终图像中。
我想使用 Delphi7 编写一个代码,它从集合的第一张图像中读取 EXIF 数据并将该数据写入最终的全景图像。
我可以找到 CCR EXIF,但它来自 Delphi 2006,而不是 D7 ......
任何人都可以提出一些想法,提示,线索?
编辑:我很抱歉提出一个被认为离题的问题。当然这不是我的本意。
回答并感谢 Warren P,是的,我用 Delphi7 尝试了 CCR。
尝试其任何示例代码,返回此错误:
Constant expression expected.
在这一行:
{$IF CompilerVersion < 23} //no FMX before XE2
在CCR.Exif.inc
文件中
样本分为三种:
- 文件名末尾有 2009
- XE 在文件名的末尾
- 只是文件名
这个小代码返回一个丢失的 DCU 文件:
uses
CCR.Exif;
procedure ReadCameraMakeAndModel(const FileName: string;
out Make, Model: string);
var
ExifData: TExifData;
begin
ExifData := TExifData.Create;
try
ExifData.LoadFromGraphic(FileName);
Make := ExifData.CameraMake;
Model := ExifData.CameraModel;
finally
ExifData.Free;
end;
end;
File not found: CCR.Exif.dcu
DCU 文件夹中没有 DCU 文件。
由于上述错误,我得出结论认为 CCR Exif 不适用于 Delphi 7,但我可能错了。
编辑2 更新一些信息:
我安装了Delphi 2007,应该可以编译CCR Exif。但是当我尝试编译一些 CCR Exif 附带的 Samples 项目时,我遇到了一个奇怪的行为。我可以编译以下示例:
IPTCEditor
XMPBrowser
但我无法编译以下内容:
ExifList
JpegDump
ResaveTest
Screenshot
TimeShift
所有这些错误都是相同的:
在这个块:
if Value <> LastSetDateTimeValue then
begin
LastSetDateTimeValue := Value;
LastSetDateTimeMainStr := DateTimeToExifString(Value);
LastSetDateTimeSubSecStr := GetExifSubSecsString(Value);
end;
错误:
[DCC Error] CCR.Exif.pas(2475): E2010 Incompatible types: 'TDateTime' and 'TDateTimeTagValue'
[DCC Error] CCR.Exif.pas(4410): E2010 Incompatible types: 'TDateTime' and 'TDateTimeTagValue'
[DCC Error] CCR.Exif.pas(4411): E2010 Incompatible types: 'TDateTime' and 'TDateTimeTagValue'
[DCC Error] ExifList.dpr(17): F2063 Could not compile used unit '..\..\CCR.Exif.pas'
奇怪的是,我有一个朋友拥有Delphi XE ,但他可以毫无错误地编译示例... :-(
搜索 CCR.Exif.BaseUtils.pas 我发现DateTimeTagValue作为记录。但是为什么我的朋友可以编译相同的包???而我不能?
在这里,我的办公桌布局的屏幕截图:
有人有线索吗?