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

    fread salva un'immagine incompleta

    Ciao a tutti,

    dovrei creare un tasto per salvare un'immagine su di una pagina web, proprio per questo motivo mi stavo cimentando nella creazione della pagina php che deve compiere l'operazione.

    La pagina è download.php e contiene il seguente codice :

    codice:
    <?php
    $imageName = "newimg_249af70fbde4e2f94f20f7379426123e.jpg";
    $imgdir = "C:/Inetpub/wwwroot/php/project/img_temp_uploads/newimg_249af70fbde4e2f94f20f7379426123e.jpg";
    $imageLoc = "http://localhost/project/img_temp_uploads/newimg_249af70fbde4e2f94f20f7379426123e.jpg"; 
    $fsize = filesize($imgdir);
    
    header("Cache-Control: public, must-revalidate");
    header("Content-Type: application/octet-stream");
    header("Content-Length: " . $fsize );
    header("Content-Disposition: attachment; filename=" .$imageName);
    header("Content-Transfer-Encoding: binary\n");
    
    $fp = fopen($imageLoc, "rb");
    $buffer = fread($fp, $fsize);
    fclose ($fp);
                      
    print $buffer;
    
    ?>
    la pagina eseguita non riporta errori, apre il menù di apertura/salvataggio di windows riportandomi l'esatta dimensione in Kb dell'immagine e mi permette di salvarla.
    Il problema sta nell'immagine che viene salvata.. infatti su 39Kb (dimensione totale) ne salva circa la metà 15 o 16Kb, infatti aprendola mi compare l'immagine incompleta con la parte non visualizzata in grigio.

    Ho verificato l'ammontare del filesize, effettivamente è 40004, la radice quadrata è 200 (200x200), mentre il filesize effettivo dovrebbe essere 119600 ottenuto da 400x299, allora ho provato a dare a $fsize un valore fisso di 119600 o maggiore ma il risultato è sempre lo stesso, l'immagine risulta più grande di dimensione Kb ma rimane ugualmente incompleta se visualizzata.

    Qualcuno ha qualche suggerimento? Da cosa può dipendere?
    Perpetual Ribellion With Absolutely No Cause

  2. #2
    ho frainteso il calcolo del filesize, pensavo ai pixel invece erano i Kb, ciò non toglie che non funzioni ugualmente... 40004 byte è la corretta dimensione dell'immagine, il filesize è corretto.
    Perpetual Ribellion With Absolutely No Cause

  3. #3
    ok, giusto per essere di aiuto a chiunque altro incappi in questo problema riporto la soluzione.
    codice:
    <?php
    $imageName = "newimg_249af70fbde4e2f94f20f7379426123e.jpg";
    $imgdir = "C:/Inetpub/wwwroot/php/project/newimg_249af70fbde4e2f94f20f7379426123e.jpg";
    $imageLoc = "http://localhost/project/newimg_249af70fbde4e2f94f20f7379426123e.jpg"; 
    $fsize = filesize($imgdir);
    
    header("Cache-Control: public, must-revalidate");
    header("Content-Type: image/jpeg");
    header("Content-Length: " . $fsize );
    header("Content-Disposition: attachment; filename=" .$imageName);
    header("Content-Transfer-Encoding: binary\n");
    
    $handle = @fopen($imageLoc, "rb");
    if ($handle) {
        while (!feof($handle)) {
            $buffer = fgets($handle, $fsize);
            echo $buffer;
        }
        fclose($handle);
    }
    ?>
    risolto.
    Perpetual Ribellion With Absolutely No Cause

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 © 2025 vBulletin Solutions, Inc. All rights reserved.