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

使用Pyglet将GIF缩放至全屏时仅半屏显示另一半空白问题求助

问题修复方案

核心问题原因

  • 缩放比例计算逻辑错误:原有max(值1,值2)/min(值1,值2)的计算方式只能得到两个值的倍数差,无法正确区分原图大于/小于屏幕的场景,会导致缩放后动图尺寸不符合预期。
  • 缺少动图居中偏移逻辑:Pyglet的Sprite默认锚点为左下角,默认绘制位置为坐标原点(0,0),缩放后的动图如果尺寸小于屏幕,就会在右侧和上侧留出空白区域。
  • 可选检查:如果你只有1台显示器,screen[1]会取到不存在的第二屏参数,也可能导致尺寸计算错误。

修复后代码

import pyglet

# 加载动图
animation = pyglet.image.load_animation('Goober#13427G.gif')
animSprite = pyglet.sprite.Sprite(animation)

# 获取屏幕参数
display = pyglet.canvas.Display()
screens = display.get_screens()
# 单显示器请把下方的screens[1]改为screens[0]
target_screen = screens[1]

# 正确计算等比适配比例,保证动图不超出屏幕
scale_w = target_screen.width / animSprite.width
scale_h = target_screen.height / animSprite.height
animSprite.scale = min(scale_w, scale_h)

# 创建全屏窗口
window = pyglet.window.Window(width=target_screen.width, height=target_screen.height, fullscreen=True, screen=target_screen)

# 调整动图位置到屏幕居中
animSprite.x = (window.width - animSprite.width) / 2
animSprite.y = (window.height - animSprite.height) / 2

# 设置背景为白色
r, g, b, alpha = 1, 1, 1, .5
pyglet.gl.glClearColor(r, g, b, alpha)


@window.event
def on_draw():
    window.clear()
    animSprite.draw()


pyglet.app.run()

额外注意事项

如果你的设备开启了系统级显示缩放(比如Windows的125%缩放、Mac的HiDPI模式),需要额外获取屏幕的缩放系数调整比例,避免出现模糊或者尺寸不对的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 10:24:04