Cambio de tamaño no cuadrado de Gimp

Me he estado tirando de los pelos tratando de descubrir cómo hacer que Gimp haga una escala de la forma que yo quiero. Creo que lo que busco es una escala no lineal o una distorsión trapezoidal. No estoy seguro de estar usando los términos correctos (lo que hace que sea difícil buscar soluciones potenciales en Google), así que para demostrarlo, eliminé un par de imágenes. Si esta es mi imagen de origen:

Imagen original

Entonces esto es lo que quiero (produje esto manualmente para demostrar):

Imagen deseada

Probé las herramientas de cambio de tamaño, pero eso solo permite el cambio de tamaño cuadrado, en lugar de una escala distorsionada como quiero. La herramienta de corte no escala. Cage transform dobla la imagen para que tampoco funcione. La distorsión de perspectiva está cerca, pero afecta la posición x de las líneas verticales que no quiero:

Cerca, pero sin cigarro.

También probé algunos de los filtros, pero nuevamente no pude lograr que ninguno de ellos produjera el efecto que busco (el filtro de curvatura parece que podría funcionar, pero no puedo lograr que produzca el resultado correcto) .

Soy un programador justo, por lo que si necesita una escritura de filtro personalizada, probablemente pueda manejarlo si alguien pudiera proporcionar algunos consejos sobre lo que debo hacer (¿algún tipo de transformación de matriz, tal vez?)

¿Está tratando de producir una cuadrícula o desea la transformación en una imagen aleatoria? Para lo primero, creo que tengo los guiones. Para este último, un mapa de desplazamiento cuidadosamente elaborado podría hacerlo.
No, estoy tratando de transformar una imagen, solo usé una cuadrícula para demostrar cómo necesito que se estire
No creo que pueda obtenerlo simplemente con una matriz, porque eso requeriría que su transformación sea una transformación afín, que no lo es. Una transformación afín mantiene todas las líneas rectas rectas, y la tuya no (las diagonales se convierten en curvas o instancias)

Respuestas (3)

Posible solución con un mapa de desplazamiento:

  • Crea un grupo, con dos capas:
    • En la parte inferior, una capa que expresa el desplazamiento máximo deseado: un degradado de negro a blanco (el 50 % de gris es "sin cambios", el blanco y el negro moverán las cosas en direcciones opuestas)
    • Arriba, una capa "atenuadora" que graduará lentamente el degradado de negro a blanco a un 50 % de gris (no queremos ningún cambio a la derecha)
    • Esta capa tiene una máscara de capa con un degradado de negro a blanco (por lo que, a la izquierda, la máscara de desplazamiento se ve en su totalidad, mientras que, a la derecha, se desvanece en un juego de grises al 50%). En la práctica, esto no es estrictamente lineal, pero se puede compensar usando Curvas para cambiar el degradado de la máscara de capa.

configuración de capas y curvas

Luego llame Filters>Map>Displace map y proporcione el grupo como un mapa de desplazamiento para la coordenada Y.

El resultado:

fuente y resultado

Lo probé y funciona exactamente como lo describe, y es exactamente lo que pedí :) Buena técnica: tendré que recordar eso para distorsiones 'extrañas' similares si las necesito. Salud

La herramienta de perspectiva en realidad puede realizar fácilmente la tarea requerida. Si desea evitar el movimiento en el eje x, simplemente coloque una guía vertical y active Ver -> Ajustar a guías. Coloque las esquinas de la capa que está transformando en la guía y permanecerán en su lugar.

Por supuesto, solo puede restringir los movimientos perpendiculares a los bordes del lienzo de esta manera.

Aunque no se ajusta a sus necesidades para este caso, la "herramienta Transformación de perspectiva" es lo que se usa para lograr resultados como este, para simular una inclinación del espacio 3D de un dibujo 2D.

Como ha notado hasta ahora, no hay una transformación simple que pueda lograr lo que desea. Espero que el truco de desplazamiento proporcionado en la otra respuesta pueda ayudarlo, pero de lo contrario, preferiría intentar escribir la transformación que desea.

Solo quiero una cuadrícula, un script para dibujar las líneas directamente. De lo contrario, lo que debe hacer es una secuencia de comandos para realizar una transformación a gran escala de 1 píxel para cada columna de su imagen.

El OP mencionó que no funciona para él / ella, porque no debería haber cambios a lo largo del eje X.
No hay tal transformación. Entiendo que no funciona para esta pregunta en particular, pero es lo que debe hacer cualquier otra persona que busque el resultado deseado.