webelious Posted August 31, 2021 Share Posted August 31, 2021 I have to show you the way the bitmap font is loaded, to generate the png out of .nfo, .diz & txt files, BUT i need to know how to generate a bitmap font file (mine has no extension, it is an extension of a tiny script i found years ago on a google repository, so it has no extension, its just called 'nfo2pngfont' here is how it's called in the nfo2png.php file-: // Load the Bitmap-Font $fnt = imageloadfont("nfo2pngfont"); Here is the nfo2png.php file: (it shows you can alter the font size, but only the [Generated by: NFOPic] is made larger od smaller by changing numbers 1 - 5 ??? it used to work, it's bizzre, not sure if someone who help do some code for me changed something, but DEFINARELY a BUG? <?php function buildNFO($nfotext, $footer = "", $fg = "000000", $bg = "FFFFFF", $file_name = 'new_image', $path = 'uploads/' ) { // header("Content-Type: image/png"); // header("Content-Disposition: inline; filename=\"" . $file_name . ".png\""); $nfotext = ( empty( $nfotext ) ? "Empty String submitted." : $nfotext ); $nfo = explode("\n", $nfotext); // Load the Bitmap-Font $fnt = imageloadfont("nfo2pngfont"); $nxo = array(); $xmax = 0; $bigger_than_footer = false; // Reformat each line foreach( $nfo as $line ) { $line = chop($line); if ( empty( $line ) ) { array_push($nxo,$line); continue; } if ( strlen( $line ) > strlen( $footer ) ) { $bigger_than_footer = true; } $fill = ''; //add white space to each line until we have one bigger than the footer if ( !$bigger_than_footer ) { $fill = str_repeat(" ", ( strlen( $footer ) - strlen( $line ) ) ); } if($xmax < strlen($line.$fill)) $xmax = strlen($line.$fill); array_push($nxo,$line.$fill); } // Show footer if(strlen($footer)) { array_push($nxo,""); $repeat_count = $xmax - strlen($footer)>>1; $repeat_count = ( $repeat_count >= 0 ? $repeat_count : 0 ); //add whitespace to footer to push out to the middle //this line overrides the centering and only pushed it two from the left //remove this line to have it go back to the center //$repeat_count = 0; $fill = str_repeat(" ", $repeat_count ); array_push($nxo,$fill.$footer); } // Linecount $ymax = count($nxo); // Set foreground color $color = array(0, 0, 0); if(strlen($fg) == 6) { $color[0] = intval(substr($fg,0,2), 16); $color[1] = intval(substr($fg,2,2), 16); $color[2] = intval(substr($fg,4,2), 16); } $bg_color = array(0, 0, 0); if(strlen($bg) == 6) { $bg_color[0] = intval(substr($bg,0,2), 16); $bg_color[1] = intval(substr($bg,2,2), 16); $bg_color[2] = intval(substr($bg,4,2), 16); } // Render NFO $im = imagecreate($xmax*8,$ymax*16); imageinterlace($im,1); // $background_color = ImageColorTransparent($im, ImageColorAllocate ($im, 254, 254, 126)); $background_color = imagecolorallocate($im, $bg_color[0], $bg_color[1], $bg_color[2]); $text_color = imagecolorallocate($im, $color[0], $color[1], $color[2]); foreach($nxo as $y=>$line) { //shrink the last line if ( $y == count($nxo) - 1 ) { $fnt = 1; //to use preloaded fonts, 1 - 5 only. 1 is tiny, 2 is decent, 3-5 are bolder/worse } imagestring($im, $fnt, 0, $y*16, $line, $text_color); } imagepng( $im, $path . $file_name . '.png' ); } function buildNFONew($imageWidth=600, $padding=array(),$nfotext, $footer = "", $fg = "000000", $bg = "FFFFFF", $file_name = 'new_image', $path = 'uploads/') { $nfotext = ( empty( $nfotext ) ? "Empty String submitted." : $nfotext ); $nfo = explode("\n", $nfotext); // Load the Bitmap-Font $fnt = imageloadfont("nfo2pngfont"); // $charWidth=imagefontwidth($fnt); $charHeight=imagefontheight($fnt); if(!isset($imageWidth) or !is_numeric($imageWidth)) { $imageWidth=600; } $pDefaults=array("top"=>2,"right"=>0,"bottom"=>2,"left"=>0); if(!isset($padding) or !$padding) { $padding=$pDefaults; } else { if(is_array($padding)) { foreach($pDefaults as $pKey=>$pValue) { if(!isset($padding[$pKey])) { $padding[$pKey]=$pValue; } } } else { $tPadding=(string)$padding; $padding=array(); $tPadding=explode(" ",$tPadding); if(count($tPadding)==1) { if(is_numeric($tPadding[0])) { foreach(array("top","right","bottom","left") as $pKey=>$pValue) { $padding[$pValue]=(int)$tPadding[0]; } } } elseif(count($tPadding)>1) { foreach(array("top","right","bottom","left") as $pKey=>$pValue) { if(!empty($tPadding)) { $padding[$pValue]=(int)array_shift($tPadding); } } } if(!isset($padding["bottom"])) { $padding["bottom"]=$padding["top"]; } if(!isset($padding["left"])) { $padding["left"]=$padding["right"]; } } } // $nxo = array(); $max_linewidth=$padding["left"]+$padding["right"]; $didWrap=false; // Reformat each line foreach($nfo as $line) { $line = chop($line); if(empty($line)) { array_push($nxo,$line); continue; } $words=explode(" ",$line); $cLine=""; do { $word=array_shift($words); $cWidth=((int)(($charWidth*strlen($cLine.(($cLine=="")?"":" ").$word))+$padding["left"]+$padding["right"])); if($cWidth<=$imageWidth) { $cLine.=(($cLine=="")?"":" ").$word; if($max_linewidth<$cWidth) { $max_linewidth=$cWidth; } } else { array_push($nxo,$cLine); $cLine=$word; $didWrap=true; } } while(!empty($words)); array_push($nxo,$cLine); } // Show footer if(strlen($footer)) { array_push($nxo,""); $repeat_count = $xmax - strlen($footer)>>1; $repeat_count = ( $repeat_count >= 0 ? $repeat_count : 0 ); //add whitespace to footer to push out to the middle //this line overrides the centering and only pushed it two from the left //remove this line to have it go back to the center //$repeat_count = 0; $fill = str_repeat(" ", $repeat_count ); array_push($nxo,$fill.$footer); } // Linecount $imageHeight = ($padding["top"]+(count($nxo)*$charHeight)+$padding["bottom"]); if($didWrap===false) { $imageWidth=$max_linewidth; } // Set foreground color $color = array(0, 0, 0); if(strlen($fg) == 6) { $color[0] = intval(substr($fg,0,2), 16); $color[1] = intval(substr($fg,2,2), 16); $color[2] = intval(substr($fg,4,2), 16); } $bg_color = array(0, 0, 0); if(strlen($bg) == 6) { $bg_color[0] = intval(substr($bg,0,2), 16); $bg_color[1] = intval(substr($bg,2,2), 16); $bg_color[2] = intval(substr($bg,4,2), 16); } // Render NFO $im = imagecreate($imageWidth,$imageHeight); imageinterlace($im,1); // $background_color = ImageColorTransparent($im, ImageColorAllocate ($im, 254, 254, 126)); $background_color = imagecolorallocate($im, $bg_color[0], $bg_color[1], $bg_color[2]); $text_color = imagecolorallocate($im, $color[0], $color[1], $color[2]); foreach($nxo as $rIndex=>$line) { //shrink the last line if($rIndex == count($nxo) - 1) { $fnt = 3; //to use preloaded fonts, 1 - 5 only. 1 is tiny, 2 is decent, 3-5 are bolder/worse } if($rIndex==0) { $y=$padding["top"]; } else { $y=($padding["top"]+$rIndex*$charHeight); } imagestring($im, $fnt, $padding["left"], $y, $line, $text_color); } imagepng( $im, $path . $file_name . '.png' ); } ?> Here is generate_image.php (this generates the PNG file)-: <?php require_once 'include/db.php'; require_once 'nfo2png.php'; $file = explode( '.', $_FILES['user_file']['name'] ); $original_file_name = $_FILES['user_file']['name']; $valid_file_types = array( 'txt', 'nfo', 'diz' ); $found = false; foreach ( $valid_file_types AS $valid_file_type ) { if ( strtoupper( $file[count($file)-1] ) == strtoupper( $valid_file_type ) ) { $found = true; break; } } if ( !$found ) { // echo '0|File must be one of the following types: ' . implode( ', ', $valid_file_types ); die( '0|File must be one of the following types: ' . implode( ', ', $valid_file_types ) ); } $content = file_get_contents( $_FILES['user_file']['tmp_name'] ); $file_name = 'image_' . str_replace( '.', '', microtime(true) ); buildNFONew(800, "20 50 20 50", $content, '[Generated by: NFOPic.com]', $_POST['fg_color'], $_POST['bg_color'], $file_name); echo '1|'.$file_name . '.png|'.$original_file_name; // if ( !is_local() ) if($conn) { $sql = "INSERT INTO nfo_images (original_file_name, file_name, user_ip) VALUES ( '" . mysqli_real_escape_string( $original_file_name ) . "', '" . mysqli_real_escape_string( $file_name.'.png' ) . "', '" . $_SERVER['REMOTE_ADDR'] . "' ) "; // echo $sql; // mysql_query( $sql ); $conn->query( $sql ); } and get_image.php (shows the link to the PNG image to hotlink or download, etc) -: <?php require_once 'include/db.php'; $file_name = $_GET['f']; if ( empty( $file_name ) || !file_exists( 'uploads/' . $file_name )) { die( 'File not found...' ); } $sql = "SELECT original_file_name FROM nfo_images WHERE file_name = '" . $file_name . "'"; $rs = mysql_query( $sql ); $file = mysql_fetch_assoc( $rs ); $original_file_name = explode( '.', $file['original_file_name'] ); //just get rid of the last, then put back together array_pop( $original_file_name ); $original_file_name = implode( '.', $original_file_name ); header("Content-Type: image/png"); //start edit 10.07.2014 DrTech76, flow the direct image link through here to keep the actuall location unknown if(!isset($_REQUEST["dl"])) {//it's not a request through a direct link, so process as file download, as it was originally header("Content-Disposition: attachment; filename=\"" . $original_file_name . ".png\""); } //end edit 10.07.2014 DrTech76, flow the direct image link through here to keep the actuall location unknown echo file_get_contents( 'uploads/' . $file_name ); ?> I hope someone can help figure this out, you can see live version of the site, to see the trouble, no matter what i change 1-5 to, only the 'footer' [GFenerated By: NFOPic] changes size..... so i'm thinking create a whole new monospaced ascii style bitmap font file like the one the original coder produced...... but not sure how. this is a community project going back years,, just re-launched it as i'm going back to learning php/mysql again after years in JS/jQuery/AJAX/CSS (UX Design & Illustration).... VERY GRATEFUL FOR ANNNNNY HELP! CAN HELP YOU OUT IN RETURN I HOPE, HAVE SOME GREAT RESOURCES, THOUGH LOVE HELP 4 HELP.... GREAT AT ILLUSTRATION!!!! LOGOS ETC. Quote Link to comment https://forums.phpfreaks.com/topic/313634-bitmap-font-file-problems-displays-text-in-converted-txtnfo-2-png-too-small/ Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.