有什么方法可以使用外部颜色十六进制代码列表来更改 Photoshop 中的图层填充?

Any way to use external list of color hex codes to change layer fill in Photoshop?

我有一个包含 100 种不同颜色的十六进制代码的列表。 我想创建 100 个不同的 PNG 文件,每个文件使用此列表中的不同颜色。

显然我不能在 Photoshop 中使用变量,所以我正在寻找另一种方法,因为我不是脚本大师。

如果脚本是唯一的方法,是否有一种简单的语言可以利用 VB、Powershell 等,而不是尝试学习 Javascript 等?

谢谢

这是一般的前提,对于每张图片改变hexcol:

var hexcol = "ff00ff"; // change this to alter the colour
var col = new SolidColor;
col.rgb.hexValue = hexcol;
app.activeDocument.selection.fill(col, ColorBlendMode.NORMAL, 100, false);

也许学习 JavaScript 最终会允许一种简化的方法,但这就是我所做的。

  1. 首先我创建了一个包含我想要的颜色十六进制代码的 CSV 文件:

    filename red green blue
    BackGround1 255 255 255
  2. 然后我创建了一个 PowerShell 脚本来为每种颜色生成一个 PNG 文件:

    # Specify the path of the Excel or csv data file
    $FilePath = "C:\...\BackgroundColors.csv"
    
    # Specify the starting and ending data rows
    $RowStart = 2
    $RowEnd = 101
    
    # Specify the Sheet name
    $SheetName = "BackgroundColors"
    
    # Create an Object Excel.Application using Com interface
    $ObjExcel = New-Object -ComObject Excel.Application
    # Disable the 'visible' property so the document won't open in excel
    $ObjExcel.Visible = $false
    # Open the Excel file and save it in $WorkBook
    $WorkBook = $ObjExcel.Workbooks.Open($FilePath)
    # Load the WorkSheet
    $WorkSheet = $WorkBook.sheets.item($SheetName)
    
    # Set Image file SaveTo location
    $SaveTo ="C:\...\Backgrounds"
    
    # Instatiate Image Com Interface
    Add-Type -AssemblyName System.Drawing
    
    #Loop
    for ($counter = $RowStart; $counter -le $RowEnd; $counter++ )
    {
        # Set Image variable
        $SaveAs = $WorkSheet.Range("A$counter").text
        $Red = $WorkSheet.Range("B$counter").text
        $Green = $WorkSheet.Range("C$counter").text
        $Blue = $WorkSheet.Range("D$counter").text
        $FileName = "$SaveTo$SaveAs.png"
    
        #Create bitmap
        $bmp = new-object System.Drawing.Bitmap 750,750 
    
        #Create brush with color
        $brush = [System.Drawing.SolidBrush]::New([System.Drawing.Color]::FromArgb(255, $Red, $Green, $Blue))
    
        $graphics = [System.Drawing.Graphics]::FromImage($bmp) 
        $graphics.FillRectangle($brush,0,0,$bmp.Width,$bmp.Height) 
    
        $graphics.Dispose() 
        $bmp.Save($FileName) 
    }
    
    $workbook.Close($false)
    $objExcel.Quit()
    
    # release Com objects
    [System.Runtime.Interopservices.Marshal]::ReleaseComObject($Worksheet) | Out-Null
    [System.Runtime.Interopservices.Marshal]::ReleaseComObject($Workbook) | Out-Null
    [System.Runtime.Interopservices.Marshal]::ReleaseComObject($objExcel) | Out-Null
    
    # Force garbage collection
    [System.GC]::Collect()
    

    我知道可能有更好的方法,而不是使用 Excel 文件方法,但我想了解如何利用 PowerShell Excel。

  3. 然后我在 PhotoShop 中创建了一个模板,其中包含一个图层,我可以用我创建的每个文件以及其他文件替换我想要的完整图像:

    File > New

    Image > Variables > Define > Pixel Replacement

  4. 我创建了另一个 CSV 文件,其中包含我创建的图像文件的路径:

    newfilename background path image path
    NewImageName C:\...\BackGround1.png C:\...\Image1.png
  5. 然后在 Photoshop 中我将 CSV 文件作为数据集导入:

    Image > Variables > Data Sets > Import

  6. 然后将数据集导出为文件,创建PSD文件:

    File > Export > Data Sets as Files

  7. 然后我创建了一个 Photoshop Action 来将 PSD 文件保存为 PNG 文件:

    Window > Actions > Create New Action > Record

  8. 然后我 运行 对所有 PSD 文件进行批处理:

    File > Automate > Batch > MyActions

当然涉及的细节比这里介绍的要多,但这种方法使我能够自动创建背景,然后将它们与其他图像组合,最终快速创建各种新图像。整个过程不是很快就制定出来的,但现在它可以快速重复,并且随着时间的推移可以通过额外的知识和能力得到改进。