Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.11.28;
Скачать: CL | DM;

Вниз

Хранение изображений.   Найти похожие ветки 

 
widoms   (2004-08-26 09:54) [0]

Хочу написать программу что типа фотоальбома lдля хранения изображений bmp,jpg.и.т.д, коментарии к изображениям.
Подскажите в чем лучше хранить изображения ?
Думаю в DB в Blob полях ???
Или можно подругому ?


 
WondeRu ©   (2004-08-26 10:22) [1]

widoms   (26.08.04 9:54)
Думаю в DB в Blob полях ???

это конечно здорово, но в базе лучше хранить пути к файлам! А для файлов - отдельная папка!


 
Vitalik ©   (2004-08-26 10:51) [2]


> это конечно здорово, но в базе лучше хранить пути к файлам!
> А для файлов - отдельная папка!

А я бы тогда вообще не стал с БД связываться... Пути к файлам и комментарии можно и в текстовых файлах хранить... или в ini...


 
WondeRu ©   (2004-08-26 11:17) [3]

Vitalik ©   (26.08.04 10:51) [2]
я БД везде пользую, где только можно! тока если приложние маленькое, то связку Access + ADO + Jet Driver!


 
widoms   (2004-08-26 11:18) [4]

хм... в DB было бы наверное проще, я пробовал но 50 фотографий уже медленно выводятся особенно BMP.
а если фотографии разбиты по группам...можно было бы связанную таблицу сделать.


 
WondeRu ©   (2004-08-26 11:36) [5]

widoms   (26.08.04 11:18) [4]
можно было бы связанную таблицу сделать.

делай! тока фотки в файлах храни, а не в БД


 
widoms   (2004-08-26 11:44) [6]

Т.е пути и коментарии хранить в БД ?
А как свзять изображения с БД я что то немного не догоняю.
Мне кажется лажа получится....


 
[lamer]Barmaglot ©   (2004-08-26 14:25) [7]

Маньяки!!! Нафига БД? Я бы такую программу выкинул сразу, которая для хранения файлов использует базу данных... Проще и надежнее слепливать изображения в один файл, а в ини-шке хранить позицию с которой начинается следующее изображение и ВСЕ... Зачем лишний расход ресурсов? Кроме того такую программу вообще лучше делать на WinAPI чтобы она занимала мало места...


 
WondeRu ©   (2004-08-26 16:26) [8]

[lamer]Barmaglot ©   (26.08.04 14:25) [7]
Маньяки!!!

каждый имеет право на извращение!) Мне ,предположим, легче с БД работать чем с файлами!


 
widoms   (2004-08-27 03:46) [9]

Изображения склеивать в один файл ?
Да ты крут. Ну а к примеру если мне надо удалить изображение или перенести в другую группу ?


 
Submarine   (2004-08-27 09:44) [10]

Лучше использовать БД, я использую Interbase, и храню картинки в Blob-полях, очень удобно, вот код:
unit Main;

interface

uses
 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
 DBTables, Db, StdCtrls, Buttons, ExtCtrls, DBCtrls, Grids, DBGrids,
 RXDBCtrl, jpeg, Placemnt;

type
 TForm1 = class(TForm)
   RxDBGrid1: TRxDBGrid;
   DBNavigator1: TDBNavigator;
   BitBtn1: TBitBtn;
   BitBtn2: TBitBtn;
   scrImage: TDataSource;
   qryImage: TQuery;
   DB_IMAGE: TDatabase;
   updtImage: TUpdateSQL;
   OpenDialog1: TOpenDialog;
   qryImageOBJECTID: TIntegerField;
   qryImageIMAGE_FILESNAME: TStringField;
   qryImageIMAGE_FILES: TBlobField;
   FormStorage1: TFormStorage;
   Image1: TImage;
   procedure FormCreate(Sender: TObject);
   procedure qryImageAfterDelete(DataSet: TDataSet);
   procedure qryImageAfterPost(DataSet: TDataSet);
   procedure BitBtn1Click(Sender: TObject);
   procedure RxDBGrid1DblClick(Sender: TObject);
   procedure BitBtn2Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;
 JpegIm: TJpegImage;
 bm: TBitMap;

implementation
   uses  shellapi, comobj;
{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
QryImage.open;
end;

procedure TForm1.qryImageAfterDelete(DataSet: TDataSet);
begin
try
// Base - имя базы
 db_Image.applyUpdates([TDBDataSet(DataSet)]);
 except
   ShowMessage("Не удается сохранить изменения на сервере. "+
     "Проверьте данные или обратитесь к администратору базы данных");
   TDBDataSet(DataSet).CancelUpdates;
 end;//try
end;

procedure TForm1.qryImageAfterPost(DataSet: TDataSet);
var DS: TDBDataSet;
begin  with DataSet as TQuery do
  DS := TDBDataSet(DataSet);
 try
   db_Image.ApplyUpdates([DS]);
 except
   ShowMessage("Не удается сохранить изменения на сервере. "+
     "Проверьте данные или обратитесь к администратору базы данных");
   DS.CancelUpdates;
 end;

end;

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
  if OpenDialog1.Execute = false then Exit;
   if qryImage.Active then begin
   qryImage.Edit;
   qryImageIMAGE_FILES.LoadFromFile(OpenDialog1.FileName);
    qryImageImage_FilesNAME.Value:=IntToStr(qryIMAGEObjectid.value);
    qryImage.Post;
//   DeleteFile(st);
  qryImage.close;
  qryImage.open;
end;
  end;

procedure TForm1.RxDBGrid1DblClick(Sender: TObject);
begin
  if OpenDialog1.Execute = false then Exit;
   if qryImage.Active then begin
   qryImage.Edit;
   qryImageIMAGE_FILES.LoadFromFile(OpenDialog1.FileName);
    qryImageImage_FilesNAME.Value:=IntToStr(qryIMAGEObjectid.value);
    qryImage.Post;
//   DeleteFile(st);
  qryImage.close;
  qryImage.open;
end;
  end;

procedure TForm1.BitBtn2Click(Sender: TObject);
var
 MS: TMemoryStream;

begin
 try
     MS := TMemoryStream.Create;
   qryImageImage_files.SaveToStream(ms);
   Image1.Picture.Bitmap.LoadFromStream(ms);
{ bm := TBitMap.Create;
 JpegIm := TJpegImage.Create;
 JpegIm.LoadFromStream(MS);
 bm.Assign(JpegIm);
 Form1.Canvas.Draw(0, 0, bm);
 bm.Destroy;
 JpegIm.Destroy; }
 finally
   MS.Free;
 end;
end;

end.
Что непонятно, пиши на мыло ...


 
Submarine   (2004-08-27 09:47) [11]

Блин, забыл qryImage - это query запрос, вместо rxDBGrid легко можно использовать обычный DBGrid


 
WondeRu ©   (2004-08-27 10:05) [12]

Submarine   (27.08.04 9:47) [11]
все конечно замечательно, но по моему горькому опыту (FireBird), если дохнет база, то и картинки соответственно тоже((( Так что есть риск, но есть и удобства! хотя можно и бэк-апы базы делать по расписанию!


 
widoms   (2004-08-27 10:17) [13]

Хорошо спасибо всем за советы,
а как лучше Эскизы фотографий вывести на экран уменьшенные ?
Как в проводнике например.
Использовал DBCtrlGrid но медленно выводится слишком, при совсем небольшой базе.


 
Submarine   (2004-08-27 10:20) [14]

>WondeRu ©  
С Interbase работаю более 3 лет, не разу не дохла, зря на это катить....


 
[lamer]Barmaglot ©   (2004-08-27 10:36) [15]

то widoms   (27.08.04 03:46) [9]

>Изображения склеивать в один файл ?
>Да ты крут. Ну а к примеру если мне надо удалить изображение
> или перенести в другую группу ?

Так в чем проблема? У тебя перед любой картинкой все равно должен быть заголовок (ну для комментариев, указания группы, названия изображения, ссылки на следующее изображение и т.д.) Для удаления изображения действуй как и в базах данных, ставь boolean"овский тип есть/нет, а иногда когда количество удаленных файлов превысит скажем 30% удаляй их из файла реально. Перенести в другую группу еще проще заменить один интегеровый тип в файле с одного числа на другой ( надеюсь 2 милиарда групп тебе хватит?).

>каждый имеет право на извращение!) Мне ,предположим, легче с БД
> работать чем с файлами!

Право-то ты имеешь, но толку от такой программы никакого, получится как с автосхемой у DmitryO. Вроде работал долго и идея хорошая, но вот показать никому нельзя, так как покажешь - будут смеяться...

p.s. программа должна использовать МИНИМУМ ресурсов, наличие базы данных в данном случае бестолковое расходование ресурсов.


 
WondeRu ©   (2004-08-27 10:50) [16]

widoms   (27.08.04 10:17) [13]
сам рисуй! ф-я StretchBlt


 
WondeRu ©   (2004-08-27 10:59) [17]

Submarine   (27.08.04 10:20) [14]
С Interbase работаю более 3 лет, не разу не дохла, зря на это катить....


дохнет еще как, особенно в режиме 24*7, правда в 90% случаев можно восстановить!

[lamer]Barmaglot ©   (27.08.04 10:36) [15]
наличие базы данных в данном случае бестолковое расходование ресурсов

смотря что за альбом он хочет сделать! А если на >10000 фоток?

А Автошему не трогай - эта прога преобрела статус святой! ;-)


 
[lamer]Barmaglot ©   (2004-08-27 11:25) [18]

то WondeRu ©   (27.08.04 10:59) [17]

>смотря что за альбом он хочет сделать! А если на >10000 фоток?

Представляю как будет тормозить база данных с таким количеством фотографий... А с файлами проще, поставил ограничение, скажем если превышает 500Мб, то делать следующий файл... Но главное такая программа (при правильной реализации) будет работать ОЧЕНЬ быстро в отличие от базы данных...И ей не будут страшны никакие падения (ну если винт конечно не полетит)


 
WondeRu ©   (2004-08-27 12:07) [19]

[lamer]Barmaglot ©   (27.08.04 11:25) [18]
повторяю еще раз!!! все данные (комментарии, ссылки на звуковые файлы и т.п.) о фотках хранятся в базе, а сами картинки в виде отдельных файлов!


 
wholenado ©   (2004-08-27 12:43) [20]

А зачем собственно в базе хранить всю ету тремутень....А вдруг собъется или еще что-нибудь....лучше в базе хранить предпросмотры "Thumbnail" а можно и вовсе без них...
JPEG формат позволяет включать блоки комментариев...EXIF - так ето вообще кладезь туда много пользовательской инфы запихнуть....последняя реализация BMP тоже позволяет это делать...
Не стреляйте из пушки по воробьям...а?



Страницы: 1 вся ветка

Текущий архив: 2004.11.28;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.044 c
14-1100380966
miwa
2004-11-14 00:22
2004.11.28
A EmbeddedWB есть для Delphi7?


14-1100093600
Anonimus
2004-11-10 16:33
2004.11.28
Сокеты


1-1100159363
cvg
2004-11-11 10:49
2004.11.28
Как бороться с Access violation?


1-1100192842
novice_man
2004-11-11 20:07
2004.11.28
Access violation at adress ...


1-1100660988
Bechard
2004-11-17 06:09
2004.11.28
RTL update 2 for Delphi 6 Ent