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

使用Pillow打开PostScript图像时像素尺寸异常问题求助

解决Pillow打开PostScript图像时像素尺寸不一致的问题

问题根源

tkinter的Canvas导出PostScript文件时,默认没有明确指定画布的物理尺寸和分辨率。Pillow渲染PS文件时用的是默认72DPI,和在线工具的渲染逻辑(通常匹配画布实际像素尺寸)不统一,就导致了像素拉伸或压缩的问题。

两种可行解决方案

方案1:导出PS时指定尺寸,Pillow打开匹配分辨率

修改你的saveFile函数,给canvas.postscript加上页面尺寸参数,同时在Image.open时指定对应DPI:

from PIL import Image, EpsImagePlugin
import tkinter as tk

def saveFile(canvas:tk.Canvas):
    EpsImagePlugin.gs_windows_binary = r'C:\Program Files\gs\gs9.56.1\bin\gswin64c'
    file_name = "img"
    # 获取画布实际宽高
    canvas_w = canvas.winfo_width()
    canvas_h = canvas.winfo_height()
    
    # 导出PS时明确页面尺寸,单位为PostScript的"点"(1英寸=72点)
    canvas.postscript(
        file=f"images/ps/{file_name}.ps",
        colormode='color',
        pagewidth=f"{canvas_w}p",
        pageheight=f"{canvas_h}p"
    )
    
    # 打开PS时指定72DPI,和页面尺寸单位匹配
    psimage = Image.open(f'images/ps/{file_name}.ps', dpi=(72, 72))
    # 保存PNG时也指定DPI确保尺寸正确
    psimage.save(f'images/png/{file_name}.png', "png", dpi=(72, 72))
    psimage.close()

方案2:直接用Ghostscript命令行转换(更稳定)

跳过Pillow的PS解析层,直接调用Ghostscript命令行转PNG,能精准控制输出尺寸:

import subprocess
import tkinter as tk

def saveFile(canvas:tk.Canvas):
    gs_path = r'C:\Program Files\gs\gs9.56.1\bin\gswin64c'
    file_name = "img"
    
    canvas.postscript(
        file=f"images/ps/{file_name}.ps",
        colormode='color'
    )
    
    # 获取画布实际像素尺寸
    canvas_w = canvas.winfo_width()
    canvas_h = canvas.winfo_height()
    
    # 构造Ghostscript转换命令
    cmd = [
        gs_path,
        '-dSAFER', '-dBATCH', '-dNOPAUSE',
        '-sDEVICE=png16m',  # 用24位彩色PNG设备
        f'-dDEVICEWIDTHPOINTS={canvas_w}',
        f'-dDEVICEHEIGHTPOINTS={canvas_h}',
        '-dGraphicsAlphaBits=4',  # 抗锯齿提升画质
        f'-sOutputFile=images/png/{file_name}.png',
        f'images/ps/{file_name}.ps'
    ]
    
    subprocess.run(cmd, check=True)

注意事项

  • 代码里的路径建议用/或者原始字符串(r'路径'),避免Windows下的转义字符问题。
  • 方案2直接调用Ghostscript,比Pillow的封装逻辑更可靠,能完美匹配你期望的像素排列效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 15:27:11