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 . '&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 :wink: