В GIMP я хочу иметь возможность масштабировать изображение нелинейно по горизонтальной оси. Инструменты перспективы и отображения не подходят для этого, потому что они изменяют изображение по вертикали для перспективы. Изображение ниже иллюстрирует то, что мне нужно. Буду признателен за любое руководство!
В базовой конфигурации GIMP есть фильтр Distort > Spherize. В горизонтальном режиме он искажает ваше изображение, как будто оно использовалось в качестве этикетки для бутылки. Это определенно нелинейно, но у вас есть лишь небольшой контроль. Пользовательское математическое преобразование было бы лучше. Это обсуждается в конце этого ответа.
К сожалению, самая разреженная область находится посередине, а не на правом краю. Но вы можете временно вставить в свой холст пустую правую половину.
Не забудьте установить размер слоя так, чтобы он покрывал весь холст. В GIMP слои настолько велики, насколько они содержат контент, если не установлен размер слоя.
Произвольные нелинейные выражения могут быть применены, например. с пакетом фильтров G'MIC. Он имеет в части "Деформации" фильтр Декартово преобразование.
Пример; исходное изображение:
Диалог фильтра:
Вы пишете формулы для координат точки на исходном изображении, откуда берется содержимое, до точки результата (x, y). Формулы, вероятно, являются математическими выражениями языка Python (не уверен). Параметры w и h доступны для ширины и высоты изображения в пикселях. Вам нужно, чтобы они совпадали по краям.
Чтобы получить что-то похожее на ваш собственный рисунок, вы можете написать для x выражение w*f(x/w), где f=любая функция, которая находится между 0 и 1 и имеет следующие свойства
пример с этой идеей:
формула для x: w*(1-exp(-x/w))/(1-exp(-1))
формула для у: у
оригинал:
результат:
Вы упомянули, что пробовали перспективную сетку, которая, к сожалению, масштабировала как x, так и y. Следующая x-формула дает все возможные справа налево масштабы вида одномерной перспективной сетки с разными значениями параметра A. Он должен быть положительным числом, большим нуля
формула для X: w * (A+1) * X/(A * W + X)
формула Y: Y
слишком маленький A, скажем, A=0,1, делает результат слишком плотным для растрового изображения слева, а слишком большой A, скажем, A=3, делает эффект бесполезно мягким. Предыдущее изображение лабиринта масштабируется с A=1:
У меня установлен G'MIC в Krita, но он также доступен для GIMP и Paint.NET.
Такие преобразования математически трудно определить. Если ваше преобразование представляет собой закон синуса/косинуса, вы можете использовать фильтры, которые проецируют ваш слой на цилиндр (Фильтры > Карта > Сопоставить объект и сопоставить с цилиндром).
Для произвольного преобразования, возможно, с использованием карты смещения , но реальную карту может быть трудно придумать:
Чтобы создать карту смещения (#2):
С другой стороны, если вы просто хотите создать сетку, то вместо сжатия обычной сетки вы можете создать путь, скрипт ofn-path-inbetweener
создаст промежуточные пути между двумя путями по закону квадрата или косинуса. Побочным эффектом является то, что полосы имеют одинаковую ширину:
Паоло Джибеллини