Visualizzazione risultati 1 fino 4 di 4

Discussione: [php] Aiuto disegno immagini

  1. #1
    L'avatar di TRAX3D
    TRAX3D non è connesso Utente giovane
    Data registrazione
    08-12-2004
    Residenza
    Ossola
    Messaggi
    78

    Angry [php] Aiuto disegno immagini

    Salve,
    mi piacerebbe che qualche esperto mi aiutasse in questo dilemma
    ho un file php che mi crea un immagine nell'esempio sotto un asterisco bianco ed uno rosso:
    Codice PHP:
    <?php
    include 'config.php';
    session_start();

    //*****************************************************************************
    //Asterisco Bianco
    //*****************************************************************************
    for ($i = 0; $i <='11'; $i++)
    {
    $TxtLayer = "LAYER1";
    $TmpX1 = '4';
    $TmpY1 = '4';
    $TmpX2 = $TmpX1 + ('5' * cos(pi()/6*$i));
    $TmpY2 = $TmpY1 + ('5' * sin(pi()/6*$i));
    $arryLinee[] = array($TmpX1, $TmpY1, $TmpX2, $TmpY2, $TxtLayer);
    }
    //*****************************************************************************
    //Asterisco Rosso
    //*****************************************************************************
    for ($i = 0; $i <='11'; $i++)
    {
    $TxtLayer = "ASSE";
    $TmpX1 = '6';
    $TmpY1 = '6';
    $TmpX2 = $TmpX1 + ('5' * cos(pi()/6*$i));
    $TmpY2 = $TmpY1 + ('5' * sin(pi()/6*$i));
    //$arryLinee[] = array($TmpX1, $TmpY1, $TmpX2, $TmpY2, $TxtLayer);
    $arryLinee[] = array($TmpX2, $TmpY2, $TmpX1, $TmpY1, $TxtLayer);
    }
    //ECHO "<BR>";

    //*****************************************************************************
    //Calcolo dimensione e scala disegno
    //*****************************************************************************

    $minX = 0;
    $minY = 0;
    $MasX = 0;
    $MasY = 0;
    for (
    $i = 0; $i <= count($arryLinee)-1; $i++)
    {
    //$arryLinee[] = array($TmpX1, $TmpY1, $TmpX2, $TmpY2, $TxtLayer);
    //Ricerca minimo
    if ($arryLinee[$i][0] < $minX) $minX = $arryLinee[$i][0];
    if (
    $arryLinee[$i][1] < $minY) $minY = $arryLinee[$i][1];
    if (
    $arryLinee[$i][2] < $minX) $minX = $arryLinee[$i][2];
    if (
    $arryLinee[$i][3] < $minY) $minY = $arryLinee[$i][3];
    //Ricerca massimo
    if ($arryLinee[$i][0] > $MasX) $MasX = $arryLinee[$i][0] * 1.25;
    if (
    $arryLinee[$i][1] > $MasY) $MasY = $arryLinee[$i][1] * 1.25;
    if (
    $arryLinee[$i][2] > $MasX) $MasX = $arryLinee[$i][2] * 1.25;
    if (
    $arryLinee[$i][3] > $MasY) $MasY = $arryLinee[$i][3] * 1.25;
    }

    //Calcolo dimensione immagine e fattore di scala
    if (($MasX - $minX) > ($MasY - $minY))
    {
    $DimMAX = $MasX - $minX;
    $DimImg = 100;
    $Scala = $DimImg / $DimMAX * 5.333;
    }
    else{
    $DimMAX = ($MasY - $minY);
    $DimImg = 140;
    $Scala = $DimImg / $DimMAX * 3;
    }

    //*****************************************************************************
    //Rapporto 16:9
    //*****************************************************************************
    $DimX = 5.333 * $DimImg;
    $DimY = 3 * $DimImg;


    //*****************************************************************************
    //Creo immagine
    //*****************************************************************************
    $img = @imagecreatetruecolor($DimX, $DimY)
    or die(
    "Cannot Initialize new GD image stream");

    //*****************************************************************************
    //Predispongo i colori
    //*****************************************************************************
    $white = imagecolorallocate($img, 255, 255, 255);
    $red = imagecolorallocate($img, 255, 0, 0);
    $grey90 = imagecolorallocate($img, 25, 25, 25);

    imagefill($img,0,0,$grey90); //Coloro lo sfondo immagine

    //*****************************************************************************
    //Disegno le linee
    //*****************************************************************************
    for ($i = 0; $i <= count($arryLinee)-1; $i++)
    {
    switch (
    $arryLinee[$i][4])
    {
    case
    "ASSE":
    $TmpLayer = $red; break;
    case
    "LAYER1":
    $TmpLayer = $white; break;
    }
    //bool imageline (resource image, int x1, int y1, int x2, int y2, int color)
    //bool imagedashedline (resource image, int x1, int y1, int x2, int y2, int color)
    imageline($img, ($arryLinee[$i][0]*$Scala), $DimY-($arryLinee[$i][1]*$Scala),
    (
    $arryLinee[$i][2]*$Scala), $DimY-($arryLinee[$i][3]*$Scala), $TmpLayer);
    }

    //*****************************************************************************
    // output image in the browser
    //*****************************************************************************
    header("Content-type: image/png");
    imagepng($img);

    //*****************************************************************************
    // free memory
    //*****************************************************************************
    imagedestroy($img);

    ?>
    Il risultato di questo script è questo


    ora se uslo il comando bool imagedashedline (resource image, int x1, int y1, int x2, int y2, int color) per le linee di colore rosso come il codice allegato
    Codice PHP:
    //*****************************************************************************
    //Disegno le linee
    //*****************************************************************************
    for ($i = 0; $i <= count($arryLinee)-1; $i++)
    {
    switch (
    $arryLinee[$i][4])
    {
    case
    "ASSE":
    $TmpLayer = $red; break;
    case
    "LAYER1":
    $TmpLayer = $white; break;
    }
    //bool imageline (resource image, int x1, int y1, int x2, int y2, int color)
    //bool imagedashedline (resource image, int x1, int y1, int x2, int y2, int color)
    if ($TmpLayer == $red)
    {
    imagedashedline($img, ($arryLinee[$i][0]*$Scala), $DimY-($arryLinee[$i][1]*$Scala),
    (
    $arryLinee[$i][2]*$Scala), $DimY-($arryLinee[$i][3]*$Scala), $TmpLayer);
    }
    else
    {
    imageline($img, ($arryLinee[$i][0]*$Scala), $DimY-($arryLinee[$i][1]*$Scala),
    (
    $arryLinee[$i][2]*$Scala), $DimY-($arryLinee[$i][3]*$Scala), $TmpLayer);
    }
    }

    //*****************************************************************************
    mi da come risultato questo :


    come vedete alcune righe rosse ci sono e sono tratteggiate altre invece mancano del tutto

    Qualcuno mi può dare una mano

  2. #2
    Guest

    Predefinito

    Primo commento nel manuale
    It doesn't work for horizontal lines. Use imagesetstyle()

  3. #3
    L'avatar di TRAX3D
    TRAX3D non è connesso Utente giovane
    Data registrazione
    08-12-2004
    Residenza
    Ossola
    Messaggi
    78

    Predefinito

    si ok ma di orizzontale ci sono solo due linee quelle a +30 e -30° non le fa lo stesso....

  4. #4
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,269

    Predefinito

    La funzione è deprecata, e buggata da anni, almeno nove! Non l'hanno mai aggiustata

    Come suggerito da altri, usa imagesetstyle() (vedi anche i commenti).

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •