Дейв Тейлор - Сценарии командной оболочки. Linux, OS X и Unix. 2-е издание
- Название:Сценарии командной оболочки. Linux, OS X и Unix. 2-е издание
- Автор:
- Жанр:
- Издательство:Питер
- Год:2017
- Город:СПб.
- ISBN:978-5-496-03029-8
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Дейв Тейлор - Сценарии командной оболочки. Linux, OS X и Unix. 2-е издание краткое содержание
Цель этой книги — продемонстрировать практические приемы программирования сценариев на bash и познакомить с самыми распространенными утилитами на коротких и компактных примерах, не вдаваясь в излишние подробности. Экспериментируйте с этими сценариями — ломайте, исправляйте и приспосабливайте их под свои нужды, чтобы понять, как они работают. Только так вы сможете решать самые сложные задачи.
Сценарии командной оболочки. Linux, OS X и Unix. 2-е издание - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
done
exit 0
Как это работает
Когда инструмент identify вызывается с флагом −verbose, он извлекает огромный объем информации о каждом анализируемом изображении, как показано ниже, где исследуется один из файлов в формате PNG:
$ identify −verbose testimage.png
Image: testimage.png
··Format: PNG (Portable Network Graphics)
··Class: DirectClass
··Geometry: 1172x158+0+0
··Resolution: 72x72
··Print size: 16.2778x2.19444
··Units: Undefined
-опущено-
··Profiles:
····Profile-icc: 3144 bytes
······IEC 61966-2.1 Default RGB colour space −sRGB
··Artifacts:
····verbose: true
··Tainted: False
··Filesize: 80.9KBB
··Number pixels: 185KB
··Pixels per second: 18.52MB
··User time: 0.000u
··Elapsed time: 0:01.009
··Version: ImageMagick 6.7.7-10 2016-06-01 Q16 http://www.imagemagick.org
$
Это очень большой объем данных. Намного больше, чем можно было представить. Но без флага −verbose вывод выглядит весьма туманным:
$ identify testimage.png
testimage.png PNG 1172x158 1172x158+0+0 8-bit DirectClass 80.9KB 0.000u
0:00.000
Нам хотелось бы получить что-то среднее, и в такой ситуации может пригодиться строка формата. Давайте рассмотрим внимательнее листинг 14.1, сфокусировав все внимание на единственной значимой строке .
Строка формата −format поддерживает почти 30 спецификаторов, позволяющих извлекать конкретные данные из одного или нескольких файлов изображений в строго определенном формате. В данном сценарии мы выбрали %f, чтобы получить имя файла, %G — чтобы получить ширину и высоту, и %k — чтобы получить максимальное количество цветов, используемых в изображении.
Более подробную информацию о спецификаторах строки формата −format можно найти по адресу: http://www.imagemagick.org/script/escape.php.
Запуск сценария
Всю работу выполняет ImageMagick, поэтому данный сценарий в основном лишь кодирует желаемый формат вывода. Информация извлекается из изображений легко и просто, как показывает листинг 14.2.
Результаты
Листинг 14.2.Запуск сценария imagesize
$ imagesize * | head -4
100_0399.png: 1024x768 with 120719 colors.
8t grade art1.jpeg: 480x554 with 11548 colors.
dticon.gif: 143x163 with 80 colors.
Angel.jpg: 532x404 with 80045 colors.
$
Усовершенствование сценария
В настоящий момент мы видим размеры изображений в пикселях и количество используемых цветов, но также было бы полезно знать размеры файлов. Однако любую дополнительную информацию сложно читать, если не предусмотреть ее форматирование.
№ 95. Добавление водяных знаков в изображения
Если вы надеетесь сохранить в неприкосновенности свои изображения и другой контент, публикуемый в сети, вы неизбежно будете разочарованы. Все, что опубликовано в сети, доступно любому для копирования, даже если вы защитили доступ к своим материалам паролем, включили предупреждение об авторских правах или даже добавили на сайт код, не позволяющий сохранять изображения. Даже чтобы показать изображение на экране, необходимо, чтобы оно оказалось в памяти, а эту память можно скопировать с помощью инструментов захвата экрана.
Но не все потеряно. У вас есть два способа защитить свои изображения в сети. Первый — публиковать только изображения маленьких размеров. Загляните на сайты профессиональных фотографов и вы увидите, что мы имеем в виду. Обычно на них публикуются только миниатюры, потому что фотографы хотят зарабатывать на больших изображениях.
Второй способ — использование водяных знаков, хотя некоторые художники и отказываются добавлять любую идентификационную информацию непосредственно на фотографии. Тем не менее с помощью ImageMagick легко можно добавить водяные знаки, как показано в листинге 14.3, даже в большое количество файлов сразу.
Код
Листинг 14.3.Сценарий watermark
··#!/bin/bash
··# watermark — добавляет указанный текст в виде водяных знаков в заданное
··#·· изображение, сохраняя результат в файле с именем image+wm.
··wmfile="/tmp/watermark.$$.png"
··fontsize="44"························# Должен быть начальным аргументом.
··trap "$(which rm) −f $wmfile" 0 1 15 # Не оставлять временный файл.
··if [$# −ne 2]; then
····echo "Usage: $(basename $0) imagefile \"watermark text\"" >&2
····exit 1
··fi
··if [! -r "$1"]; then
····echo "$(basename $0): Can't read input image $1" >&2
····exit 1
··fi
··# Для начала получить размеры изображения.
··dimensions="$(identify −format "%G" "$1")"
··# Создать временный слой для водяного знака.
··convert −size $dimensions xc: n −p— pointsize $fontsize −gravity south \
····-draw "fill black text 1,1 '$2' text 0,0 '$2' fill white text 2,2 '$2'" \
····$wmfile
··# Теперь объединить временный слой и исходный файл.
··suffix="$(echo $1 | rev | cut −d. -f1 | rev)"
··prefix="$(echo $1 | rev | cut −d. -f2- | rev)"
··newfilename="$prefix+wm.$suffix"
··composite −dissolve 75 % −gravity south $wmfile "$1" "$newfilename"
··echo "Created new watermarked image file $newfilename."
··exit 0
Как это работает
Вся запутанность кода здесь объясняется использованием ImageMagick. Да, этот пакет многое умеет, но даже полная документация, где описаны все тонкости, не упрощает работу с ним. Но трудности не должны вас пугать, потому что потрясающие возможности различных инструментов ImageMagick стоят того.
Первый шаг — получить размеры изображения , чтобы создать точно таких же размеров слой с водяными знаками. В противном случае изображение будет испорчено!
Спецификатор "%G" возвращает ширину и высоту, которые затем передаются программе convert для создания нового холста. Строку с вызовом convert мы скопировали из документации ImageMagick, потому что она действительно слишком хитрая, чтобы ее можно написать с нуля. (Чтобы узнать больше о языке параметров команды conv −d— draw, попробуйте воспользоваться поисковой системой. Или можете просто скопировать наш код!)
Имя нового файла должно состоять из имени исходного файла с дополнением "+wm", и именно это делают три строки в . Команда rev переворачивает входную строку задом наперед, а следующая команда cut −d. -f1 просто возвращает расширение файла, поскольку мы не знаем, сколько точек присутствует в имени файла. Затем расширение снова переворачивается и добавляется после "+wm.".
В заключение вызывается утилита composite , объединяющая элементы и создающая изображение с водяными знаками. Вы можете поэкспериментировать с разными значениями −dissolve, чтобы отрегулировать прозрачность дополнительного слоя.
Интервал:
Закладка: