Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    Da file di testo a immagine

    Il mio prof di matematica ci ha proposto questo quesito. Partendo da un file di testo contenente una matrice con le tonalità dei singoli pixel (sia tonalità di grigio che RBG) devo costruire l'immagine iniziale.
    con mathcad (che ha usato il prof) non ci riesco perchè mi fa questioni con la grandezza della matrice così mi sono buttato sul php.
    L'algoritmo per passare dalla matrice alla posizione dei signoli pixel e per ricavarne le tonalità l'ho costruito correttamente, il problema sta quando vado a usare le librerie gd per trasformarli in una immagine vera e propria.

    Codice PHP:
      <?

    $matrice 
    "prova.txt";

    $handle fopen ($matrice"r");
    $immagine fread ($handlefilesize ($matrice));
    fclose ($handle);

    $immagine str_replace(Chr(13), "§"$immagine);

    $im_pixel explode("§"$immagine);

    $max count($im_pixel);

    $righe 211;
    $cols 150;

    $pos_x 0;
    $pos_y 1;
    fino a qui apre il file di testo contenente la matrice e costruisce l'array contenente le tonalità di ogni pixel.

    Codice PHP:
    $speriamo imageCreate($righe$cols);

    for (
    $i 0$i $max$i++) {
    if (
    $pos_x 150) { $pos_x 1$pos_y++; }
    $color[$i] = imageColorAllocate($speriamo$im_pixel[$i], $im_pixel[$i], $im_pixel[$i]);
    imageLine($speriamo$pos_x$pos_y$pos_x$pos_y$color[$i]);
    $pos_x++;
    }
    header("Content-type: image/png");
    imagePng($speriamo);
    imageDestroy($speriamo);
    ?> 
    e qui suppongo stia l'inghippo. gli faccio creare l'immagine della dimensione desiderata e con un ciclo for gli dico
    1. di allocare la tonalità di grigio associata al pixel $im_pixel[$i] in un nuovo array $color[$i].
    2. di creare una linea (che poi è un punto) di coordinate $pos_x e $pos_y e di colore $color[$i].

    Quello che ne esce è un'immagine di grandezza esatta ma interamente nera.

    Come ho già detto sono abbastanza sicuro della bontà dell'algoritmo che assegna coordinate e tonalità ai pixel visto che con un echo i risultati sono quelli sperati.

    spero di essere stato abbastanza chiaro. grazie per le risposte
    I'd like to be, under the sea, in an octopus garden in the shade

  2. #2
    molto banale DD

    devi leggere 3 byte per volta...e poi stampare il punto ^^

    magari i primi due byte indicano l'altezza e la larghezza della matrice [ovviamente al max cosi vengono 255 pixel x 255 pixel, ma con facilità si può cambiare questo...)

    codice:
    <?php
      
      $file = fopen('img.img');
      
      // Leggo larghezza ed altezza
      $w = ord(fread($file, 1));
      $h = ord(fread($file, 1));
      
      // Inizializzo le coordinate X e Y dei punti
      $x = 0; $y = 0;
      
      // Creo un immagine truecolor dato che uso un format a 24 bit (ovvero 3 byte(
      $image = imagecreatetruecolor($w, $h);
      
      // Entro in un while e leggo a blocchi di 3 byte il file
      while(feof($file)) {
        
        // Leggo 3 byte
        $cPixel = fread($file, 3);
        
        // Imposto il colore partendo dai miei 3 byte
        $gdColor = imagecolorallocate($image, ord($cPixel{0}), ord($cPixel{1}), ord($cPixel{2}));
        
        // Imposto il pixel
        imagesetpixel($x, $y, $gdColor);
        
        // Mi sposto avanti di un punto nella riga
        $x++;
        
        // Se ho superato la larghezza, vado a capo
        if ($x > $w) { $x = 1; $y++; }
        
      }
      
      // Chiudo il file
      fclose($file);
    
      // Stampo a video l'immagine
      imagejpeg($image);
      
    ?>
    il codice non l'ho provato, ma a livello logico è corretto, se ti da errori prova a risolverli ed in caso posta qui

    può essere fatto in TANTI altri modi cmq

  3. #3
    dopo pranzo lo controllo, non sono tanto sicuro sia compatibile con il file di testo che ci ha dato il prof.
    I'd like to be, under the sea, in an octopus garden in the shade

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.