Как я могу легко масштабировать снимок экрана, сделанный с экрана высокого DPI?

Так как я переключился на Высокий дисплей DPI, снимки экрана, которые я отправляю, являются неловко большими, пример ниже.

Существует ли способ быстро заставить их выглядеть нормальными?
Предпочтительно что-то быстрее, чем разжигание GIMP.

В частности, есть ли скрытая опция для этого в снимке экрана гнома?

enter image description here

  • Нет, вероятно, никакого идеального инструмента, так как способ адаптировать Ubuntu к Высокому DPI не универсален (шрифты, художественные оформления окна, программы, могли бы иметь различные масштабы), но хороший инструмент считает эти настройки и выяснит то, что является лучшим масштабом для использования.
  • Предпочтительно я хотел бы сохранить способность выбора только части экрана (как в SHIFT+PRTSCR), и выбор названия файла.
  • В случае, если это имеет значение, я всегда сохраняю свои снимки экрана в $HOME/Pictures.
3
задан 12 January 2016 в 05:09

2 ответа

1. Сделайте снимок экрана, как обычно, затем автоматически масштабируйте последний снимок экрана, который Вы сделали с сочетанием клавиш.

Помещенный под сочетанием клавиш, сценарием ниже желания:

  1. Найдите последний добавленный снимок экрана в своем каталоге снимка экрана (который является ~/Picures, как Вы упомянули в комментарии),
  2. Масштабируйте изображение в произвольный процент
  3. Переименуйте и сохраните образ как renamed_filename.png, где filename.png исходное имя файла.

Как использовать

  1. Для сценария нужно python3-pil библиотека, которая будет установлена, который не мог бы иметь место в Вашей системе:

    sudo apt-get install python3-pil
    
  2. Скопируйте сценарий ниже в пустой файл, сохраните его как resize_screenshot.py

  3. Тестовый прогон сценарий путем делания снимка экрана и впоследствии запущенный скрипт командой:

    python3 /path/to/resize_screenshot.py 80
    

    где 80 желаемый выходной процент размера. Сценарий теперь создал измененную копию последнего снимка экрана.

  4. Если все хорошо работает, добавьте его к сочетанию клавиш: Параметры настройки системы> Клавиатура> Ярлыки> Пользовательские Ярлыки. Добавьте команду:

    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")

Пример

Пример Вашего изображения, измененного:

python3 <script> 80

enter image description here


2. Полностью автоматическая опция

В то время как сценарий выше делает свое задание на сочетании клавиш, можно сделать его полностью автоматически с фоновым сценарием. Весь thye сценарий делает проверить на новые файлы в ~/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.], добавьте его для Запущения Приложений: Тире> Приложения Запуска> Добавляет. Добавьте команду:

python3 /path/to/resize_screenshot.py 80

3. Полностью автоматическая опция с диалогом масштаба

Практически тот же сценарий, но теперь с диалогом масштаба, сразу после того, как Вы сохранили образ к ~/Pictures:

enter image description here

Этот снимок экрана был автоматически изменен к 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 каталог безумно огромен :).

3
ответ дан 1 December 2019 в 15:55

Со снимком экрана гнома мы не можем масштабировать вывод.

Чтобы сделать так автоматически, мы можем присвоить другое терминальное приложение снимка экрана ярлыку.

Примеры для снимков экрана в 50% размером:

  1. Изображение Magick Install imagemagick import -resize к проценту оригинала

    • сделайте снимок экрана целого рабочего стола:

      import -window root -resize 50% [-delay <value>] shot.png
      
    • сделайте снимок экрана окна (можно выбрать мышью):

      import -window $(xdotool selectwindow) resize 50% shot.png
      
    • сделайте снимок экрана результата дисплея и окна:

      import -window $(xdotool selectwindow) -resize 50% shot.png && display shot.png
      
    • загрузите снимок экрана в любое другое внешнее средство просмотра (например. eog)

      import -window $(xdotool selectwindow) -resize 50% shot.png && eog shot.png
      
  2. scrot Install scrot (страница справочника) вывод для Обработки изображений Волшебства convert для выбора экранной области

    scrot <options> -e "convert \$f -resize 50% shot.png && rm \$f"
    <options>
    -s select window or rectangle with mouse
    -u use currently focused windows
    

    Ниже примера отобразит, затем сохранит полуразмерный (50%-й) снимок экрана выбранной области или окна с помощью имени файла scrot по умолчанию (дата/час/минута/второй/размер) в нашем каталоге изображений:

    scrot -s -e "convert \$f -resize 50% ~/Pictures/\$f && display \$f && rm \$f"
    
1
ответ дан 1 December 2019 в 15:55

Другие вопросы по тегам:

Похожие вопросы: