You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python与外部程序(Photoshop)的菜单及选项交互实现自动化?

Automating Photoshop 2015 with Python: No Mouse Simulation Needed

Hey there! Let’s tackle this Photoshop automation workflow you’re building—screenshot, launch PS, create a document, paste, and export as PNG. The good news is you’re already halfway there with win32com.client, and we can ditch the keyboard shortcuts/mouse hacks by leveraging Photoshop’s COM Object Model directly. This is the official way to interact with PS programmatically, and it’s way more reliable than simulating user input.

Key Approach: Use Photoshop’s COM API Instead of Shortcuts

Instead of faking Ctrl+N or clicking buttons, we’ll call Photoshop’s native methods directly via the COM interface you already started using. Here’s how each step works:

1. Capture Screenshot & Copy to Clipboard

First, grab your screen and get it into the clipboard so Photoshop can paste it easily. You can use PIL.ImageGrab (Windows-only, which fits your setup) or win32clipboard for more control:

from PIL import ImageGrab

# Capture the entire screen
screenshot = ImageGrab.grab()
# Copy screenshot to system clipboard
screenshot.toclipboard()

2. Launch Photoshop & Control It via COM

You already know how to launch PS with win32com.client.Dispatch, but we’ll extend this to use PS’s built-in methods:

import win32com.client

# Launch Photoshop (or connect to a running instance)
ps_app = win32com.client.Dispatch("Photoshop.Application")
ps_app.Visible = True  # Make PS window visible (optional but helpful for debugging)

3. Create a New Document (No "OK" Button Needed!)

Forget simulating Ctrl+N and clicking OK—we’ll create a document with exact dimensions matching your screenshot (or any specs you want) in one line:

# Get screenshot dimensions to match the new document
width, height = screenshot.size

# Create new RGB document (mode=1 corresponds to psRGBMode)
new_doc = ps_app.Documents.Add(
    Width=width,
    Height=height,
    Resolution=72,  # Standard screen resolution
    Mode=1  # RGB color mode
)

This bypasses the new document dialog entirely—no need to click anything!

4. Paste the Screenshot

Use the document’s native Paste() method to drop the clipboard content directly into the new document:

# Paste screenshot from clipboard
new_doc.Paste()

5. Export as PNG (No Save Dialogs!)

Again, we’ll use PS’s export API to save directly to PNG without any user input. First, create a PNGSaveOptions object to set export settings, then call Export():

# Create PNG export options
png_options = win32com.client.Dispatch("Photoshop.PNGSaveOptions")
png_options.Interlaced = False  # Set to True if you want interlaced PNGs
png_options.Compression = 6  # Compression level (0-9, 9 is highest)

# Export the document to your desired path
export_path = r"C:\Your\Target\Path\screenshot_export.png"
new_doc.Export(
    ExportPath=export_path,
    ExportAs=2,  # 2 corresponds to psPNG export format
    Options=png_options
)

Full Example Script

Putting it all together, here’s a complete working script:

from PIL import ImageGrab
import win32com.client

def automate_ps_screenshot_workflow():
    # Step 1: Capture screenshot and copy to clipboard
    screenshot = ImageGrab.grab()
    screenshot.toclipboard()
    width, height = screenshot.size

    # Step 2: Launch/connect to Photoshop
    try:
        ps_app = win32com.client.Dispatch("Photoshop.Application")
        ps_app.Visible = True
    except Exception as e:
        print(f"Failed to launch Photoshop: {e}")
        return

    # Step 3: Create new document matching screenshot size
    try:
        new_doc = ps_app.Documents.Add(Width=width, Height=height, Resolution=72, Mode=1)
    except Exception as e:
        print(f"Failed to create new document: {e}")
        return

    # Step 4: Paste screenshot
    try:
        new_doc.Paste()
    except Exception as e:
        print(f"Failed to paste screenshot: {e}")
        new_doc.Close(SaveChanges=False)
        return

    # Step 5: Export as PNG
    try:
        png_options = win32com.client.Dispatch("Photoshop.PNGSaveOptions")
        png_options.Interlaced = False
        png_options.Compression = 6
        export_path = r"C:\Your\Path\exported_screenshot.png"
        new_doc.Export(ExportPath=export_path, ExportAs=2, Options=png_options)
        print(f"Successfully exported to {export_path}")
    except Exception as e:
        print(f"Failed to export PNG: {e}")
    finally:
        # Close the document without saving (optional, adjust as needed)
        new_doc.Close(SaveChanges=False)

if __name__ == "__main__":
    automate_ps_screenshot_workflow()

Important Notes & Resources

  • Photoshop COM Constants: Values like Mode=1 (RGB) and ExportAs=2 (PNG) come from Photoshop’s scripting enumerations. You can find full lists in Adobe’s official Photoshop Scripting Guide (even though it’s written for JS/VBS, the object model is identical for Python/COM).
  • Troubleshooting COM Connection: If PS doesn’t connect, try registering the COM component manually: open Command Prompt as admin and run regsvr32 "C:\Program Files\Adobe\Adobe Photoshop 2015\Photoshop.exe" (adjust the path to match your PS install location).
  • Discovering More Methods: Use win32com.client.gencache.EnsureDispatch("Photoshop.Application") to generate Python-friendly wrappers for PS’s COM objects. You can then inspect these generated modules to see all available methods/properties.

This approach is way more robust than simulating keyboard or mouse actions—it interacts directly with Photoshop’s internal logic, so you won’t run into issues with window positions or dialog box changes.

内容的提问来源于stack exchange,提问作者Emilio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 11:42:30