Расчет покрытия экрана - PullRequest
1 голос
/ 15 октября 2019

Вот моя проблема: я пишу диссертацию, связанную с веб-дизайном, и я рассчитываю рассчитать процент изображения, занимаемого определенными веб-элементами. У меня есть коллекция из 500 скриншотов сайтов, и я ищу способ быстро и методично проработать их, подсчитав, сколько места занимает один элемент.

Например, яприкрепил скриншот ниже, чтобы проиллюстрировать мое мышление. Красная обведенная область указывает общую площадь, которую мне нужно измерить, а зеленая обводка указывает подсвеченный элемент (в данном случае кнопка «Поиск»).

Как лучше всего это сделать? Я работаю на MacBook Air под управлением Mojave 10.14.5, и бесплатное программное обеспечение предпочтительнее.

Редактировать (чтобы ответить на комментарии): Я размечаю вручную. В этом случае я просто использовал инструмент предварительного просмотра на Mac и сохранил разметку поверх исходного изображения.

Screenshot

1 Ответ

0 голосов
/ 18 октября 2019

Я бы сделал это с ImageMagick , который можно установить на macOS с homebrew , используя:

brew install imagemagick

Итак, начиная с этого изображения, аннотированного с помощью macOSПредварительный просмотр и аннотация в светло-зеленом цвете с прозрачной заливкой:

enter image description here

Затем я сохраню этот сценарий в своем каталоге HOME как analyze:

#!/bin/bash

if [ $# -ne 1 ] ; then
   >&2 echo "Usage: analyze IMAGE"
   exit 1
fi

image="$1"

# Assume image is annotated in lime green - you can set any RGB colour with syntax like  "rgb(10,20,30)"
annocolour="lime"

# Calculate percentage of image inside annotation box, each line corresponds to a line of code:
# - make everything not lime green into black (image is just pure black with green annotation now)
# - add a 1-pixel black border for the floodfill in the next step to flow around
# - floodfill everything outside the annotation box with lime green starting at 0,0 in top-left corner
# - remove 1-pixel border we added above
# - make everything lime green into white (i.e. everything outside the annotation box becomes white)
# - invert the image so the contents of annotation box are white and everything else is black and print image name and mean, which is the percentage white

convert "$image" -fuzz 10% -fill black +opaque "$annocolour" \
   -bordercolor black -border 1                              \
   -fill "$annocolour" -draw "color 0,0 floodfill"           \
   -shave 1x1 -alpha off                                     \
   -fill white -opaque "$annocolour"                         \
   -negate -format "%f,%[fx:mean*100]\n" info:

Теперь, просто необходимо один раз, сделать этот сценарий исполняемым:

chmod +x $HOME/analyze

Затем я могу вычислить процентное содержание любого изображения внутри аннотированной области с лаймовым оттенком с помощью:

$HOME/analyze grab.png

Пример вывода

grab.png,2.85734

, что означает, что 2,8% изображения находится внутри зеленой рамки.


Если у вас 500 изображений PNG,вам понадобится такой цикл:

for f in *.png; do $HOME/analyze "$f" ; done

Ключевые слова : аннотирование, область аннотации, изображение, обработка изображений, ImageMagick, macOS

...