zhengzhenhui945 发表于 2025-6-16 17:09

Photoshop按文件名生成文字图层

本帖最后由 zhengzhenhui945 于 2025-6-17 00:06 编辑

起因是给学校当家委,整理学生家长的缴费截图,截图里面没有名字信息。
我就用PS‘按文件名生成文字图层’去合成图片。
当家委实属无奈,娃子个子高,不当家委就坐后排垃圾桶旁边了,
当家委现在关照我娃子坐靠墙前排座位。
题外话:学校也是卷,做表格,统计缴费,采购都家委来。{:1_925:}




代码如下↓↓↓↓↓↓↓↓↓↓
TXT另存为JS格式拖拽到ps使用
文字的位置偏移,可在代码里面自行调整
=========下载地址===========
Photoshop版jsx脚本版 下载:https://zhenghui.lanzouu.com/iJAeM2yx6mha
BAT版本调用ImageMagick命令工具:https://zhenghui.lanzouu.com/i5euq2yxziad【内有ImageMagick命令工具】
===========================

try {
    var activeDoc = app.activeDocument;
    var fullFilename = "";
    var filename = "";
    var dotIndex = "";

    // 获取当前文档的完整文件名
    fullFilename = activeDoc.name;
    // 查找文件扩展名的位置
    dotIndex = fullFilename.lastIndexOf('.');

    // 提取文件名(不包含扩展名)
    if (dotIndex!== -1) {
      filename = fullFilename.substring(0, dotIndex);
    } else {
      filename = fullFilename;
    }

    // 创建一个新的文字图层
    var artLayer = activeDoc.artLayers.add();
    artLayer.kind = LayerKind.TEXT;

    // 获取文字图层的文本项
    var textItem = artLayer.textItem;
    textItem.contents = filename;

    // 设置文字的字体、大小和颜色
    textItem.font = "SimHei";
    textItem.size = 50;

    // 定义十六进制颜色代码
    var hexColor = "ff0000";
    // 调用转换函数
    var rgbColor = hexToRgb(hexColor);
    textItem.color.rgb.red = rgbColor.r;
    textItem.color.rgb.green = rgbColor.g;
    textItem.color.rgb.blue = rgbColor.b;

    // 移动文字图层,水平方向的偏移量
    artLayer.translate(-6, 1088);

    // 合并所有图层暂时不用    activeDoc.flatten();

} catch (e) {
    // 可以选择保留或去掉错误提示,这里选择去掉
    // alert("发生错误:" + e.message);
}

// 辅助函数:将十六进制颜色代码转换为 RGB 对象
function hexToRgb(hex) {
    // 去除可能存在的 # 符号
    hex = hex.replace(/^#/, '');
    // 处理短格式十六进制代码(如 #f00)
    if (hex.length === 3) {
      hex = hex + hex + hex + hex + hex + hex;
    }
    // 解析 RGB 值
    var bigint = parseInt(hex, 16);
    var r = (bigint >> 16) & 255;
    var g = (bigint >> 8) & 255;
    var b = bigint & 255;

    return { r: r, g: g, b: b };
}

方法二:下面这个是BAT代码,直接调用ImageMagick 命令工具,批量添加带有文件名的文字水印
            需要电脑有ImageMagick 命令工具
=======================

@echo off
setlocal enabledelayedexpansion
rem 字体大小以及颜色可自由调整
rem 设置中文字符集
chcp 65001 > nul

rem 检查当前目录下是否存在 magick.exe
if not exist "%~dp0magick.exe" (
    echo 错误: 当前目录下未找到 magick.exe 文件!
    echo 请确保 ImageMagick 已安装并将 magick.exe 放在批处理文件同目录下。
    goto :end
)

rem 检查是否有拖放的文件夹参数
if "%~1"=="" (
    set "input_folder=%~dp0"
) else (
    set "input_folder=%~1"
)

echo 开始为图片添加文字水印...

rem 获取当前批处理文件所在的绝对路径
set "current_dir=%~dp0"
rem 创建"水印处理完成"文件夹的绝对路径
set "output_folder=%current_dir%水印处理完成"
if not exist "%output_folder%" mkdir "%output_folder%"

set "processed=0"
set "failed=0"

rem 请在此处设置水印透明度 (0-100)
set "watermark_opacity=100"

rem 请在此处设置水印字体大小
set "watermark_size=36"

rem 设置水印颜色代码,默认为红色
set "watermark_color=#ff0000"

rem 处理指定文件夹中的所有 JPG、PNG 和 GIF 文件
for /r "%input_folder%" %%i in (*.jpg *.png *.gif) do (
    echo 正在处理: %%i
   
    rem 使用文件名作为水印文字(不含扩展名)
    set "watermark_text=%%~ni"
   
    rem 构建输出文件名
    set "output_file=%%~ni_水印%%~xi"
   
    rem 修复:正确设置颜色和透明度
    rem 将 hex 颜色代码转换为 RGB 格式
    set "r=0x!watermark_color:~1,2!"
    set "g=0x!watermark_color:~3,2!"
    set "b=0x!watermark_color:~5,2!"
   
    rem 使用 RGB 和透明度创建正确的 rgba 格式
    set /a r_dec=!r!
    set /a g_dec=!g!
    set /a b_dec=!b!
   
    rem 构建完整的 rgba 颜色字符串
    set "rgba_color=rgba(!r_dec!,!g_dec!,!b_dec!,!watermark_opacity!%%)"
   
    rem 使用正确的 rgba 格式,指定支持中文的字体
    "%~dp0magick.exe" "%%i" -gravity South -pointsize !watermark_size! -font "SimHei" -fill "!rgba_color!" -annotate +0+10 "!watermark_text!" "%output_folder%\!output_file!"
   
    rem 检查是否成功生成水印图片
    if exist "%output_folder%\!output_file!" (
      echo 水印添加成功: !output_file!
      set /a processed+=1
    ) else (
      echo 水印添加失败: %%i
      set /a failed+=1
    )
)

echo.
echo 处理结果:
echo 成功添加水印: %processed% 张图片
echo 添加失败: %failed% 张图片
echo 处理完成的图片已移至 "%output_folder%" 文件夹

pause

:end   
上述BAT代码中水印的位置调整,可在第66行代码中修改
调整 -gravity 参数:该参数可以设置水印的基本对齐方式,
例如 North(顶部居中)、South(底部居中)、East(右侧居中)、
West(左侧居中)、NorthEast(右上角)、NorthWest(左上角)、
SouthEast(右下角)、SouthWest(左下角)和 Center(居中)

如需微调文字水印X、Y偏移,插入此代码
rem 修改水印位置,这里将水印设置为左上角,并微调位置
    set "gravity=NorthWest"
    set "offset_x=10"
    set "offset_y=10"
    set "annotate=+%offset_x%+%offset_y%"

wocaishihuanxio 发表于 2025-6-16 17:14

感谢分享

雷欧库珀 发表于 2025-6-16 17:16

额,你还不如ocr图片,直接改图片文件名字呢

zhengzhenhui945 发表于 2025-6-16 17:29

雷欧库珀 发表于 2025-6-16 17:16
额,你还不如ocr图片,直接改图片文件名字呢

是用图片文件名,然后加在图片里面。不是去改图片名

shaosw 发表于 2025-6-16 18:20

有批量加水印小工具的,可以根据文件名生成水印。

afti 发表于 2025-6-16 21:16

不会用PS的家长不是好家委:lol

zhengzhenhui945 发表于 2025-6-16 21:29

shaosw 发表于 2025-6-16 18:20
有批量加水印小工具的,可以根据文件名生成水印。

分享一下:lol

tydzjing 发表于 2025-6-17 00:00

好厉害,这个我要研究一下

zhengzhenhui945 发表于 2025-6-17 00:10

afti 发表于 2025-6-16 21:16
不会用PS的家长不是好家委

被迫上岗了,揽了这个家委差事VBA、PS、BAT跟着搞起来了,家里还备着打印机。。。。。

abCdeU 发表于 2025-6-17 08:38

可怜的家长们
页: [1] 2
查看完整版本: Photoshop按文件名生成文字图层