8. "Все время меняюсь и ничего не помню" (Масштабирование и трансформация в слое)
Откусишь с одной стороны - подрастешь,
с другой - уменьшишься!
(Л.Кэррол. Алиса в стране чудес)
Кроме перемещения и вращения, PSP умеет делать еще один вид преобразования в слое - масштабирование (Zoom). По смыслу операция понятна: размеры объекта в слое могут изменяться как по ширине, так и по высоте, что позволяет получить эффект изменения размеров объекта (масштабирование), а также определенное изменение его формы (трансформацию). При этом возможности трансформации ограничены непропорциональным изменением размеров объекта по ширине и высоте. Казалось бы, что там придумывать с масштабом? Общеизвестно, что масштабом называют отношение размера изображения объекта к его натуральной величине. Но ведь так было бы скучно жить! И вот что придумали разработчики PSP.
За исходный принимается тот размер, который объект получает при его первоначальном размещении в слое. А мы помним, что первоначально объект помещается в слой слайда не в своих истинных размерах, а в приведенных к размерам слайда путем вписывания объекта по одному или обоим измерениям в зависимости от установленного способа вписывания (привязать, заполнить, растянуть). И этот исходный размер принимается в PSP за масштаб объекта, равный 100%. Допустим, мы хотим уменьшить вдвое размеры объекта и по ширине (ось Х), и по высоте (ось Y). В этом случае тогда масштаб по обеим осям будет установлен равным 50%. Масштаб в PSP равен новому размеру по оси, деленному на старый размер и умноженному на 100 для перехода к процентам. Поэтому масштаб меньше 100% означает уменьшение размера по оси, а больше 100% - увеличение размера. При минимальном масштабе 0% объект просто исчезает. Отрицательным масштаб быть не может. Вроде бы очевидный факт, но иногда об этом забывают, когда работают с модификаторами. Впоследствии мы увидим, к чему это приводит при забывчивости и что это дает при намеренном использовании. Предел увеличения масштаба наверно есть, но в реальной работе его достичь, скорее всего, не придется, потому что по мере увеличения размеров точечного (растрового) изображения, каковым у нас являются фотографии и рисунки, используется все больше и больше пикселей и наступает момент, когда пикселей начинает не хватать. C этого момента изображение начинает постепенно терять свою четкость и покрываться пятнами причудливых цветов, если оно изначально не было однотонным. Ползунки позволяют выставить значение масштаба от 0 до 500, а большие значения получают путем их непосредственного ввода в поля Zoom X и Zoom Y.
Рассмотрим ситуацию, когда в слое имеются 4 ключевых кадра (далее - КК). На КК-1 (входном КК) оставим масштаб 100% - он принимается по умолчанию. На КК-2 установим масштаб 50%. Тогда на участке 1-2 масштаб объекта будет плавно изменяться от 100% до 50% и в КК-2 размеры этого объекта по осям будут вдвое меньше исходных. В КК-3 выставим масштаб 75%, т.е. мы планируем получить на участке 2-3 увеличение размеров объекта с 50% до 75%. Когда мы имели дело с первым в слое масштабированием, мы знали, что оно выполняется относительно исходного размера в слое. Если по ширине (оси Х) объект имел размер, равный 80 (конечно же, мы помним, что размеры сами являются процентным отношением к размеру слайда, поэтому не просто 80, а 80%), то после масштабирования до 50% его размер станет равным 80% х 50% / 100% = 40% от ширины слайда. А вот в КК-3 размер 75% берется от чего? Что принимать за 100% - предыдущий размер из КК-2 или исходный из КК-1? Опыт, сделанный в реальном примере, показывает, что используется исходный размер из КК-1. Итак, сколько бы мы не делали масштабирование в слое, в любой КК текущий размер по оси всегда принимается в процентах от исходного по этой же оси. Давайте поставим в КК-4 (выходном КК) Zoom X=100%, т.е. попытаемся на участке 3-4 вернуть размеры объекта к первоначальным. Должно получиться, проверьте. То есть с КК все работает понятно и просто.
Я не зря упомянул модификаторы. "На то и щука, чтобы карась не дремал", как говорится в русской поговорке (или пословице? Никак не запомню разницу). Значения модификаторов при масштабировании работают не совсем так (а временами и совсем не так!), как значения, указываемые в КК. Я считаю, что вы уже привыкли к фокусам модификаторов в PSP и не удивитесь. Модификатор принимает за 100% тот масштаб, который среди всех значений масштаба в слое, указанных на КК, является максимальным. Возможно, это где-то описано, но я пришел к такому заключению опытным путем и пока что подтвердил это рядом удачных расчетов. Можете представить, какие сюрпризы ждут нас при модификации модификатора масштабирования! И пока мы четко и до конца в этом не разберемся, модификацию модификаторов масштабирования лучше не применять во избежание неприятных сюрпризов.
На странице 544 документа "ProShow Producer. Версия 4.5. Руководство на русском языке", на котором стоит © Alexander Lutzevich, читаем:
Примечание: Есть особенность модификаторов, относящихся к параметрам масштаба слоёв. Краткая её формула: "Модификация масштаба может таить ловушки". Модификация масштаба не всегда будет работать так, как ожидается, из-за внутренних свойств ProShow. Например, прибавление масштаба 75 % к параметрам масштаба 200 % отобразится, как и ожидается, в окне модификатора и графиках, но приведет к масштабу 150 % вместо ожидаемых 275 %. Случаи, подобные этому, объясняются тем, что 150 % составляют 75 % от 200 %. Хотя подобный неожиданный результат может иметь место, обычно такого не происходит, и большинство модификаций масштаба будет работать, как положено. Причины для указанного исключения очень сложны и лежат вне области этой документации.
Надеюсь, Вам понравилось, как и мне, когда я впервые прочитал это заклинание. Сейчас я воспринимаю сию текстовку спокойно и чуть иронично, когда позади несколько вечеров, потраченных на какое-то понимание механизма работы модификаторов масштабирования.
Поскольку эта тема посвящена не модификаторам, а масштабированию в слое, мы рассмотрим только самый простой случай применения модификаторов, когда все они будут константами.
Как и прежде, создадим слайд (аспект по-прежнему 1:1) и добавим туда слой с белой заливкой (или другой - как больше нравится), которая устанавливается по умолчанию. Разобьем наш слайд на пять участков, добавив четыре КК. Выставим на участке 1-2 масштаб 25%, на участке 3-4 масштаб 70% и на участке 5-6 масштаб 40%. Участки 2-3 и 4-5 сделаем короткими - они нам не нужны, это только способ получить постоянный масштаб в пределах остальных участков. Теперь можно поработать с модификаторами. Я предлагаю ось Y не трогать, и тогда она даст нам сравнительную исходную высоту квадратика, которую мы визуально сравним с подвергшейся модификации шириной, т.е. размером по оси Х.
1. Найдем для участка 1-2 такое значение модификатора, чтобы ширина квадратика из 25% стала полной. Рассуждаем так. У нас есть три масштаба - 25%, 70% и 40%. Максимальный масштаб 70% и именно его (см. выше) модификаторы принимают за 100%. У нас в КК установлены значения истинного масштаба, поэтому мы можем считать, что поставили задачу получить из истинных 25% получить 100%. Для этого нам надо добавить (вот он - модификатор-константа!) величину, соответствующую истинным 75%, но добавить с помощью модификаторов, поэтому надо сделать пересчет. Он простой и представляет собой пропорцию. Если модификаторы будут полагать, наши 70% равными своим 100%, то пусть они также полагают, что нужные нам 75% являются их Х%. Т.е. Х=(75 х 70) / 100% или примерно 107.1%. Поставим значение модификатора Zoom X=107.1 для участка 1-2 и убедимся, что наш квадрат превращается в прямоугольник, ширина которого занимает ровно всю ширину слайда. Значит, наш расчет верен.
2. Найдем для участка 1-2 такое значение модификатора, чтобы ширина квадратика из 25% стала нулевой. Как и в предыдущем примере определяем, что нам надо из масштаба 25% сделать 0%, т.е. вычесть значение модификатора-константы, соответствующее истинным 25%. Можно также добавить нужное значение, но тогда со знаком минус. Проделав предыдущие рассуждения, получаем что теперь Х% - это наши 25%. И из пропорции находим X=(25 x 70) /100% = 35.71%. укажем значение +35.71 для модификатора Zoom X, если выбираем операцию вычитания, либо значение -35.71, если оставим по умолчанию операцию сложения.
Я не вижу смысла дальше повторять одни и те же рассуждения и предлагаю простую формулу для расчета значения модификатора.
Значение модификатора = (Нужный нам масштаб - Масштаб установленный в КК) х100% / Максимальный масштаб из всех КК
Проверим для примера 1: X=(100 - 25) x 100% / 70 = 107.1, для примера 2: X=(100-75) х 100% / 70 = 35.71
Попробуйте самостоятельно сделать масштабирование на участке 3-4 до 100% и 0% и на участке 5-6 масштабирование до 25% и 50%.
Свернутый текст
42.9%; -100%; -21.4%; 14.3%
Наверно это все, что я на данный момент считаю нужным рассказать о масштабировании и трансформации в слое.