Команда encode
Команда hazehash ставится вместе с пакетом hazehash. Для чтения изображений ей нужен необязательный пакет sharp:
npm install --save-dev hazehash sharp
npx hazehash --helpУ каждой команды есть собственный --help с полным списком опций. Общие опции: -h, --help, -V, --version и --color / --no-color. Цвета отключаются и когда вывод перенаправлен, когда задана переменная NO_COLOR и в «глупом» терминале, а FORCE_COLOR их включает. Остальные команды описаны на странице Команды decode и info.
encode
Создаёт хеши из файлов изображений, папок, glob-шаблонов или стандартного ввода. В терминале результат это цветная таблица с размером каждого изображения, размером его хеша, средним цветом и итогами; при перенаправлении вывода это простой текст, так что скрипты могут использовать его как есть.
hazehash encode <input…> [options]Вход это файл изображения, папка, glob-шаблон вроде "photos/**/*.jpg" (возьмите его в кавычки, чтобы оболочка его не раскрывала) или -, чтобы прочитать одно изображение из стандартного ввода.
Пример — одно изображение, хеш выводится отдельно:
hazehash encode photo.jpgEd7UwRWKKv5znm6a7sC1tziHDNpMuCikxrYpIgПример — папка, таблицей:
hazehash encode ./images --prettyHazeHash encode budget 28 B · profile default · alpha auto
Image Pixels File Hash Value
✔ images/alpha-003.png 1280×510 43.4 KB 13 B NYATKSAAADXSSaWLiA
✔ images/city-012.jpg 1280×959 280.6 KB 28 B Ed7UwRWKKv5znm6a7sC1tziHDNpMuCikxrYpIg
✔ images/document-004.jpg 1280×821 508.7 KB 28 B Et4TPyOAQNXnVbzFulUm5bq7tUi1isKm3pOziQ
✔ 3 hashes · 832.8 KB → 69 B · 12,359× smaller · 186 msТаблица выше показана для ширины 100 колонок. Более широкий терминал дополнительно показывает средний цвет каждого изображения с цветной плашкой и то, во сколько раз хеш меньше файла; более узкий в первую очередь отбрасывает менее важные колонки.
Опции хеша
-b, --budget <bytes>
Максимальный размер одного хеша в байтах, вместе с заголовком. По умолчанию 28; минимум 7 байт, или 9 с альфой. Больше байт сохраняют больше деталей; см. Выбор бюджета.
hazehash encode photo.jpg --budget 24-p, --profile <name>
Насколько усердно энкодер ищет решение: fast (около 1 мс на изображение), default (около 5 мс) или high (уточняет результат ради примерно на 1% меньшей ошибки). По умолчанию default.
-a, --analysis-size <px>
Длинная сторона уменьшенного изображения, по которому считается хеш, 32–128. По умолчанию 64; больше редко помогает.
--alpha <mode>
auto сохраняет прозрачность, только если она есть у изображения (по умолчанию), true сохраняет её всегда, false никогда.
Какие изображения
-r, --recursive
Искать и в подпапках, когда вход это папка. Glob-шаблон с ** ищет в подпапках всегда.
Вывод
-f, --format <kind>
text выводит один хеш для одного изображения или строки path<TAB>hash для нескольких. json выводит объект { "path": "hash" }. csv выводит таблицу со строкой заголовка. По умолчанию text.
hazehash encode ./images -f json{
"images/alpha-003.png": "NYATKSAAADXSSaWLiA",
"images/city-012.jpg": "Ed7UwRWKKv5znm6a7sC1tziHDNpMuCikxrYpIg",
"images/document-004.jpg": "Et4TPyOAQNXnVbzFulUm5bq7tUi1isKm3pOziQ"
}--details
Для json и csv добавляет размер хеша, размер изображения и размер файла.
hazehash encode ./images -f csv --detailsfile,hash,bytes,width,height,fileBytes
images/alpha-003.png,NYATKSAAADXSSaWLiA,13,1280,510,44406
images/city-012.jpg,Ed7UwRWKKv5znm6a7sC1tziHDNpMuCikxrYpIg,28,1280,959,287378
images/document-004.jpg,Et4TPyOAQNXnVbzFulUm5bq7tUi1isKm3pOziQ,28,1280,821,520957--hex
Выводит хеши в hex вместо base64url.
hazehash encode photo.jpg --hex
# 11ded4c1158a2afe739e6e9aeec0b5b738870cda4cb828a4c6b62922-o, --output <file>
Записывает результат в файл вместо стандартного вывода.
hazehash encode "images/**/*.jpg" -f json -o hashes.json--pretty, --plain
--pretty это цветная таблица с итогами, по умолчанию в терминале. --plain для скриптов и по умолчанию при перенаправлении вывода.
-q, --quiet
Без прогресса и итогов, только результат и ошибки.
Чтение из стандартного ввода
cat photo.jpg | hazehash encode -Коды выхода
0— все изображения закодированы.1— хотя бы один вход не удался. Остальные всё равно записываются, а сбой выводится в стандартный поток ошибок.2— ошибка в командной строке.
Вход, который не найден, сообщается так:
✖ nothing.jpg: no image found