• Jueves 28 de Marzo de 2024, 20:27

Autor Tema:  Generar y guardar codigos de barras en postgres  (Leído 5542 veces)

jonathanperez

  • Miembro activo
  • **
  • Mensajes: 49
    • Ver Perfil
Generar y guardar codigos de barras en postgres
« en: Jueves 3 de Diciembre de 2009, 15:07 »
0
Amigos del foro recurro a ustedes en esta oportunidad de solicitar de su colaboración con simple código de generar un codigo de barras, lo cual ya logre y muestra perfectamente......pero no logro hacer como guardarlo es decir quiero que guarde solo la imagen creada en la base de datos de postgres.

este es mi codigo:

para generar el codigo de barras:

<?php

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




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


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


//-----------------------------------------------------------------------------
// Generate a Code 3 of 9 barcode
//-----------------------------------------------------------------------------
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 ($im, 255, 255, 255);
        $Black = ImageColorAllocate ($im, 0, 0, 0);
        //ImageColorTransparent ($im, $White);
        ImageInterLace ($im, 1);



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


        $nChars = (strlen($barcode)+2) * ((6 * $NarrowRatio) + (3 * $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 ($im, 1, 0, 0, "Image is too small!", $Black);
                OutputImage ($im, $format, $quality);
                exit;
        }
       
        $CurrentBarX = (int)(($width - $ActualWidth) / 2);
        $Color = $White;
        $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, $CurrentBarX, 0, $CurrentBarX+$NarrowBar, $height-1-$FontHeight-2, $Color);
                                        $CurrentBarX += $NarrowBar;
                                        break;


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


                $Color = $White;
                ImageFilledRectangle ($im, $CurrentBarX, 0, $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";
        }
}


?>



para mostrar las imagenes generadas es este:

<IMG SRC="barcode.php?barcode=<? echo $seriallotes;?>&width=280&height=80">

yo le estoy pasando los valores del codigo por get, y esta funcionando muy bien pero no logro guardarlos

espero puedan ayudarme.

saludos.

DriverOp

  • Miembro MUY activo
  • ***
  • Mensajes: 201
    • Ver Perfil
Re: Generar y guardar codigos de barras en postgres
« Respuesta #1 en: Jueves 3 de Diciembre de 2009, 23:24 »
0
Supongo que con "guardarlos" te refieres a guardar el código de barras generado como un archivo de imagen.
En las funciones ImageXXX (donde XXX puede ser jpeg, gif o png) agrega en el segundo parámetro un nombre de archivo que será donde se guardará la imagen. Además tienes que quitar el primer switch que está justo al inicio de la función Barcode39.

jonathanperez

  • Miembro activo
  • **
  • Mensajes: 49
    • Ver Perfil
Re: Generar y guardar codigos de barras en postgres
« Respuesta #2 en: Viernes 4 de Diciembre de 2009, 13:49 »
0
ok GRacias por responder, pero cuando me dices que agregue un segundo parametro para guardar el archivo te refieres a asignar un nombre es decir algo como esto:

$origen="http://localhost/consignaciones/barcode.php?barcode=$seriallotes&width=280&height=80";
$tipo_archivo="png";
$punto=".";
$nuevo_archivo=$seriallotes.$punto.$tipo_archivo;
$destino= '/var/www/consignaciones/sub_imagenes/'.$nuevo_archivo;
if (copy($origen, $destino)) {
   echo "Imagen guardada";
}else{
   echo "No se ha guardado la imagen.";
}

esto me funciona para guardar las imágenes en una carpeta pero yo quiero meterlas como un registro en la base de datos luego llamarla cuando este generando el reporte.

DriverOp

  • Miembro MUY activo
  • ***
  • Mensajes: 201
    • Ver Perfil
Re: Generar y guardar codigos de barras en postgres
« Respuesta #3 en: Viernes 4 de Diciembre de 2009, 15:12 »
0
Como no sé nada de Postgres, no sabría decirte cómo hacer lo que quieres, pero si pudiste guardar los códigos de barras como imágenes en archivos y suponiendo que Postgres tiene algún tipo de campo donde puedas almacenar rastras de bytes, supongo que no será difícil meter la imagen en la base de datos.

F_Tanori

  • Moderador
  • ******
  • Mensajes: 1919
  • Nacionalidad: mx
    • Ver Perfil
Re: Generar y guardar codigos de barras en postgres
« Respuesta #4 en: Viernes 4 de Diciembre de 2009, 19:50 »
0
" ExIsTo y A vEcEs PiEnSo "

NOTA:
===========================================================================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
===========================================================================================================================

grandzam

  • Miembro MUY activo
  • ***
  • Mensajes: 118
    • Ver Perfil
Re: Generar y guardar codigos de barras en postgres
« Respuesta #5 en: Sábado 5 de Diciembre de 2009, 08:17 »
0
Hola, estoy de acuerdo con F_Tanori, y bueno la verdad yo te recomendaría no guardar tus imagenes en la base de datos porque al final tendrás una base de datos enorme, en lugar de esto te recomiendo hacer una carpeta que tenga el Id de la tabla como nombre y dentro de ella ps guardar su imagen del código de barras.

e-proyect.com