Provavelmente, a melhor ferramenta para manipular imagens seria o ImageMagick. Se você der uma olhada na documentação, há muitos exemplos que mostram como usar o recurso -distort
, que acredito ser o que você está procurando.
Exemplo
Antes
Depois
Linha de comando para realizar a conversão:
$ convert checks.png -filter point
-virtual-pixel tile -mattecolor DodgerBlue
-distort Perspective '0,0 20,60 90,0 70,63 0,90 5,83 90,90 85,88'
horizon_tile_point.png
Existem dois outros métodos para fazer a amostragem para melhorar a aparência da imagem resultante. Especificamente "Grid Super Sampling" & "Área Ponderada Elíptica (EWA) Resampling ". O último é o padrão.
Como eu calculo as coordenadas?
Existem 2 recursos para entender como gerar a série de coordenadas para convert
. O primeiro é o que eu dei acima. O segundo é este SO Q & A intitulado: Noções básicas sobre distorção de projeção de imagem ImageMagick , especificamente < href="https://stackoverflow.com/a/12278644/33204"> @ resposta de KurtPfeifle .
As coordenadas são as seguintes:
Sx1,Sy1 Dx1,Dy1 Sx2,Sy2 Dx2,Dy2 Sx3,Sy3 Dx3,Dy3 ... Sxn,Syn Dxn,Dyn
- x é usado para representar uma coordenada X.
- y é usado para representar uma coordenada Y.
- 1, 2, 3, ... n é usado para representar o primeiro, segundo, terceiro, ... nésimo pixel.
- S é usado aqui para o pixel de origem.
- D é usado aqui para o pixel de destino.