使用PIL截取屏幕时的DPI问题

本文探讨了使用Python的PIL库在Windows系统中进行屏幕截取时,由于DPI设置导致的图像缩放问题。通过实例说明了125%的缩放比例如何影响截取的图像,并提供了Stack Overflow上的解决方案,涉及修改注册表和环境变量以确保截图与屏幕显示一致。

当我们使用python进行屏幕截取时,我们通常会使用如下代码:

from PIL import ImageGrab

img = ImageGrab.grab()
img.save('xxx.png')
img.close()

但是,当我们再次加载时,就会发现,截取的屏幕和实际的屏幕不一致。具体表现为:重新读取后的图像,有点放大或者缩小的样子。原因在于,我们电脑的屏幕设置问题。
拿我自己的笔记本电脑为例,在桌面右键,点开显示设置,可以看到在缩放与布局这一栏,系统推荐的是125%
在这里插入图片描述
而这,就是导致了我么使用PIL截取屏幕和读取屏幕图像产生差异的原因。要想让截屏和读屏的图像保持一致,我们可以使用下方的代码进行注册表的修改和环境变量的配置:

from PIL import ImageGrab
# 你要运行的程序的入口
def main():
	img = ImageGrab.grab()
	img.save('xxx.png')
	img
### 如何生成分辨率为330dpi的截图 在日常工作中,有需要生成高分辨率的截图以满足特定需求,例如打印高质量文档或提交学术论文中的插图。以下是关于如何生成分辨率为330dpi的截图的相关说明。 #### 使用屏幕截图工具并调整分辨率 大多数操作系统自带的截屏工具无法直接设置截图的DPI值,因此需要额外的后期处理步骤来实现目标分辨率。可以通过以下方法完成: 1. **Windows系统下的解决方案** - Windows自带的“Snipping Tool”或“Snip & Sketch”可以用于捕捉屏幕内容,但它们不会提供选项来设定DPI值。 - 截取图片后,可将其导入到图像编辑软件(如Photoshop或GIMP),并通过菜单项调整其分辨率至所需值[^2]。 - 打开图片文件,在Photoshop中选择`Image > Image Size...`。 - 在弹出窗口中勾选“Resample”,并将Resolution字段更改为330像素/英寸[^4]。 2. **MacOS系统的解决方案** - MacOS内置的截屏功能同样缺乏直接指定DPI的功能。 - 可通过快捷键组合(Command + Shift + 5)捕获屏幕区域,并保存为PNG或其他格式。 - 接下来利用Preview应用打开该图片,再导出手动更改属性使其适应更高分辨率的需求[^1]。 3. **在线工具辅助法** 如果不想安装任何本地应用程序,则可以选择一些高效的在线服务来进行批量或者单张图片的DPI调节工作。例如,“压缩图”网站提供了便捷的方式让用户无需注册即可上传原始素材并即获得优化后的版本[^3]。 #### 编程方式自定义截图参数 对于技术爱好者来说,还可以尝试编写脚本来自动化整个过程。Python语言配合Pillow库就是一个不错的选择: ```python from PIL import ImageGrab, Image def capture_and_resize(dpi=330): img = ImageGrab.grab() # Capture the screen. resized_img = img.resize((int(img.width * (dpi / 72)), int(img.height * (dpi / 72))), resample=Image.BICUBIC) resized_img.save('screenshot_{}.png'.format(dpi), dpi=(dpi,dpi)) capture_and_resize(330) ``` 此代码片段实现了抓取当前屏幕画面,并按比例放大尺寸从而间接提升有效DPI数值的效果。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值