Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > Lazarus, FreePascal, Kylix, etc.
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 10-09-2012
Avatar de anubis
anubis anubis is offline
Miembro
 
Registrado: mar 2007
Posts: 863
Poder: 18
anubis Va por buen camino
cual es la mejor forma de trabajar con blob

Hola amigos,

Ya estoy leyendo y guardando imagenes jpg en archivos blob de un bd, pero estoy limitado a los jpg.
Cargo el archivo jpg en un stream y al reves e incluso los imprimo con fortesreport.
La única pega que tiene es que cuando la imagen ocupa toda una hoja, en el fortesreport preview, se dificulta hacer zoom o subir y bajar el scroll.
Las imagenes ocupan sobre 300kb.
No se podria hacer lo mismo con imagenes png o bien con pdf (que seria lo idoneo)?

Ya estuve buscando lo mismo que use para el jpg pero en png pero no lo encuentro.

como lo trabajais vosotros?

saludos y gracias
Responder Con Cita
  #2  
Antiguo 10-09-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
En un campo blob puedes guardar lo que quieras, ¿qué problema tienes?
Responder Con Cita
  #3  
Antiguo 10-09-2012
Avatar de anubis
anubis anubis is offline
Miembro
 
Registrado: mar 2007
Posts: 863
Poder: 18
anubis Va por buen camino
Si, gracias. Mas que nada el poder abrir un pdf en lazarus y luego pasarlo a un blob tal y como lo hago con jpg.

O bien un un png,

el problema es trabajar con formatos, verlos en pantalla por ejemplo y luego guardarloCon jpg no tengo problema, se me dificultan los otros formatos. Lease png o pdf.

Cita:
JPG:=TJPEGImage.Create;
if not OpenPictureDialog1.Execute then Exit;
jpg.LoadFromFile(OpenPictureDialog1.FileName);
Image1.Picture.Assign(JPG);
Stream := form1.ZQuery1.CreateBlobStream(form1.zquery1.FieldByName('factur'), bmWrite); // Asignamos el BLOB a un stream
jpg.SaveToStream(Stream); // y guardamos la imagen como JPEG (convertido), en el stream
Stream.Destroy;// liberamos
Esto es lo que uso.

saludos y gracias

Última edición por anubis fecha: 10-09-2012 a las 00:21:08.
Responder Con Cita
  #4  
Antiguo 10-09-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Lo que quieres es verlo "dentro" de tu programa o abrirlo con el programa predeterminado del sistema, ejemplo, si es un html que se abra el firefox, si es un gif que se abra el visor de imágenes, etc.
¿Eso es lo que quieres?
Responder Con Cita
  #5  
Antiguo 10-09-2012
Avatar de anubis
anubis anubis is offline
Miembro
 
Registrado: mar 2007
Posts: 863
Poder: 18
anubis Va por buen camino
con el jpg lo veo dentro de un timage,
un pdf o un png como lo puedo guardar en un blob desde dentro de mi programa?.
Responder Con Cita
  #6  
Antiguo 10-09-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
¿Guardarlo?, tienes varias formas, pero simplificando mucho:
Código Delphi [-]
dataset.campoblob.loadfromfile('elficheroquesea.pdf');
Haz una búsqueda por clubdelphi, encontrarás código para hacerlo, es un tema muy repetido.

Es más, creo recordar que tú mismo preguntaste esto hace unos meses. Me parece que con sqlite.
Responder Con Cita
  #7  
Antiguo 10-09-2012
Avatar de anubis
anubis anubis is offline
Miembro
 
Registrado: mar 2007
Posts: 863
Poder: 18
anubis Va por buen camino
si, es cierto, pregunte, pero me faltaban esos detalles.

buscare en el foro, pero lo que me interesaba no es guardar sino poder abrir en mi aplicacion eso que se guarda, de ahi que use los jpg.

gracias
Responder Con Cita
  #8  
Antiguo 10-09-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola anubis.

No utilizo Lazarus pero ví que en varios sitios citaban a la librería [MuPDF], tal vez te sirva para lo que estas buscando.
Podes descargarlo de [aquí] (GNU Public License).

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #9  
Antiguo 10-09-2012
Avatar de anubis
anubis anubis is offline
Miembro
 
Registrado: mar 2007
Posts: 863
Poder: 18
anubis Va por buen camino
Casimiro,
Ya resolvi una parte, la cuestion era que me empeñaba en usar el tjpegimage, cuando podia hacerlo como:

Código Delphi [-]
Image1.Picture.LoadFromStream(stream);
Asi me sirve para cualquier imagen soportada por timage.

lo unico que como png me ocupa 10 veces mas la imagen que con el jpg.

Como no voy a manipular imiagenes solo guardarlas en un blob y verlas.

Ahora me falta buscarle la forma con el pdf.

ecfisa, ya vi el componente pero no me sirve.

Lo que nose es si existe alguna forma de cargar el pdf de forma externa y pasarle el dato al stream para guardarlo?
Responder Con Cita
  #10  
Antiguo 10-09-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por anubis Ver Mensaje
Lo que nose es si existe alguna forma de cargar el pdf de forma externa y pasarle el dato al stream para guardarlo?
Normalmente lo que yo hago es extraer del blob y guardar el fichero en un directorio temporal, luego ejecuto una llamada para abrirlo y es el propio windows el que se encarga de abrirlo con el programa predeterminado que tenga según del tipo de fichero que sea.
O sea, que lo abro "externamente" a mi programa.
Responder Con Cita
  #11  
Antiguo 11-09-2012
Avatar de anubis
anubis anubis is offline
Miembro
 
Registrado: mar 2007
Posts: 863
Poder: 18
anubis Va por buen camino
Gracias casimiro,

Ya estuve viendo el winexec, pero hace referencia a un archivo, lo que no entiendo como puedo, por ejemplo, es hacer una llamada para cargar una imagen en pdf (que lo abre con el acrobat p.e.) y de ahi pasarlo a un stream para guardarlo en un blob.
Porque me imagino que el proceso inverso, leer de un blob y pasarlo para visualizarlo con el acrobat.

Componentes para lazarus de pdf no he visto salvo powerpdf, pero solo para crear y en mi caso no he logrado que funcione bien.

gracias de nuevo.
Responder Con Cita
  #12  
Antiguo 11-09-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Tú sólo has de decirle al sistema que lo abra, él sabrá con qué abrirlo.
Normalmente con ShellExecute, si mal no recuerdo.
Haz una búsqueda por esa palabra en los foros, encontrarás código de ejemplo.
Responder Con Cita
  #13  
Antiguo 11-09-2012
Avatar de mightydragonlor
[mightydragonlor] mightydragonlor is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Medellín-Colombia
Posts: 587
Poder: 18
mightydragonlor Va por buen camino
TProcess para que sea multiplataforma con Lazarus.
__________________
mas confundido que Garavito el día del Niño.
Responder Con Cita
  #14  
Antiguo 11-09-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por mightydragonlor Ver Mensaje
TProcess para que sea multiplataforma con Lazarus.
¿La función como se llama así?
Responder Con Cita
  #15  
Antiguo 11-09-2012
Avatar de mightydragonlor
[mightydragonlor] mightydragonlor is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Medellín-Colombia
Posts: 587
Poder: 18
mightydragonlor Va por buen camino
no, TProcess es una clase que permite ejecutar cualquier programa externo.
http://www.freepascal.org/docs-html/.../tprocess.html
__________________
mas confundido que Garavito el día del Niño.
Responder Con Cita
  #16  
Antiguo 11-09-2012
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Pero ShellExecute sirve también para abrir el programa asociado al archivo que se le pasa. ¿TProcess también?

// Saludos
Responder Con Cita
  #17  
Antiguo 11-09-2012
Avatar de mightydragonlor
[mightydragonlor] mightydragonlor is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Medellín-Colombia
Posts: 587
Poder: 18
mightydragonlor Va por buen camino
El ShellExecute sólo sirve para Windows, TProcess funciona con Win2, Linux y MacOS, pero depende mas de lo que quieras abrir y el como lo quieres abrir, es decir, puedes ejecutar excel y pasarle como parámetro la ruta del archivo con TProcess y funciona, ahora, si no sabes que ruta o que programa abre que, se puede usar la función OpenDocument, sólo debes poner en uses LCLIntf y LCLProc, y abrirá el documento con el programa asignado en el S.O.
__________________
mas confundido que Garavito el día del Niño.
Responder Con Cita
  #18  
Antiguo 11-09-2012
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por mightydragonlor
si no sabes que ruta o que programa abre que, se puede usar la función OpenDocument
Pues sí, es que esta funcionalidad es la que planteaba Casimiro desde un principio.

// Saludos
Responder Con Cita
  #19  
Antiguo 11-09-2012
Avatar de rretamar
[rretamar] rretamar is offline
Miembro Premium
 
Registrado: ago 2006
Ubicación: San Francisco, Córdoba, Argentina
Posts: 1.168
Poder: 20
rretamar Va camino a la famarretamar Va camino a la fama
Si son archivos muy grandes (y muchos) cuidadín con guardarlos en la base de datos. No sólo por el tamaño que alcanzará el archivo, sino porque si se daña la base de datos existe la posibilidad de que no se pueda recuperar la información. Cuesta un poco más (algunas líneas de código adicionales) pero en lo particular a los archivos de ese tipo (imágenes, video, audio) prefiero almacenarlos fuera de la base de datos, y colocando un campo donde almaceno la ubicación del archivo externo.

A lo mejor es que soy medio paranoico con la "pérdida de datos".

Como decía un profesor:

-"¿ Podés usar una consulta SQL que te de como resultado las morochas o las rubias en el campo de imágenes de la base de datos ?". -"!!! No !!!"...-"¿ Entonces para qué almacenas imágenes en una base de datos ?".
__________________
Lazarus Codetyphon : Desarrollo de aplicaciones Object Pascal, libre y multiplataforma.

Última edición por rretamar fecha: 11-09-2012 a las 23:32:14.
Responder Con Cita
  #20  
Antiguo 12-09-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por rretamar Ver Mensaje
Como decía un profesor:
-"¿ Podés usar una consulta SQL que te de como resultado las morochas o las rubias en el campo de imágenes de la base de datos ?". -"!!! No !!!"...-"¿ Entonces para qué almacenas imágenes en una base de datos ?".
Pues si no guardas las imágenes... tampoco puedes saberlo

No sé qué BD está usando, pero en los últimos 2012-1998=14 años nunca he tenido ningún problema de ese tipo con firebird y con BDs de muchos gigas.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Cual es la mejor forma de conectar con la BD GerTorresM Conexión con bases de datos 1 11-01-2010 16:51:47
Sobre cuál es la mejor opción para trabajar con Word Gabo Servers 6 16-01-2008 13:36:21
Eliminar Codigo Cual es la mejor Forma ? sierraja Varios 1 12-04-2007 00:41:00
cual es la mejor forma de logearse a mysql... Arturo MySQL 1 11-10-2006 17:45:01
cual es la mejor forma ? martita Varios 14 07-07-2005 19:35:55


La franja horaria es GMT +2. Ahora son las 21:33:44.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi