ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 8709|回复: 16

如何修改相片拍摄时间

[复制链接]

TA的精华主题

TA的得分主题

发表于 2015-2-9 09:58 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
我刚完成把相片创建.修改时间进行修改后(代友的文件属性修改),发现相片拍摄时间无法进行修改,想破了头都没有办法,虽然ACCSEE等软件可以进行修改,但是修改起来还是很麻烦,希望哪位高手能帮助我,我以200元以示感谢,我QQ1138156433

新建文件夹 (3).zip

1018.19 KB, 下载次数: 105

TA的精华主题

TA的得分主题

发表于 2015-2-9 10:04 | 显示全部楼层
万能的度娘,查找 “修改照片exif信息”

TA的精华主题

TA的得分主题

发表于 2015-2-9 10:05 | 显示全部楼层
图像上的日期,只能用图像处理的软件(例如:Photoshop)处理

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-2-9 10:14 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
修改照片exif信息,也是鼠标点击相片时显示的时间

TA的精华主题

TA的得分主题

发表于 2015-2-9 10:15 | 显示全部楼层
你要把数码相机设置的日期给关掉,照出没有日期显示在图像上的照片。
后期,可以合成加上需要的日期。
Photoshop也支持录制一些操作宏的

用EXcel的VBA处理它有点运了

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-2-9 10:56 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
是鼠标点击相片时显示的时间修改

808a27dbb6fd5266520332abaa18972bd4073621[1].zip

30.72 KB, 下载次数: 123

TA的精华主题

TA的得分主题

发表于 2015-2-9 13:18 | 显示全部楼层
楼主试试,下面的代码在我的电脑上修改成功:

自定义函数:

  1. Function ModiPhotoDate(strPath As Variant, strFile As String, strNewDate As String)
  2.     'strPath:文件所在文件夹名,必须是Variant类型
  3.     'strFile:文件名(不包括路径)
  4.     'strNewDate:要显示的日期时间,yyyy-mm-dd hh:nn格式,时间不写的话用原照片时间
  5.    
  6.     Dim objShell As Object
  7.     Dim objFolder As Object
  8.     Dim objFolderItem As Object
  9.     Dim strOldDate As String
  10.     Dim arrOldDate() As Byte
  11.     Dim arrNewDate() As Byte
  12.     Dim arrByte() As Byte
  13.     Dim strNewFile As String
  14.     Dim i As Long
  15.     Dim j As Long
  16.    
  17.     '照片复件文件名
  18.     strNewFile = Left(strFile, InStrRev(strFile, ".") - 1) & "复件." & Mid(strFile, InStrRev(strFile, ".") + 1)
  19.    
  20.     '获取照片的拍摄日期时间
  21.     Set objShell = CreateObject("Shell.application")
  22.     Set objFolder = objShell.Namespace(strPath)
  23.     Set objFolderItem = objFolder.ParseName(strFile)
  24.     '第25项是照片的拍摄日期,不知道不同的配置是否相同
  25.     strOldDate = objFolder.GetDetailsOf(objFolderItem, 25)
  26.     Set objFolderItem = Nothing
  27.     Set objFolder = Nothing
  28.     Set objShell = Nothing
  29.    
  30.     If Len(strNewDate) <= 11 Then
  31.         strNewDate = Trim(strNewDate) & Format(strOldDate, " hh:nn")
  32.     End If
  33.    
  34.     '日期在照片二进制中是"yyyy:mm:dd hh:nn:ss"格式存在,不知道不同格式的照片是否相同
  35.     arrOldDate = StrConv(Format(strOldDate, "yyyy:mm:dd hh:nn"), vbFromUnicode)
  36.     arrNewDate = StrConv(Format(strNewDate, "yyyy:mm:dd hh:nn"), vbFromUnicode)
  37.    
  38.     '读入照片的二进制数据
  39.     With CreateObject("Adodb.Stream")
  40.         .Open
  41.         .Type = 1 'adTypeBinary
  42.         .LoadFromFile strPath & "" & strFile
  43.         arrByte = .read
  44.         .Close
  45.     End With
  46.    
  47.     '修改日期时间
  48.     For i = 0 To UBound(arrByte)
  49.         If arrByte(i) = arrOldDate(0) Then
  50.             For j = 1 To UBound(arrOldDate)
  51.                 If arrByte(i + j) <> arrOldDate(j) Then Exit For
  52.             Next
  53.             If j > UBound(arrOldDate) Then
  54.                 For j = 0 To UBound(arrOldDate)
  55.                     arrByte(i + j) = arrNewDate(j)
  56.                 Next
  57.             End If
  58.         End If
  59.     Next
  60.    
  61.     '二进制数据写入文件,创建日期和修改日期等是当前日期
  62.     With CreateObject("Adodb.Stream")
  63.         .Type = 1 'adTypeBinary
  64.         .Open
  65.         .Write arrByte
  66.         .SaveToFile strPath & "" & strNewFile, 2 'adSaveCreateOverWrite
  67.         .Close
  68.     End With
  69.    
  70. End Function
复制代码
调用方法:
Sub Main()
    Call ModiPhotoDate("D:\新建文件\资料", "123.jpg", "2014-12-01")
End Sub

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-2-9 14:34 | 显示全部楼层
Set objFolderItem = objFolder.ParseName(strFile)在这里with变了未设置,可能我电脑不行,明天我上班在测试,如正确,我会承若,请把账号发到我QQ邮箱

TA的精华主题

TA的得分主题

发表于 2015-2-10 08:16 | 显示全部楼层
jhead(批量修改图片exif信息)
是一个处理照片exif信息的命令行工具。jhead是一个处理照片exif信息的命令行工具。
  一个现成更改照片时间的程式--jhead,其网域名称是ExifJpegheadermanipulation
  tool,由网页中,releases表里下载110k的Prebuiltwindowsexecutablejhead,十分好用。
  下载jhead时,记得把jhead程序存放在要更改的照片文件夹里,不然无法使用。
  它的强大在于它
  一、提供了其他工具所不能企及的功能
  二、强大的批处理能力
  唯一的问题是:jhead不是个window程式,它是个DOS程式,许多用window的人,对DOS并不熟,因此,说明jhead使用法如下:
  jhead这个DOS程式必需在DOS下执行,如何在windows中启动DOS?
  以windowsXP为例:
  开始——运行
  在开启处键入cmd
  C:\DocumentsandSettings\user。这即是我们的电脑硬碟(简化来说。其实只是硬碟的一部份)。试着click这一行最右边,并键入dir。
  dir是DOS的command,意思是--显示目录,此时就会看到一串有<DIR>的字,其中有个桌面,试着键入---cd桌面。
  这时出现\DocumentsandSettings\user\桌面,表示已进入桌面这个目录,cd是change
  directory(改变目录)的意思,试着键入---cd要更改的照片文件夹名称。
  这时出现\DocumentsandSettings\user\桌面\你要更改的照片文件夹名称。表示已进入你想更改的目录。接着键入jhead参数
  据说该工具最早是在linux环境下开发的,现已被移植到多个平台,包括windows。
  但,目前为止并没有GUI,也就是图形外壳,所以理解并使用该工具前你必须了解一些简单的命令行知识..........
  跟所有的命令行工具一样,它的使用方法为:jhead参数列表jpg文件列表
  比如:
  jhead-se1.jpg..................................处理单个文件
  jhead-se2009_[0-9].jpg.................处理指定的多个文件
  jhead-se*.jpg...................................处理所有文件
  另外,你甚至可以用**通配符来代替子目录,从而实现对指定目录的遍历!包括子目录的子目录。如:
  jhead-sec:\tmp\**\*.jpg
  当然有些参数也允许你联合使用。比如:
  jhead-se-q1.jpg2.jpg3.jpg
  现在我们举几个例子(jhead如何使用)(命令和参数、文件夹、文件之间必须空格):
  (一)jhead-da2009:01:01-2008:01:01*.jpg
  把当前目录下的所有拍摄日期为2008/01/01的照片更改时间为2009/01/01。这在相机日期设置有误时非常有用。(更改照片拍摄日期)
  (二)jhead-ds2009*.jpg
  把当前目录下的所有jpg文件的日期年份更改为2009年,保持日期的其他部分(月、日及时间)不变!
  (三)jhead-nf%Y_%m%d_%04i*.jpg
  把当前目录下的所有jpg文件的文件名更改为:年4位_月2位日2位_4位序号.jpg如:2009_1201_0001.jpg
  (四)jhead-seld_pic.jpg>a.txt
  有时候你可能需要把照片的exif信息转入文体保存,你可以直接重定向输出就可以了
  (五)jhead-st"bak\&i"*.jpg
  把当前目录下的所有文件的缩略图复制保存到bak目录下并与原文件名同名。
  (六)jhead-te01.jpg02.jpg
  单个文件导入,把01.jpg的信息导入到02.jpg,覆盖原来的。
  jhead-te"bak\&i"*.jpg
  批量导入,把bak目录下的jpg文件信息按文件名一一对应的导入当前目录下的jpg文件!引号不省略!!
  实例一下吧..........
  jhead命令(参数)大全
  -V(大写的V)...............显示jhead的版本
  -h...............................获得帮助
  -autorot...................................根据exif中记录的水平方向信息转动照片
  -norot......................................清除exif中记录的水平方向信息
  -v(小写的v)........................详细的exif信息显示
  -exifmap.................................显示头信息,总之跟v不一样
  -se...........................................简化显示
  -c..............................................精简显示(比-se更简单)
  -dc..........................删除jpg信息中的备注
  -de.........................完全删除exif信息
  -du.........................删除非原始exif信息,例如Photoshop之类编辑后修改exif留下的信息
  -purejpg................删除所有jpg文件非必须信息.相当于-de-dc-du的集合,文件将减小数k
  -mkexif..................创建新的最小exif信息(覆盖原有的的exif信息),不明白这有什么用
  -di..........................删除IPTC(Photoshop格式兼容)信息.
  -dx.........................删除XMP(photoshop文件信息)
  -te.........................................从其他jpg文件导入exif信息到当前文件
  -dc...............删除jpg信息中的备注.
  -ce..............使用系统默认编辑器编辑备注。运行时会自动打开文本编辑器,录完信息,保存并关闭后,信息会自动被写入备注
  -cs...............导出备注到文本文件。如:jhead-cs1.txt1.jpg
  -ci................从文体文件导入备注。如:jhead-ci1.txt1.jpg
  -clstring.....直接输入备注。如:jhead–cl我爱无常版主1.jpg
  -dt................................删除exif中的缩略图.此缩略图一般240x160象素,10k大小
  -st[name]..................将exif中的缩略图复制为另一个jpg文件
  -rt[name]...................用另一个jpg文件替换exif中的缩略图.
  -rgt[size].....................刷新exif缩略图,其中[size]为缩略图的最大边长
  -ft................................将jpg文件的“修改时间”修改为exif信息中记录的拍摄时间
  -dsft...........................把照片exif信息时间设置为文件修改时间.
  -da[date1]-[date2]...把拍摄日期为data2的照片日期修正为data1;date格式为yyyy:mm:dd或yyyy:mm:dd+hh:mm或yyyy:mm:dd+hh:mm:ss
  -ts[time]....................直接修改exif中的时间,格式为yyyy:mm:dd-hh:mm:ss
  -ds[date]...................直接修改exif中的日期,格式为yyyy:mm:dd或yyyy:mm或yyyy
  -ta[+|-]h[:mm[:ss]]...修正时差,根据时区确定,例如+1:00或者-1:00
  -n[format-string]......将照片文件名修改为exif信息中记录的“数字化时间”,保留原文件名;如果exif数字化时间不可用,则将文件名修改为文件的“修改时间”
  -nf[format-string]....与"-n"相同功能相同,不保留原文件名
  format-string格式说明
  %d................日.................................(01-31)
  %H...............小时.............................(00-23)
  %j.................一年中的第几天.........(001-366)
  %m..............月.................................(01-12)
  %M...............分钟.............................(00-59)
  %S...............秒.................................(00-59)
  %U..............一年中的第几周..........(00-53)
  %w..............星期几..........................(0-6,周日为0)
  %y................两位数纪年..................(00-99)
  %Y...............四位数纪年
  %i................添加数字序号,也可以指定位数。如:%04i(生成4位序号,不足的高位补零)
  %f................原文件名
  -q....................................不显示程序运行信息,和其他参数一起使用。这在编写批处理脚本时非常有用
  -cmdcommand...........调用其他程序,如:jhead-cmd"mogrify-qlity80&i"*.jpg
  -exonly............................不处理没有exif信息的文件,要和其他参数一起使用
  -a....................................修改不同扩展名的同名文件名。拍摄的avi短片exif信息存储在同名thm文中,可用此指令给avi文件更名.一般与-n共同使用.

可以用shell来调用批量修改

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-2-10 09:40 | 显示全部楼层


第23步和24步执行不了.Set objFolderItem = objFolder.ParseName(strFile)在这里with变了未设置.我都试了好几台电脑了,请 wcymiss代友再次出手。谢谢

点评

strPath必须是Variant类型  发表于 2015-2-10 11:16
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-17 18:21 , Processed in 0.050605 second(s), 17 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表