FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Como Guardar una imagen
He esta tratando de guardar una imagen del formato Jpg en un campo BLOB de interbase, he realizado los consejos que hay tanto aqui en el foro, como los de truco mania, mas no he podido realizarlo, me marca que no es un grafico lo que se quiere guardar.
Como puedo Guardar un archivo Jpg en un campo BLOB de Interbase? Gracias de Antemano por sus respuestas |
#2
|
|||
|
|||
Buenas, la verdad es que no sabria como lo puedes hacer directamente sobre la base. Pero lo que yo estoy haciendo para no ocupar espacio y trabajar de modo mas eficiente con la DB es guardar los archivos de las imagenes en un recurso compartido de red y en la DB solo guardo la direccion al mismo. por ej "\\fileserver\proyectoX\imagenes\imagen_10.jgp"
Es solo una sugerencia. Suerte
__________________
Marín Ignacio Borthiry (Viet) - "El hombre arriesga su vida cada vez que elije y eso es lo que lo hace libre" ;) |
#3
|
||||
|
||||
Hola,
hay un par de puntos que no comprendo de tu comentario: Cita:
2. ¿Cómo se mejora la eficiencia teniendo fuera de la base de datos las imágenes?. Salvo que se utilicen consultas tipo "todo de todo" (SELECT * ...), el rendimiento de la base de datos no se ve afectado especialmente por el uso de BLOBs. Saludos. |
#4
|
|||
|
|||
Cita:
Referente al segundo punto, no conozco el tratamiento de IB referente a los Blobs, por lo que me abstengo de opinar |
#5
|
||||
|
||||
Hola,
Cita:
Personalmente veo muy pocas ventajas, en realidad ninguna, almacenando las imágenes fuera de la base de datos, y sí desventajas: posibilidad de pérdida de integridad, disminución de la seguridad, pérdida de movilidad entre diferentes plataformas, ... Saludos. |
#6
|
|||
|
|||
Hola, ¿puedes ser mas especifico con la clase de error que te marca, y de ser posible algo de codigo con el que haces el guardado?. Realmente no deberia de haber problemas con el guardado de una imagen jpeg en un campo blob de interbase, con el metodo LoadFromFile del TBlobField, deberia ser suficiente.
Saludos Alfredo. |
#7
|
|||
|
|||
Buenas
Yo particularmente siempre he usado la opción de las imagenes fuera de la Base de Datos. La explicación es sencilla. Cuando empecé a programar con IB en la versión 5.x, el como usar los Blobs por esa época, para mi era toda una incognita. Eran mis primeros pasos en estos mundos de Dios.... Además, de vez en cuando, la gente reportaba problemas de corrupción de la Base de Datos provocados por las imagenes. Bueno, mejor dicho, creo que era porque la BD eran grandes y ese era el problema, no las imagenes en si mismo. Así que yo me he acostumbrado a usar las imagenes fuera de la BD. Hoy en día, creo q el tema está más que superado. Y que con IB7, o con FB1.5, probablemente ya no haya ningún problema en trabajar con imagenes dentro de la BD. Lo que dice Kinobi de poder transportar fácilmente de un SO a otro la BD es cierto, ya que a veces guardar las imagenes fuera de la BD es un verdadero dolor de cabeza. Pero lo importante es que la gente conozca las dos opciones, pros y contras, y que se decida con la que mejor se ajusta a sus necesidades Un saludo para todos. |
#8
|
||||
|
||||
Hola Iván,
Cita:
Tengo constancia de bases de datos InterBase (versiones 4.x y 5.x) con varios Gigas de almacenamiento (incluidos BLOBs), funcionando sin problemas. Saludos. |
#9
|
|||
|
|||
1. Entrando en la polémica de si en fichero o en la base de datos en un campo blob: Todo lo que esté dentro de la base de datos mejor (para eso se inventaron), simplifica la configuración del cliente (la aplicación cliente se entiende...) y no hay que andar compartiendo directorios. Evidentemente aumenta de tamaño la base de datos, pero también lo hacen los directorios donde se almacenan las imágenes. Además al estar en la propia base de datos, las copias con gbak también te guardarían las imágenes. Está claro que si la misma imagen se repite mucho, tendrás que organizar mejor la base de datos y tener una tabla exclusiva para las imágenes. Mucha gente comete el fallo de por ejemplo poner un campo de fotografía en la ficha de un "artículo" y luego tener la misma fotografía repetida porque la misma incluyen varios artículos o es la misma o parecida. Esto si hace aumentar la base de datos inecesariamente, pero como todo, hay que hacer un buen estudio al igual que se hacen para otras tablas, para las imágenes y evitar repeticiones..
2.Desconozco realmente las circunstancias y el error (necesitaría más información), pero suele ser muy frecuente, no el almacenamiento de la imágen en el campo blob, sino el visualizar una imagen JPEG en un componente dataware. Algunos componentes dataware de imágenes no están preparados para mostrar JPEG y hay que escribir un poco de código para que lo soporte... |
#10
|
|||
|
|||
Como dirían mis amigos... "es una leyenda urbana", pero que al principio yo desconocía si era real o no, y me acostumbré a trabajar con las imagenes fuera de la BD.
Pero totalmente de acuerdo, que por comodidad mejor dentro de la BD, y que todos son ventajas. Un saludo |
#11
|
|||
|
|||
Pobre de quetzal..... que entre comentarios "fuera" y "dentro de la db" , ninguno de nosotros le soluciono el problema......
quetzal tal vez con esto : guardar imagen (el temilla se podria pasar a debates, no?.... es solo una sugerencia )
__________________
Marín Ignacio Borthiry (Viet) - "El hombre arriesga su vida cada vez que elije y eso es lo que lo hace libre" ;) |
#12
|
|||
|
|||
Cita:
|
#14
|
|||
|
|||
gracias a todos por sus comentarios
lo soluciones con este codigo unit Unit1; { Copyright (c) 2001 Ernesto De Spirito Latium Software http://www.latiumsoftware.com/ Email: edspirito@latiumsoftware.com This example requires the BDE. Este ejemplo requiere de la BDE. } interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Db, DBTables, Grids, DBGrids, jpeg, ExtCtrls, DBCtrls, Menus, ExtDlgs; type TForm1 = class(TForm) Image1: TImage; DataSource1: TDataSource; Table1: TTable; dlgOpenPicture: TOpenPictureDialog; PopupMenu1: TPopupMenu; mnuLoad: TMenuItem; DBNavigator1: TDBNavigator; mnuClear: TMenuItem; Table1FOTO: TBlobField; procedure Table1AfterScroll(DataSet: TDataSet); procedure mnuLoadClick(Sender: TObject); procedure FormCreate(Sender: TObject); procedure mnuClearClick(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; type TGraphType = (gtBitmap, gtIcon, gtMetafile, gtJpeg); implementation {$R *.DFM} // ===================================================================== procedure TForm1.Table1AfterScroll(DataSet: TDataSet); var Stream: TMemoryStream; Jpg: TJpegImage; GraphType: TGraphType; begin Jpg := nil; Stream := nil; try Stream := TMemoryStream.Create; TBlobField(Table1.FieldByName('foto')).SaveToStream(Stream); if Stream.Size > 0 then begin Stream.Position := 0; Stream.Read(GraphType, 1); case GraphType of gtBitmap: Image1.Picture.Bitmap.LoadFromStream(Stream); gtIcon: Image1.Picture.Icon.LoadFromStream(Stream); gtMetafile: Image1.Picture.Metafile.LoadFromStream(Stream); gtJpeg: begin Jpg := TJpegImage.Create; Jpg.LoadFromStream(Stream); Image1.Picture.Assign(Jpg); end else Image1.Picture.Assign(nil); end; end else Image1.Picture.Assign(nil); except Image1.Picture.Assign(nil); end; jpg.Free; Stream.Free; end; // ===================================================================== procedure TForm1.mnuLoadClick(Sender: TObject); var Jpg: TJpegImage; Stream: TMemoryStream; FileExt: string; GraphType: TGraphType; begin if dlgOpenPicture.Execute then begin Jpg := nil; Stream := nil; try Stream := TMemoryStream.Create; FileExt := LowerCase(ExtractFileExt(dlgOpenPicture.FileName)); if (FileExt = '.bmp') or (FileExt = '.dib') then begin GraphType := gtBitmap; Stream.Write(GraphType, 1); with Image1.Picture.Bitmap do begin LoadFromFile(dlgOpenPicture.FileName); Image1.Picture.Bitmap.SaveToStream(Stream); end; end else if (FileExt = '.ico') then begin GraphType := gtIcon; Stream.Write(GraphType, 1); with Image1.Picture.Icon do begin LoadFromFile(dlgOpenPicture.FileName); Image1.Picture.Bitmap.SaveToStream(Stream); end; end else if (FileExt = '.emf') or (FileExt = '.wmf') then begin GraphType := gtMetafile; Stream.Write(GraphType, 1); with Image1.Picture.Metafile do begin LoadFromFile(dlgOpenPicture.FileName); Image1.Picture.Bitmap.SaveToStream(Stream); end; end else if (FileExt = '.jpg') or (FileExt = '.jpeg') or (FileExt = '.jpe') then begin Jpg := TJpegImage.Create; Jpg.LoadFromFile(dlgOpenPicture.FileName); Image1.Picture.Assign(Jpg); GraphType := gtJpeg; Stream.Write(GraphType, 1); Jpg.SaveToStream(Stream); end; if (Table1.State <> dsEdit) and (Table1.State <> dsInsert) then Table1.Edit; Stream.Position := 0; TBlobField(Table1.FieldByName('foto')).LoadFromStream(Stream); except jpg.Free; Stream.Free; raise; end; jpg.Free; Stream.Free; end; end; procedure TForm1.FormCreate(Sender: TObject); begin if Not FileExists('GraphTest.DB') then Table1.CreateTable; Table1.Open; end; procedure TForm1.mnuClearClick(Sender: TObject); begin Image1.Picture.Assign(nil); if (Table1.State <> dsEdit) and (Table1.State <> dsInsert) then Table1.Edit; Table1.FieldByName('foto').Assign(nil); end; end. Gracias a spitito por compartir este codigo es mejor gusrdar la informacion en una BD que fuera de ella, nsi no para que fueron creas |
#15
|
|||
|
|||
Hola y antes que nada disculpen la intromision pero en realidad no puedo evitar hacerlo jejeje, bueno el caso es que por algo de tiempo he realizado un catálogo de productos para una compañia en el cual se debe agregar fotografia de los articulos y demas datos como precio y descripciones el caso es que en los primeros intentos (hace unos 5 años) insertaba las imagenes en un campo BLOB pero oh gran problema el sistema se hace terriblemente lento y esto es por lo que sigue:
El campo BLOB almacena (en el caso particular de las imagenes) en formato BMP el cual obviamente es mucho más grande en espacio dentro de tu base de datos y esto sucede aún que le pegues un JPG siendo asi tienes dos opciones que listo a continuación. a) Lees tu archivo en formato JPG e insertas el contenido del mismo en un campo BLOB Byte (no Image) y te ahorras un espacio en tu base de datos. b) Vinculas alguno de tus campos al nombre del archivo que contiene tu imagen en formato JPG y lo cargas en un componente Image. En lo personal y si el comentario te es util prefiero la segunda opción ya que no tienes problemas de rendimiento en tus equipos y si quieres imprimir las imagenes en un reporte solo emplea el evento BeforePrint de la banda en cuestión, claro esto siempre y cuando emplees QReports. Saludos desde México |
#16
|
||||
|
||||
Hola,
Cita:
Saludos. |
|
|
|