Visualizzazione risultati 1 fino 18 di 18

Discussione: Creare download di un'immagine creata dinamicamente con il PHP

  1. #1
    Guest

    Predefinito Creare download di un'immagine creata dinamicamente con il PHP

    Allora ragazzi, sto creando un generatore di immagini, tutto va alla perfezione me mi sono bloccato al download.

    Devo fare in modo di scaricare l'immagine creata al momento in base ad alcuni parametri.

    Il download parte, ma non non si vede l'immagine se la apro.

    Ho due pagine, una con cui creo i dati, l'altra dove li inserisco e viene mostrata l'immagine richiamando il file che la crea.

    una è sign.php (dove scelgo sfondo, se generarla e se scaricarla), l'altra è generate_sign.php (dove creo l'immagine con i valori passati via GET, che in realtà sono richiamati in sign.

    Ecco il codice che ho in sign.php:
    Codice PHP:
    if (!$userdata['session_logged_in'])
    {
    $redirect_url = 'sign.' . PHP_EXT;
    redirect(append_sid(LOGIN_MG . '?redirect=' . htmlspecialchars($redirect_url)));
    }
    else
    {
    $folder = 'images/sign/base/';
    $dir_open = IP_ROOT_PATH . $folder;

    $file_type_allow = 'jpg,gif,png';
    $file_type_allow_array = explode(',', $file_type_allow);

    if (
    $dir_handle = @opendir($dir_open))
    {
    while (
    false !== ($file = readdir($dir_handle)))
    {
    $file_name = strtolower($file);
    $file_name_array = explode('.', $file_name);
    $extension_file = $file_name_array[count($file_name_array) - 1];

    if (((
    $file != ".") && ($file != "..")))
    {
    if(
    in_array($extension_file, $file_type_allow_array))
    {
    $image = $dir_open . $file;
    $size_image = round((filesize('./' . $folder . $dir . $file) / 1024), 2);
    $last_edit_file_time = filemtime('./' . $folder . $dir . $file);
    $bbcode_code = '[url=' . $path_error . $dir . '][img]' . $path_error . $dir . $file . '[/img][/url]';
    $html_code = "<a href=\"http://" . $board_config['server_name'] . "\" title=\"" . $board_config['sitename'] . "\">" . $image . "</a>";
    $direct_code = $path_error . $dir . $file;

    $num_files[] = $file;

    $template->assign_block_vars('backgrounds', array(
    'SIZE_IMAGE' => $size_image . ' KB',
    'LAST_EDIT_FILE_TIME' => create_date($board_config['default_dateformat'], $last_edit_file_time, $board_config['board_timezone']),
    'L_UPLOAD' => $lang['Upload_At'],
    'IMAGE' => $image,
    'BBCODE_CODE' => $bbcode_code,
    'HTML_CODE' => $html_code,
    'DIRECT_CODE' => $direct_code,
    'ID' => $file[0],
    'INPUT_CHECKED' => (isset($_POST['create']) && ($_POST['background'] == $file[0])) ? 'checked="checked"' : '',
    ));
    }
    }
    }
    closedir($dir_handle);
    }
    else
    {
    message_die(GENERAL_MESSAGE, $lang['Not_Open_Dir'] . ' <b>' . $path_error . $dir . '</b><br /><br />' . $lang['Select_Size'] . '<br />' . $select_size);
    }

    $background = $_POST['background'];
    $user = $userdata['user_id'];
    $font = $_POST['font'];

    $image_generated = IP_ROOT_PATH . 'generate_sign.' . PHP_EXT . '?' . POST_USERS_URL . '=' . $user . '&amp;background=' . $background;

    if(isset(
    $_POST['download']))
    {
    header('Content-type: image/png');
    header('Content-Length: ' . strlen($image_generated));
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    header('Content-Disposition: attachment; filename="' . $userdata['username'] . '_sign.png"');
    $image = implode('', $image_generated);
    print
    $image;
    }

    $template->assign_vars(array(
    'IMAGE_GENERATED' => $image_generated,
    'S_VIEW_GENERATED_IMAGE' => (isset($_POST['create']) && (isset($_POST['background']))) ? true : false,
    'U_SIGN' => 'sign.' . PHP_EXT,
    ));
    }
    Questo è quello di generate_sign.php:
    Codice PHP:
    <?php
    /**
    *
    * @package Icy Phoenix
    * @version $Id$
    * @copyright (c) 2008 Icy Phoenix
    * @license http://opensource.org/licenses/gpl-license.php GNU Public License
    *
    */
    define('IN_ICYPHOENIX', true);

    if (!
    defined('IP_ROOT_PATH')) define('IP_ROOT_PATH', './');
    if (!
    defined('PHP_EXT')) define('PHP_EXT', substr(strrchr(__FILE__, '.'), 1));
    include(
    IP_ROOT_PATH . 'common.' . PHP_EXT);

    $userdata = session_pagestart($user_ip);
    init_userprefs($userdata);

    include(
    IP_ROOT_PATH . 'language/lang_' . $board_config['default_lang'] . '/lang_sign.' . PHP_EXT);

    $fonts_path = 'images/fonts/';
    $user = request_var(POST_USERS_URL, ANONYMOUS);

    /*
    if (!$userdata['session_logged_in'])
    {
    $redirect_url = 'sign.' . PHP_EXT;
    redirect(append_sid(LOGIN_MG . '?redirect=' . htmlspecialchars($redirect_url)));
    }
    else
    {
    */
    if ($user == ANONYMOUS)
    {
    message_die(GENERAL_MESSAGE, $lang['Sign_Select_Id_Error']);
    }

    $sql = "SELECT u.*
    FROM "
    . USERS_TABLE . " u
    WHERE (u.user_id = "
    . $user . ")
    LIMIT 1"
    ;
    if(!(
    $result = $db->sql_query($sql)))
    {
    message_die(GENERAL_ERROR, 'Could not query users', '', __LINE__, __FILE__, $sql);
    }

    if (
    $profiledata = $db->sql_fetchrow($result))
    {

    $user = $profiledata['user_id'];
    $username = $profiledata['username'];

    // get the user level
    $user_level = $profiledata['user_level'];

    if (
    $user_level == ADMIN)
    {
    $rank = $lang['Rank'] . ': ' . $lang['Staff_level'][0];
    }
    elseif (
    $user_level == MOD)
    {
    $rank = $lang['Rank'] . ': ' . $lang['Staff_level'][1];
    }
    elseif (
    $user_level == USER)
    {
    $rank = $lang['Rank'] . ': ' . $lang['Memberlist_User'];
    }

    if (!empty(
    $profiledata['user_gender']))
    {
    switch (
    $profiledata['user_gender'])
    {
    case
    1: $gender = $lang['Gender'] . ': ' . $lang['Male']; break;
    case
    2: $gender = $lang['Gender'] . ': ' . $lang['Female']; break;
    default:
    $gender = $lang['Gender'] . ': ' . $lang['No_gender_specify'];
    }
    }
    else
    {
    $gender = $lang['Gender'] . ': ' . $lang['No_gender_specify'];
    }

    $posts = $lang['Sign_Posts_Forum_Of_User'] . $profiledata['user_posts'];
    $registered = $lang['Joined'] . ': ' . create_date('H/m/Y', $profiledata['user_regdate'], $board_config['board_timezone']);
    $album_image = $profiledata['user_personal_pics_count'];
    $num_album_image = $lang['Sign_Personal_Gallery_Of_User'] . $album_image;

    // Start add - Online/Offline/Hidden Mod
    if ($profiledata['user_session_time'] >= (time() - $board_config['online_time']))
    {

    if (
    $profiledata['user_allow_viewonline'])
    {
    $status = $lang['Online_status'] . ': ' . $lang['Online'];
    }
    elseif (
    $userdata['user_level'] == ADMIN || $userdata['user_id'] == $profiledata['user_id'])
    {
    $status = $lang['Online_status'] . ': ' . $lang['Hidden'];
    }
    else
    {
    $status = $lang['Online_status'] . ': ' . $lang['Offline'];
    }
    }
    else
    {
    $status = $lang['Online_status'] . ': ' . $lang['Offline'];
    }
    }
    else
    {
    message_die(GENERAL_MESSAGE, $lang['Sign_Select_Id_Error']);
    }
    //}

    // create a 100*30 image
    $image = imagecreatefrompng(IP_ROOT_PATH . 'images/sign/base/' . $_GET['background'] . '.png');

    // white text
    $textcolor = imagecolorallocate($image, 255, 255, 255);

    // Add the text
    $font_username = $fonts_path . 'triplex_bold.ttf';

    $font_details = $font_username;
    #$font_details = $fonts_path . 'verdana.ttf';

    imagettftext($image, 18, 0, 7, 22, $textcolor, $font_username, $username); //nick
    imagettftext($image, 9, 0, 7, 38, $textcolor, $font_details, $registered); //registrato il
    imagettftext($image, 9, 0, 7, 55, $textcolor, $font_details, $gender); //Genere
    imagettftext($image, 9, 0, 7, 72, $textcolor, $font_details, $posts); //numero posts
    //imagettftext($image, 9, 0, 7, 89, $textcolor, $font_details, $num_album_image); //numero immagini Album
    imagettftext($image, 9, 0, 300, 19, $textcolor, $font_details, $status); //Stato Online/Offline/Nascosto

    imagettftext($image, 9, 0, 255, 124, $textcolor, $font_details, $rank); //livello utente


    //selezione stelline
    //$rank= imagecreatefrompng('images/ranks/rank_0.png');
    //imagecopy($image, $rank, 207, 115, 0, 0, 72, 14);

    // output the image
    header('Content-type: image/png');
    imagepng($image);
    imagedestroy($image);
    ?>
    Richiamo l'immagine tramite la variabile $image_generated.

    Oram c'è anche una condizione, se si è cliccato sul bottone per il download avvia il download altrimenti no.

    Comer posso scaricare l'immagine da sign.php?

    Devo mettere l'if del download in generate_sign.php?

    Grazie in anticipo

  2. #2
    L'avatar di AlexKidd
    AlexKidd non è connesso Altervistiano Junior
    Data registrazione
    09-02-2007
    Messaggi
    516

    Predefinito

    cosi su due piedi mi sembra che ci siano degli header di troppo (ovvero in entrambi i file e che si sovrappongono)

    è possibile vedere un esempio già pronto per analizzare l'output ?

  3. #3
    Guest

    Predefinito

    mmm, non funzionerebbe, perchè l'immagine viene creata in base ai dati dell'utente loggato (post, username, stato, sesso e altro).

    Che informazioni servono?

  4. #4
    Guest

    Predefinito

    Scusa, sbaglio o ti serve memorizzare l'immagine che crei al volo?
    Se è così, basta specificarne il nome come secondo parametro della funzione imagepng:

    imagepng($image,'mia_immagine.png');


    Ciao!

  5. #5
    Guest

    Predefinito

    Ho fatto così:
    Codice PHP:
    if(isset($_POST['download']))
    {
    header('Content-type: image/png');
    header('Content-Length: ' . strlen($image_generated));
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    imagepng($image_generated, $userdata['username'] . '_sign.png');
    }
    Ma non funziona, sicuramente sono io che sono impedito
    Ultima modifica di biccheddu : 08-05-2009 alle ore 17.05.04

  6. #6
    Guest

    Predefinito

    Mmm... mi sa che l'unica soluzione sia salvare l'immagine appena creata, zipparla e fare un redirect in javascript al file creato. Al successivo cambiamento di pagina cancelli sia l'immagine che il file .zip

  7. #7
    Guest

    Predefinito

    Javascript è da escludere, non ne voglio utilizzare.

    Comunque un esempio online può essere questo: http://www.icyphoenix.com/customicy_....php?l=italian

    Come vedete c'è il link al download dell'immagine creata, diciamo che il mio è un sistema molto simile.

  8. #8
    L'avatar di AlexKidd
    AlexKidd non è connesso Altervistiano Junior
    Data registrazione
    09-02-2007
    Messaggi
    516

    Predefinito

    Citazione Originalmente inviato da biccheddu Visualizza messaggio
    Ho fatto così:
    Codice PHP:
    if(isset($_POST['download']))
    {
    header('Content-type: image/png');
    header('Content-Length: ' . strlen($image_generated));
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    imagepng($image_generated, $userdata['username'] . '_sign.png');
    }
    Ma non funziona, sicuramente sono io che sono impedito


    a che servono gli header (che vengono inviati al browser) se l'immagine viene solamente salvata su disco?

    perchè salvi un'immagine sul disco? non potresti compiere l'operazione al volo?

    se poi, ad esempio, vuoi scaricare l'immagine dentro ad un file zip/gz poi farlo sempre al volo: bufferizzando l'output (vedi ob_start() e simili) di imagepng() e manipolarlo come meglio credi

  9. #9
    Guest

    Predefinito

    AlexKidd scusa ma non capisco

    Leggendo in internet ho visto che leggono il file, e usano una cosa simile:
    Codice PHP:
    <php
    // definisco una variabile con il percorso alla cartella
    // in cui sono archiviati i file
    $dir = "/root/www/download/";

    // Recupero il nome del file dalla querystring
    // e lo accodo al percorso della cartella del download
    $file = $dir . $_GET['filename'];

    // verifico che il file esista
    if(!file)
    {
    // se non esiste chiudo e stampo un errore
    die("Il file non esiste!");
    }else{
    // Se il file esiste...
    // Imposto gli header della pagina per forzare il download del file
    header("Cache-Control: public");
    header("Content-Description: File Transfer");
    header("Content-Disposition: attachment; filename= " . $file);
    header("Content-Transfer-Encoding: binary");
    // Leggo il contenuto del file
    readfile($file);
    }
    ?>
    Ho spostato l'if del download nella pagina generated_sign.php scrivendo così:
    Codice PHP:
    // output the image
    header('Content-type: image/png');
    if(isset(
    $_POST['download']))
    {
    header('Content-Length: ' . strlen($image_generated));
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    header('Content-Disposition: attachment; filename="' . $userdata['username'] . '_sign.png"');
    header("Content-Transfer-Encoding: binary");
    }
    imagepng($image);
    imagedestroy($image);
    Ma scarica sempre un file non visualizzabile

    Potete farmi un piccolo esempio di come dovrei comportarmi? E' la prima volta che mi cimento con un download e header() di questo genere.

  10. #10
    L'avatar di AlexKidd
    AlexKidd non è connesso Altervistiano Junior
    Data registrazione
    09-02-2007
    Messaggi
    516

    Predefinito

    a vedere il codice mi pare di capire che tu ogni volta crei un nuovo file contenente l'immagine e poi lo prepari per il download

    se l'immagine fosse già presente su disco allora andrebbe bene leggere semplicemente un file, ma tu perchè devi scrivere un file sul disco per poi rileggerlo? è meglio saltare completamente un passaggio, no?

    se ci dai la possibilità di testare il codice (mettendolo sul tuo spazio) secondo me analizzando l'output potremmo (farti) capire al volo dov'è il problema
    Ultima modifica di AlexKidd : 09-05-2009 alle ore 12.35.40

  11. #11
    Guest

    Predefinito

    Io ho preparato il codice vedendo qualcosa in internet.

    Ecco qui: http://www.makingart.org/sign.php

  12. #12
    Guest

    Predefinito

    Secondo me ti fa scaricare un file non visualizzabile perchè prima imposti gli header e poi crei l'immagine. Dovresti usare ob_start() sull'output di imagepng() e successivamente impostare gli header

  13. #13
    Guest

    Predefinito

    Ma non mi avete ancora detto cosa devo fare, se inserire gli header o solo imagepng()

    E' questo che non capisco, cosa devo scrivere?

    Ho letto guide ma non capisco come utilizzarlo, cioè, su php non ci capisco nulla perché non mastico inglese, su HTML.it spiega solo che riduce il tempo di generazione e le risorse utilizzate.


  14. #14
    L'avatar di AlexKidd
    AlexKidd non è connesso Altervistiano Junior
    Data registrazione
    09-02-2007
    Messaggi
    516

    Predefinito

    al momento del download il browser scarica qualcosa che pare esser html compresso con gzip (anche se sembra esser una immagine per via del nome forzato e dell'header imposto)

    potresti postarci il codice significativo che corrisponde all'esempio che hai linkato?

  15. #15
    Guest

    Predefinito

    A dire che oggi pomeriggio c'ero riuscito cavolo, ma non ricordo ocme ho fatto, mi hanno dato una dritta e poi per sbaglio non ho salvato il file

    Queste sono le due pagine.

    sign.php:
    Codice PHP:
    <?php
    /**
    *
    * @package Icy Phoenix
    * @version $Id$
    * @copyright (c) 2008 Icy Phoenix
    * @license http://opensource.org/licenses/gpl-license.php GNU Public License
    *
    */

    define('IN_ICYPHOENIX', true);

    if (!
    defined('IP_ROOT_PATH')) define('IP_ROOT_PATH', './');
    if (!
    defined('PHP_EXT')) define('PHP_EXT', substr(strrchr(__FILE__, '.'), 1));
    include(
    IP_ROOT_PATH . 'common.' . PHP_EXT);

    $cms_global_blocks = true;

    $userdata = session_pagestart($user_ip);
    init_userprefs($userdata);

    include(
    IP_ROOT_PATH . 'language/lang_' . $board_config['default_lang'] . '/lang_sign.' . PHP_EXT);

    $template->set_filenames(array('body' => 'sign_body.tpl'));

    $fonts_path = IP_ROOT_PATH . 'images/fonts/';

    /*
    if (!$userdata['session_logged_in'])
    {
    $redirect_url = 'sign.' . PHP_EXT;
    redirect(append_sid(LOGIN_MG . '?redirect=' . htmlspecialchars($redirect_url)));
    }
    else
    {*/
    $folder = 'images/sign/base/';
    $dir_open = IP_ROOT_PATH . $folder;

    $file_type_allow = 'jpg,gif,png';
    $file_type_allow_array = explode(',', $file_type_allow);

    if (
    $dir_handle = @opendir($dir_open))
    {
    while (
    false !== ($file = readdir($dir_handle)))
    {
    $file_name = strtolower($file);
    $file_name_array = explode('.', $file_name);
    $extension_file = $file_name_array[count($file_name_array) - 1];

    if (((
    $file != ".") && ($file != "..")))
    {
    if(
    in_array($extension_file, $file_type_allow_array))
    {
    $image = $dir_open . $file;
    $size_image = round((filesize('./' . $folder . $dir . $file) / 1024), 2);
    $last_edit_file_time = filemtime('./' . $folder . $dir . $file);
    $bbcode_code = '[url=' . $path_error . $dir . '][img]' . $path_error . $dir . $file . '[/img][/url]';
    $html_code = "<a href=\"http://" . $board_config['server_name'] . "\" title=\"" . $board_config['sitename'] . "\">" . $image . "</a>";
    $direct_code = $path_error . $dir . $file;

    $num_files[] = $file;

    $template->assign_block_vars('backgrounds', array(
    'SIZE_IMAGE' => $size_image . ' KB',
    'LAST_EDIT_FILE_TIME' => create_date($board_config['default_dateformat'], $last_edit_file_time, $board_config['board_timezone']),
    'L_UPLOAD' => $lang['Upload_At'],
    'IMAGE' => $image,
    'BBCODE_CODE' => $bbcode_code,
    'HTML_CODE' => $html_code,
    'DIRECT_CODE' => $direct_code,
    'ID' => $file[0],
    'INPUT_CHECKED' => ((isset($_POST['create']) || (isset($_POST['download']))) && ($_POST['background'] == $file[0])) ? 'checked="checked"' : '',
    ));
    }
    }
    }
    closedir($dir_handle);
    }
    else
    {
    message_die(GENERAL_MESSAGE, $lang['Not_Open_Dir'] . ' <b>' . $path_error . $dir . '</b><br /><br />' . $lang['Select_Size'] . '<br />' . $select_size);
    }

    $background = $_POST['background'];
    $user = $userdata['user_id'];
    $font = $_POST['font'];

    $image_generated = IP_ROOT_PATH . 'generate_sign.' . PHP_EXT . '?' . POST_USERS_URL . '=' . $user . '&background=' . $background;

    if(isset(
    $_POST['download']))
    {
    header('Content-type: image/png');
    header('Content-Disposition: attachment; filename="' . $profiledata['user_id'] . '_sign.png"');
    }

    $template->assign_vars(array(
    'IMAGE_GENERATED' => $image_generated,
    'S_VIEW_GENERATED_IMAGE' => ((isset($_POST['create']) || (isset($_POST['download']))) && (isset($_POST['background']))) ? true : false,
    'U_SIGN' => 'sign.' . PHP_EXT,
    ));
    #}


    // Start output of page
    $page_title = 'Crea la tua Sign Personale';
    $meta_description = '';
    $meta_keywords = '';
    //define('SHOW_ONLINE', true);

    include(IP_ROOT_PATH . 'includes/page_header.' . PHP_EXT);

    //parse and build page
    $template->pparse('body');

    //include the phpBB footer
    include(IP_ROOT_PATH . 'includes/page_tail.' . PHP_EXT);

    ?>
    generate_sign.php:
    Codice PHP:
    <?php
    /**
    *
    * @package Icy Phoenix
    * @version $Id$
    * @copyright (c) 2008 Icy Phoenix
    * @license http://opensource.org/licenses/gpl-license.php GNU Public License
    *
    */
    define('IN_ICYPHOENIX', true);

    if (!
    defined('IP_ROOT_PATH')) define('IP_ROOT_PATH', './');
    if (!
    defined('PHP_EXT')) define('PHP_EXT', substr(strrchr(__FILE__, '.'), 1));
    include(
    IP_ROOT_PATH . 'common.' . PHP_EXT);

    $userdata = session_pagestart($user_ip);
    init_userprefs($userdata);

    include(
    IP_ROOT_PATH . 'language/lang_' . $board_config['default_lang'] . '/lang_sign.' . PHP_EXT);

    $fonts_path = 'images/fonts/';
    $user = request_var(POST_USERS_URL, ANONYMOUS);

    /*
    if (!$userdata['session_logged_in'])
    {
    $redirect_url = 'sign.' . PHP_EXT;
    redirect(append_sid(LOGIN_MG . '?redirect=' . htmlspecialchars($redirect_url)));
    }
    else
    {

    if ($user == ANONYMOUS)
    {
    message_die(GENERAL_MESSAGE, $lang['Sign_Select_Id_Error']);
    }
    */
    $sql = "SELECT u.*
    FROM "
    . USERS_TABLE . " u
    WHERE (u.user_id = "
    . $user . ")
    LIMIT 1"
    ;
    if(!(
    $result = $db->sql_query($sql)))
    {
    message_die(GENERAL_ERROR, 'Could not query users', '', __LINE__, __FILE__, $sql);
    }

    if (
    $profiledata = $db->sql_fetchrow($result))
    {

    $user = $profiledata['user_id'];
    $username = $profiledata['username'];

    // get the user level
    $user_level = $profiledata['user_level'];

    if (
    $user_level == ADMIN)
    {
    $rank = $lang['Rank'] . ': ' . $lang['Staff_level'][0];
    }
    elseif (
    $user_level == MOD)
    {
    $rank = $lang['Rank'] . ': ' . $lang['Staff_level'][1];
    }
    elseif (
    $user_level == USER)
    {
    $rank = $lang['Rank'] . ': ' . $lang['Memberlist_User'];
    }

    if (!empty(
    $profiledata['user_gender']))
    {
    switch (
    $profiledata['user_gender'])
    {
    case
    1: $gender = $lang['Gender'] . ': ' . $lang['Male']; break;
    case
    2: $gender = $lang['Gender'] . ': ' . $lang['Female']; break;
    default:
    $gender = $lang['Gender'] . ': ' . $lang['No_gender_specify'];
    }
    }
    else
    {
    $gender = $lang['Gender'] . ': ' . $lang['No_gender_specify'];
    }

    $posts = $lang['Sign_Posts_Forum_Of_User'] . $profiledata['user_posts'];
    $registered = $lang['Joined'] . ': ' . create_date('H/m/Y', $profiledata['user_regdate'], $board_config['board_timezone']);
    $album_image = $profiledata['user_personal_pics_count'];
    $num_album_image = $lang['Sign_Personal_Gallery_Of_User'] . $album_image;

    // Start add - Online/Offline/Hidden Mod
    if ($profiledata['user_session_time'] >= (time() - $board_config['online_time']))
    {

    if (
    $profiledata['user_allow_viewonline'])
    {
    $status = $lang['Online_status'] . ': ' . $lang['Online'];
    }
    elseif (
    $userdata['user_level'] == ADMIN || $userdata['user_id'] == $profiledata['user_id'])
    {
    $status = $lang['Online_status'] . ': ' . $lang['Hidden'];
    }
    else
    {
    $status = $lang['Online_status'] . ': ' . $lang['Offline'];
    }
    }
    else
    {
    $status = $lang['Online_status'] . ': ' . $lang['Offline'];
    }
    }
    else
    {
    message_die(GENERAL_MESSAGE, $lang['Sign_Select_Id_Error']);
    }
    //}

    // create a 100*30 image
    $image = imagecreatefrompng(IP_ROOT_PATH . 'images/sign/base/' . $_GET['background'] . '.png');

    // white text
    $textcolor = imagecolorallocate($image, 255, 255, 255);

    // Add the text
    $font_username = $fonts_path . 'triplex_bold.ttf';

    $font_details = $font_username;
    #$font_details = $fonts_path . 'verdana.ttf';

    imagettftext($image, 18, 0, 7, 22, $textcolor, $font_username, $username); //nick
    imagettftext($image, 9, 0, 7, 38, $textcolor, $font_details, $registered); //registrato il
    imagettftext($image, 9, 0, 7, 55, $textcolor, $font_details, $gender); //Genere
    imagettftext($image, 9, 0, 7, 72, $textcolor, $font_details, $posts); //numero posts
    //imagettftext($image, 9, 0, 7, 89, $textcolor, $font_details, $num_album_image); //numero immagini Album
    imagettftext($image, 9, 0, 300, 19, $textcolor, $font_details, $status); //Stato Online/Offline/Nascosto

    imagettftext($image, 9, 0, 255, 124, $textcolor, $font_details, $rank); //livello utente


    //selezione stelline
    //$rank= imagecreatefrompng('images/ranks/rank_0.png');
    //imagecopy($image, $rank, 207, 115, 0, 0, 72, 14);

    // output the image
    header('Content-type: image/png');
    imagepng($image);
    imagedestroy($image);

    ?>
    il download parte, mi dice che è una .png ma l''immagine non si vede

  16. #16
    L'avatar di AlexKidd
    AlexKidd non è connesso Altervistiano Junior
    Data registrazione
    09-02-2007
    Messaggi
    516

    Predefinito

    allora...

    se ho ben capito

    generate_sign.php deve generare una immagine e scriverla in un file sul disco
    sign.php deve leggere il file generato e inviarlo al browser

    se è questa la tua idea allora sappi che hai sbagliato

    generate_sign.php genera una immagine e la invia al browser
    sign.php imposta l'header per avvisare il browser che sta ricevendo una pgn ma poi gli invia qualcosa di sconosciuto (sicuramente pezzi di html compresso) che si trova, probabilmente, in quei file che includi


    dovresti, secondo me spostare tutta la parte della generazione e degli header in generate_sign e chiamare subito (e solo) quello quando si clicca su genera o download (cambiano l'header in base all'azione che deve compiere)

  17. #17
    Guest

    Predefinito

    generate_sign.php, se metto la condizione:
    Codice PHP:
    if(isset($_POST['download']))
    {
    header('Content-Disposition: attachment; filename="' . $profiledata['user_id'] . '_sign.png"');
    }
    E' come se non ci fosse, non si avvia la condizione, forse perchè l'azione la faccio su sign.php e non generate_sign.php.

    Questo è il file template:
    Codice HTML:
    {IMG_THL}{IMG_THC}<span class="forumlink">My Sign</span>{IMG_THR_ALT}
    <form name="background" method="post" action="{U_SIGN}">
    <table class="forumlinenb" width="100%" cellspacing="0" cellpadding="0">
    <tr>
    	<td class="row1" style="padding: 5px;">
    		<!-- BEGIN backgrounds -->
    		<input type="radio" name="background" value="{backgrounds.ID}" id="{backgrounds.ID}" {backgrounds.INPUT_CHECKED} style="float: left;" />
    			<div class="preview" style="margin-left: 25px;"><label for="{backgrounds.ID}">Anteprima {backgrounds.ID}</a>
    				<div class="preview_container">
    					<img src="{backgrounds.IMAGE}" />
    				</div>
    			</div>
    		<br />
    		<!-- END backgrounds -->
    	</td>
    </tr>
    <tr>
    	<td class="cat center-block-text"><input type="submit" name="create" class="post" value="Genera" /></td>
    </tr>
    <!-- IF S_VIEW_GENERATED_IMAGE -->
    <tr>
    	<td class="row2 row-center" style="padding: 10px"><img src="{IMAGE_GENERATED}" /></td>
    </tr>
    <tr>
    	<td class="cat center-block-text"><input type="submit" name="download" class="post" value="{L_DOWNLOAD}" /></td>
    </tr>
    <!-- ENDIF -->
    </table>
    </form>
    {IMG_TFL}{IMG_TFC}{IMG_TFR}
    Guardando questo codice, che genera un avatar con del testo personalizzato, ecco come vengono mandati gli header:
    Codice PHP:
    <?php
    /**
    *
    * @package Icy Phoenix
    * @version $Id: generate_avatar.php 76 2009-01-31 21:11:24Z Mighty Gorgon $
    * @copyright (c) 2008 Icy Phoenix
    * @license http://opensource.org/licenses/gpl-license.php GNU Public License
    *
    */

    // CTracker_Ignore: File checked by human
    define('MG_KILL_CTRACK', true);
    define('IN_ICYPHOENIX', true);
    if (!
    defined('IP_ROOT_PATH')) define('IP_ROOT_PATH', './');
    if (!
    defined('PHP_EXT')) define('PHP_EXT', substr(strrchr(__FILE__, '.'), 1));
    include(
    IP_ROOT_PATH . 'common.' . PHP_EXT);

    $fonts_path = 'images/fonts/';
    $generator_template_path = $board_config['avatar_generator_template_path'] . '/';

    $dest_pic = htmlspecialchars($_GET['cachefile']);
    $source_pic = htmlspecialchars($_GET['avatarfile']);
    $source_pic_full = $source_pic . '.gif';
    $text_content = htmlspecialchars(stripslashes($_GET['text_content']));
    $text_size = (isset($_GET['text_size'])) ? intval($_GET['text_size']) : '10';
    //$text_font = (isset($_GET['text_font'])) ? htmlspecialchars($_GET['text_font']) : 'triplex_bold.ttf';
    $text_font = (isset($_GET['text_font'])) ? htmlspecialchars($_GET['text_font']) : 'denmark.ttf';
    $text_font = $fonts_path . $text_font;
    $text_color = (isset($_GET['text_color'])) ? htmlspecialchars($_GET['text_color']) : '#FFFFFF';
    $text_position = (isset($_GET['text_position'])) ? htmlspecialchars($_GET['text_position']) : '0';

    $avatars_array = array('ip.gif', 'a69_02.gif', 'agreen.gif', 'aphro_lite.gif', 'aphrodite.gif', 'blue.gif', 'darkblue.gif', 'firefox.gif', 'gray.gif', 'green.gif', 'opera.gif', 'pink.gif', 'purple.gif', 'red.gif', 'sblue.gif', 'av01.gif', 'av02.gif', 'av03.gif', 'av04.gif', 'av05.gif', 'av06.gif', 'av07.gif', 'av08.gif', 'av09.gif', 'av10.gif', 'av11.gif', 'av12.gif', 'av13.gif', 'av14.gif', 'av15.gif', 'av16.gif', 'av17.gif');

    if (
    in_array($source_pic_full, $avatars_array))
    {
    $source_pic = $generator_template_path . $source_pic_full;
    }
    else
    {
    $num = mt_rand(1, count($avatars_array));
    $source_pic = $generator_template_path . $avatars_array[$num];
    }

    write_text($source_pic, $dest_pic, $text_content, $text_font, $text_size, $text_color, $text_position);
    //write_text($source_pic, $dest_pic, $text_content, $text_font, $text_size, '#FFFFAA', $text_position);

    /**
    * Write text on images
    *
    * Detail description
    * @param none
    * @since 1.0
    */
    function write_text($source_pic, $dest_pic, $text_content, $text_font, $text_size = '10', $text_color = '#FFFFFF', $text_position = '0')
    {
    $temp_pic = imagecreatefromgif($source_pic);
    list(
    $image_width, $image_height) = getimagesize($source_pic);

    /*
    $temp_pic_empty = imagecreatetruecolor ($image_width, $image_height);
    imagealphablending($temp_pic_empty, false);
    imagecopyresampled($temp_pic_empty, $temp_pic, 0, 0, 0, 0, $image_width, $image_height, $image_width, $image_height);
    imagesavealpha($temp_pic_empty, true);
    //imagepng($im_re, 'small_redfade.png');
    $temp_pic2 = imagecreatefrompng($source_pic);
    */

    // Calculate the centre
    for(;;)
    {
    list(
    $left_x, , $right_x) = imagettfbbox($text_size, $text_position, $text_font, $text_content);
    $text_width = $right_x - $left_x;
    if(
    $image_width > $text_width + 5)
    {
    break;
    }
    $text_size = $text_size - 0.5;
    if(
    $text_size == 1)
    {
    die(
    'Font size may not be reduced further, try to insert a shorter text');
    }
    }
    $text_padding = ($image_width - $text_width) / 2;

    $text_color = (substr($text_color, 0, 1) == '#') ? substr($text_color, 1, 6) : $text_color;
    $text_color_r = hexdec(substr($text_color, 0, 2));
    $text_color_g = hexdec(substr($text_color, 2, 2));
    $text_color_b = hexdec(substr($text_color, 4, 2));

    $text_color = imagecolorresolve($temp_pic, $text_color_r, $text_color_g, $text_color_b);
    //$text_color = imagecolorallocate($temp_pic, $text_color_r, $text_color_g, $text_color_b);
    imagettftext($temp_pic, $text_size, $text_position, $text_padding, ($image_height - ($text_size / 2)), $text_color, $text_font, $text_content);

    if(
    $_GET['dl'])
    {
    header('Content-Disposition: attachment; filename="avatar.gif"');
    }

    header('Content-type: image/gif');
    imagegif($temp_pic, $dest_pic);
    imagegif($temp_pic);
    imagedestroy($temp_pic);

    return
    true;
    }

    ?>
    Diciamo che ho fatto la stessa cosa, ma perchè non mi parte il download?

  18. #18
    L'avatar di AlexKidd
    AlexKidd non è connesso Altervistiano Junior
    Data registrazione
    09-02-2007
    Messaggi
    516

    Predefinito

    ma il download parte.... è quello che contiene che non è chiaro.... inoltre stai postando codice a casaccio

    prendi il codice interessato e portalo fuori da quel template... non si può debuggare un sorgente che continua a chiamare funzioni estranei dal contesto

Regole di scrittura

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