如何轻松缩放从高DPI屏幕拍摄的屏幕截图?
由于我切换到高DPI显示器,我发布的屏幕截图非常大,如下所示。
有没有办法让它们看起来很正常?
最好是比启动GIMP更快的东西。
特别是,在gnome-screenshot中是否有隐藏选项?
- 可能没有完美的工具,因为Ubuntu适应高DPI的方式并不统一(字体,窗口装饰,程序,可能有不同的比例),但一个好的工具会读取这些设置并找出最佳使用比例。
- 我希望保持仅选择部分屏幕的能力(如在SHIFT + PRTSCR中),并选择文件的名称。
- 如果重要,我总是将我的截图保存在
$HOME/Pictures
。
1.照常制作屏幕截图,然后使用快捷键自动缩放您拍摄的最新屏幕截图。
放在快捷键下,下面的脚本将:
- 在截图目录中找到最后添加的屏幕截图(正如您在评论中提到的那样
~/Picures
) - 将图像缩放为任意百分比
- 将图像重命名并保存为
renamed_filename.png
,其中filename.png
是原始文件名。
如何使用
-
该脚本需要安装
python3-pil
库,在您的系统上可能不是这种情况:sudo apt-get install python3-pil
-
将下面的脚本复制到一个空文件中,保存为
resize_screenshot.py
-
通过截屏测试运行脚本,然后通过命令运行脚本:
python3 /path/to/resize_screenshot.py 80
其中
80
是所需的输出大小百分比。 该脚本现在创建了最后一个屏幕截图的resize的副本。 -
如果一切正常,请将其添加到快捷键:系统设置>键盘>快捷方式>自定义快捷方式。 添加命令:
python3 /path/to/resize_screenshot.py 80
剧本
#!/usr/bin/env python3 import os import sys from PIL import Image percent = float(sys.argv[1])/100 pic_list = [] # list all .png files in ~/Pictures pic_dir = os.environ["HOME"]+"/Pictures" files = [pic_dir+"/"+f for f in os.listdir(pic_dir) if \ all([f.endswith(".png"), not f.startswith("resized")])] # create a sorted list + the creation date of relevant files pics = [[f, int(os.stat(f).st_ctime)] for f in files] pics.sort(key=lambda x: x[1]) # choose the latest one resize = pics[-1][0] # open the image, look up its current size im = Image.open(resize) size = im.size # define the new size; current size * the percentage newsize = [int(n * percent) for n in size] # resize the image, save it as renamed file (keeping original) im.thumbnail(newsize, Image.ANTIALIAS) newfile = pic_dir+"/resized_"+resize.split("/")[-1] im.save(newfile, "png")
一个例子
您的图片示例,resize:
python3
2.全自动选项
虽然上面的脚本可以在快捷键上完成,但您可以使用后台脚本完全自动完成。 所有thye脚本都检查~/Picures
新文件,并执行第一个脚本中的~/Picures
操作。
剧本
#!/usr/bin/env python3 import os import sys from PIL import Image import time percent = float(sys.argv[1])/100 pic_dir = os.environ["HOME"]+"/Pictures" def pics_list(dr): return [pic_dir+"/"+f for f in os.listdir(pic_dir) if \ all([f.endswith(".png"), not f.startswith("resized")])] def scale(f): #open the image, look up its current size im = Image.open(f) size = im.size # define the new size; current size * the percentage newsize = [int(n * percent) for n in size] # resize the image, save it as renamed file (keeping original) im.thumbnail(newsize, Image.ANTIALIAS) newfile = pic_dir+"/resized_"+f.split("/")[-1] im.save(newfile, "png") p_list1 = pics_list(pic_dir) while True: time.sleep(2) p_list2 = pics_list(pic_dir) for item in p_list2: if not item in p_list1: scale(item) p_list1 = p_list2
如何使用
设置与上面的脚本完全相同(“ 如何使用 ”),但不是[4.]
,而是将其添加到启动应用程序:Dash>启动应用程序>添加。 添加命令:
python3 /path/to/resize_screenshot.py 80
3.带刻度对话的全自动选项
实际上相同的脚本,但现在使用缩放对话, 在您将图像保存到~/Pictures
后立即:
此屏幕截图自动调整为80%:)
剧本
#!/usr/bin/env python3 import os import sys from PIL import Image import time import subprocess # --- change if you like the default scale percentage, as proposed by the slider: default_percent = 80 # --- change if you like the screenshot directory pic_dir = os.environ["HOME"]+"/Pictures" # --- def pics_list(dr): return [pic_dir+"/"+f for f in os.listdir(pic_dir) if \ all([f.endswith(".png"), not f.startswith("resized")])] def scale(f, size): #open the image, look up its current size im = Image.open(f) currsize = im.size # define the new size; current size * the percentage newsize = [int(n * size) for n in currsize] # resize the image, save it as renamed file (keeping original) im.thumbnail(newsize, Image.ANTIALIAS) newfile = pic_dir+"/resized_"+f.split("/")[-1] im.save(newfile, "png") p_list1 = pics_list(pic_dir) while True: time.sleep(2) p_list2 = pics_list(pic_dir) for item in p_list2: if not item in p_list1: try: size = subprocess.check_output([ "zenity", "--scale", "--value="+str(default_percent), ]).decode("utf-8") scale(item, float(size)/100) except subprocess.CalledProcessError: pass p_list1 = p_list2
使用
除了命令之外,安装完全如上所述,现在没有比例百分比:
python3 /path/to/resize_screenshot.py
注意
与往常一样,后台脚本实际上不使用任何资源,除非你的~/Pictures
目录非常庞大:)。
使用gnome-screenshot我们无法缩放输出。
为此,我们可以将另一个屏幕截图终端应用程序分配给快捷方式。
50%大小的屏幕截图示例:
-
Image Magick -s select window or rectangle with mouse -u use currently focused windows
下面的示例将显示,然后使用scrot的默认文件名(日期/小时/分钟/秒/大小)在我们的图片目录中保存所选区域或窗口的半尺寸(50%)屏幕截图:
scrot -s -e "convert \$f -resize 50% ~/Pictures/\$f && display \$f && rm \$f"