替换 JPG 图像文件中的图像但保留元数据?
Replace the image in a JPG image file but keep the metadata?
是否可以替换 JPG 的图像部分但保留嵌入的元数据?或者,有没有办法可靠地将所有元数据从一张 JPG 图像复制到另一张图像?
背景:我有一个存储 JPG 图像的 ASP.NET 网络应用程序。用户使用 tinyMCE 图像编辑器在浏览器中编辑图像(调整大小、裁剪等),然后浏览器将修改后的图像发送到服务器。我需要用编辑后的图像文件替换原始图像文件,同时保留原始元数据。
我的第一种方法是复制 System.Drawing.Imaging.PropertyItems 并使用 InPlaceBitmapMetadataWriter 复制一些项目,但这种方法会遗漏许多属性。我需要一些更可靠的东西,我突然想到,如果我可以替换可能是门票的图像部分。但是谷歌搜索没有透露任何信息。
这是一个开源产品 (Gallery Server),因此任何库都必须与此许可证兼容。
我觉得ImageMagick可以帮到你。
我看到 that ImageMagick example 您可以在其中了解如何从 jpg 文件中提取所有元数据。
现在,如果您拥有原始文件的元数据,则可以使用该元数据创建一个新文件。我发现 a example 如何使用 ImageMagick 添加元数据
希望对您有所帮助
您可以使用 ImageMagick 执行此操作 - 这是一种方法。
加载带有要保留的元数据的原始图像,然后加载 "fake" 图像并将其合成在原始图像之上并保存,然后使用 ImageMagick将保留原始图像的元数据。举个例子吧。
这是一张原图,我们用jhead
检查一下元数据
jhead original.jpg
File name : original.jpg
File size : 2080473 bytes
File date : 2015:12:18 09:05:53
Camera make : Apple
Camera model : iPhone 4S
Date/Time : 2014:12:25 15:02:27
Resolution : 3264 x 2448
Flash used : No
Focal length : 4.3mm (35mm equivalent: 35mm)
Exposure time: 0.0083 s (1/120)
Aperture : f/2.4
ISO equiv. : 50
Whitebalance : Auto
Metering Mode: pattern
Exposure : program (auto)
GPS Latitude : N 54d 26m 14.84s
GPS Longitude: W 3d 5m 49.91s
GPS Altitude : 226.00m
JPEG Quality : 95
现在,我们 运行 我建议的过程,在顶部合成一个相同大小的灰色(假)图像:
convert original.jpg fake.jpg -composite new.jpg
我们得到这个:
如果我们检查新图像的元数据:
jhead new.jpg
File name : new.jpg
File size : 43408 bytes
File date : 2015:12:18 09:08:30
Camera make : Apple
Camera model : iPhone 4S
Date/Time : 2014:12:25 15:02:27
Resolution : 3264 x 2448
Color/bw : Black and white
Flash used : No
Focal length : 4.3mm (35mm equivalent: 35mm)
Exposure time: 0.0083 s (1/120)
Aperture : f/2.4
ISO equiv. : 50
Whitebalance : Auto
Metering Mode: pattern
Exposure : program (auto)
GPS Latitude : N 54d 26m 14.84s
GPS Longitude: W 3d 5m 49.91s
GPS Altitude : 226.00m
JPEG Quality : 96
... 突然之间,我两分钟前在我的 Mac 上制作的灰色矩形是在去年圣诞节拍摄的,与湖区的原始位置完全相同:-)
如果您的假图片和原图片大小不同,您可以这样做以在合成之前将它们强制为相同大小(以便假图片完全覆盖原图片),如下所示:
convert original.jpg fake.jpg -resize 3264x2446! -composite new.jpg
用于在图像之间复制元数据。您可以使用专为元数据操作设计的 exiftool。
exiftool -TagsFromFile sourceImg.jpg target.jpg
-TagsFromFile
表示您正在复制元数据。
如果您不想让 exiftool 生成备份文件,请在 -TagsFromFile
之前添加 -overwrite_original
。
如果您想复制选定的标签或执行递归,请参阅此 。
是否可以替换 JPG 的图像部分但保留嵌入的元数据?或者,有没有办法可靠地将所有元数据从一张 JPG 图像复制到另一张图像?
背景:我有一个存储 JPG 图像的 ASP.NET 网络应用程序。用户使用 tinyMCE 图像编辑器在浏览器中编辑图像(调整大小、裁剪等),然后浏览器将修改后的图像发送到服务器。我需要用编辑后的图像文件替换原始图像文件,同时保留原始元数据。
我的第一种方法是复制 System.Drawing.Imaging.PropertyItems 并使用 InPlaceBitmapMetadataWriter 复制一些项目,但这种方法会遗漏许多属性。我需要一些更可靠的东西,我突然想到,如果我可以替换可能是门票的图像部分。但是谷歌搜索没有透露任何信息。
这是一个开源产品 (Gallery Server),因此任何库都必须与此许可证兼容。
我觉得ImageMagick可以帮到你。
我看到 that ImageMagick example 您可以在其中了解如何从 jpg 文件中提取所有元数据。
现在,如果您拥有原始文件的元数据,则可以使用该元数据创建一个新文件。我发现 a example 如何使用 ImageMagick 添加元数据
希望对您有所帮助
您可以使用 ImageMagick 执行此操作 - 这是一种方法。
加载带有要保留的元数据的原始图像,然后加载 "fake" 图像并将其合成在原始图像之上并保存,然后使用 ImageMagick将保留原始图像的元数据。举个例子吧。
这是一张原图,我们用jhead
jhead original.jpg
File name : original.jpg
File size : 2080473 bytes
File date : 2015:12:18 09:05:53
Camera make : Apple
Camera model : iPhone 4S
Date/Time : 2014:12:25 15:02:27
Resolution : 3264 x 2448
Flash used : No
Focal length : 4.3mm (35mm equivalent: 35mm)
Exposure time: 0.0083 s (1/120)
Aperture : f/2.4
ISO equiv. : 50
Whitebalance : Auto
Metering Mode: pattern
Exposure : program (auto)
GPS Latitude : N 54d 26m 14.84s
GPS Longitude: W 3d 5m 49.91s
GPS Altitude : 226.00m
JPEG Quality : 95
现在,我们 运行 我建议的过程,在顶部合成一个相同大小的灰色(假)图像:
convert original.jpg fake.jpg -composite new.jpg
我们得到这个:
如果我们检查新图像的元数据:
jhead new.jpg
File name : new.jpg
File size : 43408 bytes
File date : 2015:12:18 09:08:30
Camera make : Apple
Camera model : iPhone 4S
Date/Time : 2014:12:25 15:02:27
Resolution : 3264 x 2448
Color/bw : Black and white
Flash used : No
Focal length : 4.3mm (35mm equivalent: 35mm)
Exposure time: 0.0083 s (1/120)
Aperture : f/2.4
ISO equiv. : 50
Whitebalance : Auto
Metering Mode: pattern
Exposure : program (auto)
GPS Latitude : N 54d 26m 14.84s
GPS Longitude: W 3d 5m 49.91s
GPS Altitude : 226.00m
JPEG Quality : 96
... 突然之间,我两分钟前在我的 Mac 上制作的灰色矩形是在去年圣诞节拍摄的,与湖区的原始位置完全相同:-)
如果您的假图片和原图片大小不同,您可以这样做以在合成之前将它们强制为相同大小(以便假图片完全覆盖原图片),如下所示:
convert original.jpg fake.jpg -resize 3264x2446! -composite new.jpg
用于在图像之间复制元数据。您可以使用专为元数据操作设计的 exiftool。
exiftool -TagsFromFile sourceImg.jpg target.jpg
-TagsFromFile
表示您正在复制元数据。
如果您不想让 exiftool 生成备份文件,请在 -TagsFromFile
之前添加 -overwrite_original
。
如果您想复制选定的标签或执行递归,请参阅此