Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Problemas con imágenes en BD (https://www.clubdelphi.com/foros/showthread.php?t=75777)

martinlillo 19-09-2011 14:08:46

Problemas con imágenes en BD
 
Gente, tengo un gran problema. Resulta que en mi base de datos (firebird) tengo registros con fotos, y al ingresar supongamos diez fotos de no más de 1 MB, la base crece muchísimo más que 10 MB. Las fotos que levanto son jpg, e internamente las convierto a BitMap. Acá va un código que uso:

------------------------------------------------------------
function
ConvertirFoto(Nombre:String):TBitmap;
var p : TPicture;
begin
p := TPicture.Create;
p.LoadFromFile(Nombre);
result := TBitmap.Create;
result.Assign(p.Graphic);
p.Free;
end;

procedure TFormFotos.Button2Click(Sender: TObject);
begin
DM.Fotitos.Edit;
DBimage1.Picture.Bitmap := ConvertirFoto(FileListBox1.FileName);
DM.FotitosID_DATOSFIL.Value := DM.DatosfilialesID_DATOSFIL.Value;
DM.Fotitos.Post;
DM.IBTransaction1.CommitRetaining;
showmessage('Foto agregada exitosamente');
end;
---------------------------------------------------------


Al hacer un backaup de la base, y restaurarla, el tamaño disminuye. No una barbaridad, pero disminuye. Qué estaré haciendo mal? Será que al convertir a BMP, los datos de la imagen crecen? Hay forma de guardar como jpg?

Saludos y gracias!!!

Casimiro Notevi 19-09-2011 14:30:10

El bmp ocupa muchisimo más que el jpg. De todas formas no te preocupes porque la BD sea grande, no hay ningún problema.

Por cierto, recuerda poner etiquetas a tu código fuente en los mensajes.
Ejemplo:



.

Y recuerda también poner las preguntas en el foro adecuado, en este caso seguramente estaría mejor en "Firebird".
¿Leíste nuestra guía de estilo?, gracias.

martinlillo 19-09-2011 14:44:20

Gracias! De ahora en más usaré ese método para poner código. En cuanto a la guía de estilos, la leí y estoy muy de acuerdo.

Saludos!

Casimiro Notevi 19-09-2011 15:17:02

Gracias

Cita:

Empezado por martinlillo (Mensaje 412569)
Gracias! De ahora en más usaré ese método para poner código. En cuanto a la guía de estilos, la leí y estoy muy de acuerdo.

Saludos!


martinlillo 19-09-2011 15:30:38

He estado leyendo, y encontré que hay un componente llamado EDBImage, que permite manejar jpg. Según lo que sospecho, puedo cambiar este componente sin tocar la estructura de la base de datos, en donde la imagen seguirá siendo blob tipo 0. Lo único que cambia es la interfaz.

Estoy en lo correcto?

Saludos!

Casimiro Notevi 19-09-2011 15:37:12

El componente normal TImage puede mostrar jpg también, haz una búsqueda por los foros, se ha tratado el tema en diversas ocasiones.

martinlillo 19-09-2011 15:58:54

Y el TDBImage? Puede mostrar jpg?

Si no entiendo mal, el problema es únicamente en la interfaz, ya que en la base de datos, no habría problema en guardar cualquier archivo, ya que es un blob. El problema aquí radica en poder mostrarlo al usuario. Es decir, el dato está, aunque no lo veamos... :)

Saludos!

martinlillo 19-09-2011 16:12:55

Ahora, yo probé poner este código que vi en alguna parte de este foro:

Código Delphi [-]
 TDBimage.LoadFromFile('ejemplo.jpg');

y me tira error porque no es un BMP válido. Eso me cambió los esquemas... se ve que hay que hacerle algo más al asunto...

Saludos!

Casimiro Notevi 19-09-2011 16:31:05

Venga, una buscadita y verás como lo encuentras en un momento ;)

martinlillo 19-09-2011 16:35:22

Te juro que me estoy mareando en la navegación de links del foro!! He encontrado un montón de "medias soluciones", juaaa! Pero bueno, sigo leyendo... con paciencia...

Saludos y gracias!!

Casimiro Notevi 19-09-2011 16:51:44

Algo así te sirve, con un simple timage

Código Delphi [-]
uses jpeg
...
...
...

procedure TFmain.FormShow(Sender: TObject);
var
  cImg, cExt : string;
begin 
  cImg := LeerINI(cContaIni,_seccion_personal_,_propiedad_imagenfondoalternativa_);
  cExt := AnsiUpperCase(ExtractFileExt(cImg));
  if ( (_JPG_=cExt) or (_JPEG_=cExt) or (_PNG_=cExt) ) then
    imgFondo.Picture.LoadFromFile(cImg)
  else
  if (_BMP_=cExt) then
    imgFondo.Picture.Bitmap.LoadFromFile(cImg);

...
...
...

end;

martinlillo 19-09-2011 17:16:02

Poniendo
Código Delphi [-]
 DBImage.picture.LoadFromFile('ej.jpg');

no me tira ningún error, pero me deja el campo blob en NIL. No me levanta la imagen...
Pero creo que vamos por buen camino.

Gracias!!

fidel 19-09-2011 19:42:57

Mira a ver si te sirve esto, a mí me va bien.

http://www.clubdelphi.com/foros/showthread.php?t=41572

martinlillo 20-09-2011 12:48:12

Muchas gracias a todos por sus respuestas. Un amigo mio me dio la solución. Instalar las componentes Jedi.

Saludos!!

Casimiro Notevi 20-09-2011 14:25:55

Bueno, vale, perfecto :rolleyes::)


La franja horaria es GMT +2. Ahora son las 00:03:43.

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