效果

感谢

本脚本参考了:laozeng, https://github.com/laozeng1024

核心功能

  1. 如果照片为横幅,则顺时针旋转90°后,再增加水印;
  2. 如果exif中没有拍摄时间,从xmp信息里取;
  3. 增加 JPEG 保存时存储质量等设置(默认保存质量为10);
  4. 增加了水印字体设置,水印字体设置是字符串,是 postScript 名称,mac下,可以通过【字体册】应用查看;
  5. 根据分辨率的不同(基准分辨率为72),计算水印pt大小;

使用方法

Photoshop - 文件 - 脚本 - 浏览 - (打开js文件)

代码

链接:
https://github.com/leongongye/create_date_watermark_using_photoshop/blob/main/add_date_watermark.js

/*
功能:photoshop脚本从exif获取日期,自动添加日期水印。如没有exif日期信息,则从xmp信息从读取日期。
作者:leongongye, https://github.com/leongongye
参考:laozeng, https://github.com/laozeng1024,感谢!
*///自定义字符串,如“@上海”,使用urlencode编码
var customStr = "%40%E4%B8%8A%E6%B5%B7";
//exif中“日期时间”字段名称,urlencode编码
var photoTimeStr = "%E6%97%A5%E6%9C%9F%E6%97%B6%E9%97%B4";
//exif中“日期戳”字段名称,urlencode编码
var photoTimeStr2 = "%E6%97%A5%E6%9C%9F%E6%88%B3";
//"原始日期时间"
var photoTimeStr3 = "%E5%8E%9F%E5%A7%8B%E6%97%A5%E6%9C%9F%E6%97%B6%E9%97%B4";var inputFolder = Folder.selectDialog("请选择需要添加日期水印图片所在文件夹:");
var outFolder = Folder.selectDialog("选择图片保存输出的文件夹:");//判断文件夹是否存在
if (inputFolder != null && inputFolder != null) {//获得文件夹下的所有图片var fileList = inputFolder.getFiles();//遍历图片for (var i = 0; i < fileList.length; i++){//判断图片是否正常文件,并且处于非隐藏状态if (fileList[i] instanceof File && fileList[i].hidden == false) {       //打开遍历到的图片var docRef = open(fileList[i]);//设置另存路径文件名,重命名为:new_原文件名var fileout = new File(outFolder+'/new_'+ basename(fileList[i]))// 旋转照片if(docRef.width > docRef.height){docRef.rotateCanvas(90);}// 添加水印addDateTimeWatermark(docRef);//另存照片saveDocAsCopy(docRef);}}alert("添加日期水印,已处理完成!")
}function saveDocAsCopy(docRef) {//定义一个变量[asCopy],用来指定图片以副本的方式保存var asCopy = true;//定义一个变量[extensionType],用来指定图片名称的后缀为小写的.jpgvar extensionType = Extension.LOWERCASE;//定义一个变量[options],用来指定图片保存的格式为JPG。PNG为PNGSaveOptionsvar jpegSaveOptions = JPEGSaveOptions;jpegSaveOptions.embedColorProfile = true;  jpegSaveOptions.formatOptions = FormatOptions.STANDARDBASELINE;  jpegSaveOptions.matte = MatteType.NONE;  jpegSaveOptions.quality = 10;docRef.saveAs(fileout, jpegSaveOptions, asCopy, extensionType);//操作完成后,直接关闭文档docRef.close(SaveOptions.DONOTSAVECHANGES);
}function addDateTimeWatermark(docRef) {//获得exif照片日期,可自行加自定义文字customStr//photoTime = getExifData(docRef) + decodeURIComponent(customStr)photoTime = getDocCreateTime(docRef)//如果exif没有日期数据,从文件名读取if (photoTime == 0){photoTime = basename(fileList[i])photoTime = photoTime.toString().slice(0, -4)}//新建图层var layerRef = docRef.artLayers.add();//设置为文字图层layerRef.kind = LayerKind.TEXT;//设置图层文字layerRef.textItem.contents = photoTime;//根据图片宽度比例,设置文字大小layerRef.textItem.size = docRef.width/25/(docRef.resolution/72); //默认分辨率72,根据分辨率修改ptlayerRef.textItem.font = "LetsgoDigital-Regular"; //设置字体// gimmePostScriptFontName("asdfasdf");//定义颜色var color = new RGBColor();//设置red属性color.red = 235;//设置green属性color.green = 175;//设置blue属性color.blue = 12;//定义水印文字的颜色var sc = new SolidColor();//设置[sc]对象的[rgb]属性的值为变量[color]sc.rgb = color;//将文本图层的字体颜色设置为变量[sc]layerRef.textItem.color = sc;//设置文本图层透明度layerRef.fillOpacity = 90;//将文本图层向下移动。调节日期水印左右和上下位置// layerRef.translate(250, docRef.height/1.15 - 72);layerRef.translate(docRef.width/1.65, docRef.height/1.15);//合并文本图层至背景图层layerRef.merge();
}function getCreateDateFromXmp(doc) {var ns = "http://ns.adobe.com/xap/1.0/";ExternalObject.AdobeXMPScript = new ExternalObject('lib:AdobeXMPScript');xmpMeta = new XMPMeta(doc.xmpMetadata.rawData);var theValue = xmpMeta.getProperty(ns, "CreateDate");return theValue;
}//获取exif中的日期
function getDocCreateTime(doc) {var exifData = doc.info.exif;var photoTime = 0//1. 优先从 exif 里取for(j = 0; j < exifData.length; j++ ) {encodeStr = encodeURIComponent(exifData[j][0]);switch(encodeStr){   //urlencode 中文再判断//日期时间case photoTimeStr: case photoTimeStr2: case photoTimeStr3:photoTime = exifData[j][1];p = photoTime.split(" ")// 2020:10:11 12:08:33 替换为2020-10-11 12:08:33// 格式 2023-01-13 14:23:58// photoTime = p[0].replace(/:/g,"-")+" "+p[1]photoTime = p[0].replace(/:/g,"-")break;}} if(photoTime==0){// 2. 最后从 xmp 数据里取,原始格式 2023-01-14T10:11:07+08:00var xmpCreateDateStr = getCreateDateFromXmp(doc)+"";var sp = xmpCreateDateStr.split("T");// photoTime = sp[0]+" "+sp[1].substring(0,8);// photoTime = sp[0].replace(/-/g,"/")photoTime = sp[0]/*if(doc.info.creationDate){// 2. 从doc的creationDate 里取,格式 20230113// photoTime = doc.info.creationDate+"-D";photoTime = getCreateDateFromXmp(doc)+"-X";}else{// 3. 最后从 xmp 数据里取,原始格式 2023-01-14T10:11:07+08:00photoTime = getCreateDateFromXmp(doc)+"-X";}*/}// alert(photoTime);return photoTime;}function ShowTheObject(obj){var des = "";for(var name in obj){// des += name + ";";des += name + ":" + obj[name] + ";";}return des;
}//获取文件名
function basename(str) {str = str.toString();var idx = str.toString().lastIndexOf('/')idx = idx > -1 ? idx : str.lastIndexOf('\\')if (idx < 0) {return str}return str.substring(idx + 1);
}//获取字体
function gimmePostScriptFontName(f)
{numOfFonts = app.fonts.length;// var s = "";for (var i = 0, numOfFonts; i < numOfFonts; i++){fnt = app.fonts[i].name;// s += app.fonts[i].name + "***" + app.fonts[i].postScriptName + ";\n";if (f == fnt){return app.fonts[i].postScriptName;}}
}

用Photoshop脚本批量为照片增加拍摄时间水印相关推荐

  1. dos脚本批量更改照片命名(文字变更数字)

    dos脚本批量更改照片命名(文字变更数字) 第一步:首先创建一个文件夹,里面放三类文件.第一类是所有的照片,以文字(或其他)命名:第二类是Excel表格,里面存放与照片命名文字(或其他)对应的.需要更 ...

  2. Photoshop脚本 批量生成Web切图

    欢迎大家与我交流 邮箱:coolketang@163.com 我的微信公众号"酷课堂",获取更多学习资源,欢迎留言交流. 设计师们完成网页设计稿后,需要将所有页面元素导出为web格 ...

  3. Photoshop脚本 批量生成各尺寸的iOS图标

    源自:http://coolketang.com/psscript/menu8lesson12.php 设计师们通常设计一张1024*1024的图标,然后导出十几种用在iPhone, iPad, iT ...

  4. [经典] 使用Python批量重命名iPhone拍摄的照片-按照拍摄时间重命名

    #!/usr/bin/env python # -*- coding: utf-8 -*-''' 批量修改照片文件名称的Python脚本程序. 遍历指定目录(含子目录)的照片文件,根据拍照时间将照片文 ...

  5. php批量处理图片大小,使用PhotoShop批量处理照片的分辨率(大小)

    数码相机拍下来的相片一般很大,而互联网对上传的图片大小是有限制的,百度空间上传图片不能超过500KB,有的甚至不能超过200KB,这样,上传互联网之前就需要我们改变图片大小,Photoshop和Ase ...

  6. c语言读取一张hdr图片,在Photoshop中调出人物照片高质量的HDR效果

    本篇教程是向脚本之家的朋友介绍利用在Photoshop中调出人物照片高质量的HDR效果方法,教程调出来的效果很不错,作者也把制作过程介绍的非常详细,个人觉得很不错,推荐到脚本之家,感兴趣的朋友可以跟着 ...

  7. Photoshop脚本从入门到精通视频教程-李发展-专题视频课程

    Photoshop脚本从入门到精通视频教程-36859人已学习 课程介绍         PhotoShop脚本是 Photoshop神秘,也是强大的一个功能. 它可以允许您以代码的方式来操作文档.美 ...

  8. 如何用photoshop做24色环_如何用Photoshop给照片添加印章水印,内附印章模板素材...

    欢迎关注抱你一下 一个和你一样好看的公众号 教程视频及其模板福利往下看哦   前几天录剪了我的第一个视频,是一个关于怎样在PS中制作个人艺术印章的教程. 同时我还在视频最后给大家准备了几十份印章模板, ...

  9. python批量识别图中文字自动命名_python实现批量命名照片

    python批量命名照片的具体代码,供大家参考,具体内容如下 废话不多说,上效果图 全部代码 from tkinter import * import os #添加文件夹路径 def rename() ...

最新文章

  1. WEB 测试点总结
  2. 【c语言】蓝桥杯算法提高 c++_ch02_04
  3. solr 4.8 mysql_solr 4.8+mysql數據庫數據導入 + mmseg4j中文全文索引 配置筆記
  4. 路由器上不了网?PPPoE协议了解一下
  5. 加固工程验收规范50550_石家庄栾城县厂房梁柱加固施工队规范作业-建筑加固
  6. 单例设计模式-饿汉式
  7. 微软同步框架入门开篇(附SnapShot快照Demo)
  8. js判断时间是早上还是下午_牛奶早上喝好,还是晚上喝好?没想到“最佳时间”是这个点,颠覆了!...
  9. java getselecteditem_java – 将getSelectedItem()从JComboBox转换为int或任何其他东西
  10. github-仓库基本-下载-上传
  11. 拯救普通人周报焦虑,一个自动化报表工具就能实现
  12. Eclipse在线安装SVN插件
  13. 蓝屏:微软撤回 Windows 8.1 八月更新等4个补丁
  14. 2021我的互联网秋招算法岗总结
  15. OLED屏幕的手机和LCD屏幕的手机,到底哪个好?
  16. java后端应届生面试题,附答案解析
  17. 生成条形码二维码DataMatrix条码.EAN码.39码.交叉25码.UPC码.128码.93码.ISBN码.Codabar等...
  18. android6.0 来电流程,Android4.22来电铃声流程
  19. 腾讯地图发送定位-打开定位功能
  20. 3599元起 铭凡推出NPB7迷你主机:i7-13700H、双雷电4

热门文章

  1. 前端H5唤起手机打电话(拨号)和发短信功能
  2. linux 录屏命令,命令行一键 “录屏”
  3. 华为鸿蒙审核几天,鸿蒙审核需要多久?
  4. 如何恢复Apple Watch的出厂设置?
  5. Java 1.8 数组转 Set,转List,转由零自增的Map
  6. Centos Stream 9 换DNF源
  7. php网页图片中间代码,图片 css div居中代码怎么写
  8. 医学图像处理:各向异性调整为各向同性(使用matlab)
  9. 高通再诉苹果侵犯三项专利 索赔数千万美元
  10. zzulioj1818: squee_spoon and his Cube VI