2 Escreva uma função Bézier para desenhar curvas . A biblioteca de funções GD não inclui tal função , então crie o seu próprio ( consulte Recursos). A função a seguir usa a função GD " imagesetpixel ", que define um pixel nas coordenadas especificadas pelos segundo e terceiro parâmetros. O quarto parâmetro especifica a cor e , como acontece com a maioria das funções GD, o primeiro parâmetro é um identificador de imagem .
Função bezier (& $ img , $ x, $ y , $ cor, $ res) {< br >
$ cx = 3 * ( $ x [ 1 ] - $ x [0] );
$ bx = 3 * ( $ x [2] - $ x [1] ) - $ cx ;
$ ax = $ x [3] - $ x [0] - $ cx - $ bx ;
$ cy = 3 * ( $ y [1] - $ y [0 ]);
$ por = 3 * ( $ y [2] - $ y [1] ) - $ cy ;
$ ay = $ y [3] - $ y [0 ] - $ cy - $ by;
for ($ i = 0; $ i < = $ res ; $ i + +) {
$ t = $ i /$ res ;
$ xt = $ ax * pow ( $ t, 3 ) + bx $ * pow ( $ t, 2) + $ cx * $ t + $ x [0];
$ yt = $ ay * pow ( $ t, 3 ) + $ por * pow ( $ t, 2) + $ cy * $ t + $ y [0];
imagesetpixel ( $ img , round ( $ xt ) , round ( $ yt ) , $ cor );
}
}
3
Inicializar a imagem e as cores que você precisa. No seguinte exemplo de código, a imagem é inicializada para ser 200 por 200 pixels , usando a função " imagecreate " , que também cria a imagem identificador " $ img ". As cores vermelho e branco são inicializados com a função " imagecolorallocate " , especificando os valores de 0 a 255 para o vermelho, verde e azul. A primeira cor inicializado se tornará a cor de fundo
$ img = imagecreate (200, 200); .
$ Branco = imagecolorallocate ( $ img , 255, 255, 255 );
$ vermelho = imagecolorallocate ( $ img , 255, 0, 0);
4
Crie duas matrizes para os x e y-coordenadas de quatro pontos que vai determinar a forma da curva de Bézier . Para especificar a forma da curva , pensar em termos de dois vetores tangentes , cuja magnitude determina a quantidade de influência a direção do vetor tem sobre a curva , bem como o caminho de uma bola caindo em um vento forte. O primeiro dos quatro pontos especifica um dos pontos finais da curva ea cauda do primeiro vetor , eo segundo especifica o chefe do vetor. A distância entre os pontos corresponde com a magnitude e a sua posição relativa determina a direcção . O terceiro ponto é a cabeça do segundo vetor eo quarto ponto é a cauda do vetor eo outro terminal.
No exemplo a seguir , os quatro pontos são (100, 40) , (150, -10) , ( 250 , 80 ) e ( 100 , 180 ) , em que o canto superior esquerdo da imagem é ( 0 , 0 ) . As coordenadas -x para os parâmetros são ambos 100 , o que os centros na tela da esquerda para a direita. As coordenadas y indicam o primeiro ponto final a 40 está por cima do outro , a 180 . Os chefes de vetores estão ambos acima e à direita de seus respectivos terminais. Separe os e - x- y coordenadas com as próprias matrizes :
$ x_coords = array ( 100, 150 , 250, 100);
$ y_coords = array (40 , -10, 80 , 180) ;
5
Desenhe a curva com a função de Bézier criado no passo 2. Na função de exemplo, o primeiro parâmetro é o identificador de imagem , e os próximos dois parâmetros são as matrizes para os x e y coordenadas , o quarto é a cor , eo último é a resolução . O parâmetro resolução determina o número de pontos a ser desenhada, assim especificar números maiores para curvas bem definidas . Por exemplo, digite :
bezier ( $ img , $ x_coords , $ y_coords , $ vermelho, 500 );
6
Redefinir as coordenadas para desenhar a curva no lado esquerdo do o coração, e traçá-lo com a função de Bézier . Os parâmetros para a curva à esquerda são as mesmas que as para a direita . A única coisa que muda é as coordenadas x para as cabeças de vetor. Os novos precisa ser tão grande para a esquerda do centro como os anteriores foram à direita do centro , a fim de cada um dos lados a ser como uma imagem de espelho da outra . Por exemplo, digite :
$ x_coords [ 1] = 50 cabeças ;//First vetor foi de 150
$ x_coords [2] = -50 ;//Second cabeça vetor foi de 250 . .
bezier ( $ img , $ x_coords , $ y_coords , $ vermelho, 500 );
7
Visualize a imagem e destruir o objeto de imagem para liberar a memória . A função "header" é necessária para que o navegador irá tratar o resultado como uma imagem. Acabar com o arquivo com o fechamento da tag PHP. Por exemplo, digite :
header (" Content-type : image /png ");
imagepng ( $ img );
imagedestroy ( $ img ); < br >
? >