Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] modificar generador de códigos de barra code39

Estas en el tema de modificar generador de códigos de barra code39 en el foro de PHP en Foros del Web. Hola gente, estoy haciendo un programita y si bien es una pavada que no afecta al buen funcionamiento, me gustaría modificarlo para un mejor uso ...
  #1 (permalink)  
Antiguo 13/09/2013, 04:23
 
Fecha de Ingreso: septiembre-2009
Mensajes: 39
Antigüedad: 15 años, 2 meses
Puntos: 0
Pregunta modificar generador de códigos de barra code39

Hola gente, estoy haciendo un programita y si bien es una pavada que no afecta al buen funcionamiento, me gustaría modificarlo para un mejor uso de mi cliente.

el código generador de código de barras es barcode.php y consta de lo siguiente:
Código PHP:
<?php

if(isset($_POST["text"])) $text=$_POST["text"];
if(isset(
$_POST["format"])) $format=$_POST["format"];
if(isset(
$_POST["quality"])) $quality=$_POST["quality"];
if(isset(
$_POST["width"])) $width=$_POST["width"];
if(isset(
$_POST["height"])) $height=$_POST["height"];
if(isset(
$_POST["type"])) $type=$_POST["type"];
if(isset(
$_POST["barcode"])) $barcode=$_POST["barcode"];


if (!isset (
$text)) $text 0;
if (!isset (
$type)) $type 1;
if (empty (
$quality)) $quality 100;
if (empty (
$width)) $width 330;
if (empty (
$height)) $height 60;
if (!empty (
$format)) $format strtoupper ($format);
        else 
$format="PNG";


switch (
$type)
{
        default:
                
$type 1;
        case 
1:
                
Barcode39 ($barcode$width$height$quality$format$text);
                break;          
}

function 
Barcode39 ($barcode$width$height$quality$format$text)
{
        switch (
$format)
        {
                default:
                        
$format "JPEG";
                case 
"JPEG"
                        
header ("Content-type: image/jpeg");
                        break;
                case 
"PNG":
                        
header ("Content-type: image/png");
                        break;
                case 
"GIF":
                        
header ("Content-type: image/gif");
                        break;
        }


        
$im ImageCreate ($width$height)
    or die (
"Cannot Initialize new GD image stream");
        
$White ImageColorAllocate ($im255255255);
        
$Black ImageColorAllocate ($im000);
        
//ImageColorTransparent ($im, $White);
        
ImageInterLace ($im1);



        
$NarrowRatio 20;
        
$WideRatio 55;
        
$QuietRatio 35;


        
$nChars = (strlen($barcode)+2) * (($NarrowRatio) + ($WideRatio) + ($QuietRatio));
        
$Pixels $width $nChars;
        
$NarrowBar = (int)(20 $Pixels);
        
$WideBar = (int)(55 $Pixels);
        
$QuietBar = (int)(35 $Pixels);


        
$ActualWidth = (($NarrowBar 6) + ($WideBar*3) + $QuietBar) * (strlen ($barcode)+2);
        
        if ((
$NarrowBar == 0) || ($NarrowBar == $WideBar) || ($NarrowBar == $QuietBar) || ($WideBar == 0) || ($WideBar == $QuietBar) || ($QuietBar == 0))
        {
                
ImageString ($im100"Image is too small!"$Black);
                
OutputImage ($im$format$quality);
                exit;
        }
        
        
$CurrentBarX = (int)(($width $ActualWidth) / 2);
        
$Color $Red;
        
$BarcodeFull "*".strtoupper ($barcode)."*";
        
settype ($BarcodeFull"string");
        
        
$FontNum 3;
        
$FontHeight ImageFontHeight ($FontNum);
        
$FontWidth ImageFontWidth ($FontNum);
        if (
$text != 0)
        {
                
$CenterLoc = (int)(($width-1) / 2) - (int)(($FontWidth strlen($BarcodeFull)) / 2);
                
ImageString ($im$FontNum$CenterLoc$height-$FontHeight"$BarcodeFull"$Black);
        }
        else
        {
            
$FontHeight=-2;
        }


        for (
$i=0$i<strlen($BarcodeFull); $i++)
        {
                
$StripeCode Code39 ($BarcodeFull[$i]);


                for (
$n=0$n 9$n++)
                {
                        if (
$Color == $White$Color $Black;
                        else 
$Color $White;


                        switch (
$StripeCode[$n])
                        {
                                case 
'0':
                                        
ImageFilledRectangle ($im$CurrentBarX0$CurrentBarX+$NarrowBar$height-1-$FontHeight-2$Color);
                                        
$CurrentBarX += $NarrowBar;
                                        break;


                                case 
'1':
                                        
ImageFilledRectangle ($im$CurrentBarX0$CurrentBarX+$WideBar$height-1-$FontHeight-2$Color);
                                        
$CurrentBarX += $WideBar;
                                        break;
                        }
                }


                
$Color $White;
                
ImageFilledRectangle ($im$CurrentBarX0$CurrentBarX+$QuietBar$height-1-$FontHeight-2$Color);
                
$CurrentBarX += $QuietBar;
        }


        
OutputImage ($im$format$quality);
}



// Output an image to the browser

function OutputImage ($im$format$quality)
{
        switch (
$format)
        {
                case 
"JPEG"
                        
ImageJPEG ($im""$quality);
                        break;
                case 
"PNG":
                        
ImagePNG ($im);
                        break;
                case 
"GIF":
                        
ImageGIF ($im);
                        break;
        }
}


//-----------------------------------------------------------------------------
// Returns the Code 3 of 9 value for a given ASCII character
//-----------------------------------------------------------------------------
function Code39 ($Asc)
{
        switch (
$Asc)
        {
                case 
' ':
                        return 
"011000100";     
                case 
'$':
                        return 
"010101000";             
                case 
'%':
                        return 
"000101010"
                case 
'*':
                        return 
"010010100"// * Start/Stop
                
case '+':
                        return 
"010001010"
                case 
'|':
                        return 
"010000101"
                case 
'.':
                        return 
"110000100"
                case 
'/':
                        return 
"010100010"
                case 
'-':
                        return 
"010000101";
                case 
'0':
                        return 
"000110100"
                case 
'1':
                        return 
"100100001"
                case 
'2':
                        return 
"001100001"
                case 
'3':
                        return 
"101100000"
                case 
'4':
                        return 
"000110001"
                case 
'5':
                        return 
"100110000"
                case 
'6':
                        return 
"001110000"
                case 
'7':
                        return 
"000100101"
                case 
'8':
                        return 
"100100100"
                case 
'9':
                        return 
"001100100"
                case 
'A':
                        return 
"100001001"
                case 
'B':
                        return 
"001001001"
                case 
'C':
                        return 
"101001000";
                case 
'D':
                        return 
"000011001";
                case 
'E':
                        return 
"100011000";
                case 
'F':
                        return 
"001011000";
                case 
'G':
                        return 
"000001101";
                case 
'H':
                        return 
"100001100";
                case 
'I':
                        return 
"001001100";
                case 
'J':
                        return 
"000011100";
                case 
'K':
                        return 
"100000011";
                case 
'L':
                        return 
"001000011";
                case 
'M':
                        return 
"101000010";
                case 
'N':
                        return 
"000010011";
                case 
'O':
                        return 
"100010010";
                case 
'P':
                        return 
"001010010";
                case 
'Q':
                        return 
"000000111";
                case 
'R':
                        return 
"100000110";
                case 
'S':
                        return 
"001000110";
                case 
'T':
                        return 
"000010110";
                case 
'U':
                        return 
"110000001";
                case 
'V':
                        return 
"011000001";
                case 
'W':
                        return 
"111000000";
                case 
'X':
                        return 
"010010001";
                case 
'Y':
                        return 
"110010000";
                case 
'Z':
                        return 
"011010000";
                default:
                        return 
"011000100"
        }
}


?>
la llamada se hace sencillamente con un:

Código PHP:
<?php
            
while ($row mysql_fetch_array($sql)) {
                
?>
                <br>Código: <span id="muestraDatos"><?php echo $row['CODIGO']; ?></span>
                <br>
                <?php
// inicio de código de código de barras
                
$num $row['CODIGO'];
                
?>
                <img src="includes/barcode.php?barcode=<?php echo $num ?>&quality=100&name='hola'">
el problema está en que cuando guardo la imagen generada, me la guarda como barcode.png y cuyo nombre es en funcion a la llamada del archivo barcode.php por lo cual si le pongo codigodebarra.php y lo llamo así, me genera la imagen con el nombre codigodebarra.png; lo que yo necesito es que el nombre sea el mismo que el $row['CODIGO'], que cambios debería hacer para que esto ocurra?? Gracias.
  #2 (permalink)  
Antiguo 13/09/2013, 06:35
Avatar de lisandro Arg  
Fecha de Ingreso: octubre-2003
Ubicación: Cordoba, Argentina
Mensajes: 945
Antigüedad: 21 años, 1 mes
Puntos: 24
Respuesta: modificar generador de códigos de barra code39

En la funcion barcode39 estan las cabeceras donde determina que tipo de archivo será, intenta colocar ahi mismo

Código PHP:
Ver original
  1. header('Content-Disposition: inline; filename="tunombre.png"');

si no funciona es posible que ya lo haga en otra parte del script, en todo caso busca y reemplaza alli por el nombre que quieras
  #3 (permalink)  
Antiguo 13/09/2013, 07:53
 
Fecha de Ingreso: septiembre-2009
Mensajes: 39
Antigüedad: 15 años, 2 meses
Puntos: 0
Respuesta: modificar generador de códigos de barra code39

no se si te entendí bien, lo que si es es que agregué esa linea y me cambia el nombre a "tunombre.png" lo cual no está mal, pero yo necesito que el nombre sea dinámico y dependa de $_POST[CODIGO] y cuando escribo cosas como:
header('Content-Disposition: inline; filename=$num'); me aparecen errores garrafales :( Gracias por su tiempo y feliz dia del programador para todos, saludos..
  #4 (permalink)  
Antiguo 13/09/2013, 07:56
 
Fecha de Ingreso: septiembre-2009
Mensajes: 39
Antigüedad: 15 años, 2 meses
Puntos: 0
Respuesta: modificar generador de códigos de barra code39

el codigo correcto era
header("Content-Disposition: filename=".$barcode);

gracias por la mano gigante que me diste y me orientó para solucionarlo, feliz dia... Saludos.

Etiquetas: barras, code, modificar, nombre
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:12.