PDA

Ver la Versión Completa : Problemas con imágenes en BD


martinlillo
19-09-2011, 14:08:46
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:
http://neftali.clubdelphi.com/images/UtilizarTAGs.png


.

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 (http://www.clubdelphi.com/foros/guiaestilo.php)?, 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 http://www.clubdelphi.com/foros/images/icons/icon14.gif

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:


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 (http://www.clubdelphi.com/foros/search.php) 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

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

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::)