Lazarus中文社区

 找回密码
 立即注册(注册审核可向QQ群索取)

QQ登录

只需一步,快速开始

Lazarus IDE and 组件 下载地址版权申明
查看: 4624|回复: 7

如何在ubuntu下面将图片以二进制形式存如数据库

[复制链接]

该用户从未签到

发表于 2011-6-2 11:38:20 | 显示全部楼层 |阅读模式
如何在ubuntu下面将图片以二进制形式存如数据库?我查了几种方法都不行,
回复

使用道具 举报

该用户从未签到

发表于 2011-6-10 16:00:52 | 显示全部楼层
当然可以!
  1:用什么数据库 2.用什么组件来完成
这些问题请说明白一点,让大家才好回答!
回复 支持 反对

使用道具 举报

该用户从未签到

 楼主| 发表于 2011-6-10 17:30:19 | 显示全部楼层

回 1楼(gbm_pgs) 的帖子

mysql   lazarus自带的组件
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2011-6-11 06:08:34 | 显示全部楼层
mysql 对应的是blob 或longblob类型的字段:下面都是经过测试成功的!
如:建表 create table test ( id int not null Primary Key,pic longblob null);
procedure SaveTODB;
var
  Stream: TStream;
  FileName:string;
begin
  FileName:='/home/pgs/桌面/home-main.png';
  Stream:=TFileStream.Create(FileName,fmOpenRead);
  try
      SQLQuery1.Append;
      SQLQuery1.FieldByName('id').AsInteger:=1;
      TBlobField(SQLQuery1.FieldByName('pic ')).LoadFromStream(Stream);
      SQLQuery1.Post;
      SQLQuery1.ApplyUpdates;
  finally
      Stream.Free;
  end;
  showmessage('append ok');
end;

procedure  SaveToFile;
begin
    TBlobField(SQLQuery1.FieldByName(pic)).SaveToFile('/home/pgs/new.png');
end;
回复 支持 反对

使用道具 举报

该用户从未签到

 楼主| 发表于 2011-6-13 15:49:31 | 显示全部楼层

回 3楼(gbm_pgs) 的帖子

TBlobField(SQLQuery1.FieldByName('pic ')).LoadFromStream(Stream);  
这个TBlobField我为什么不能使用,这个是个函数还是个组件呀
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2011-6-14 19:03:51 | 显示全部楼层
是一个类!
uses db;
回复 支持 反对

使用道具 举报

该用户从未签到

 楼主| 发表于 2011-6-15 09:48:45 | 显示全部楼层
linux下面也可以引用吧,
回复 支持 反对

使用道具 举报

该用户从未签到

 楼主| 发表于 2011-6-15 17:55:26 | 显示全部楼层
终于搞定了,肯能写的不是很好,但还是可以用的
图片以二进制形式存入数据库中

procedure Tf_userreg.BitBtn2Click(Sender: TObject);
var
   stream1:TMemoryStream;
begin
   stream1:=TMemoryStream.Create;  //激活stream1
   stream1.LoadFromFile(OpenPictureDialog1.FileName);  //从当前位置读入stream1里的数据
  if (edit1.Text<>'') and (edit2.Text<>'') and (combobox1.Text<>'')
  and (edit7.Text<>'') and (dateedit1.Text<>'') and (edit3.Text<>'') then
    begin
      DataModule1.SQLQueryjbxx['bianhao']:=edit1.text;
      DataModule1.SQLQueryjbxx['xingming']:=edit2.text;
      DataModule1.SQLQueryjbxx['xingbie']:=combobox1.text;
      DataModule1.SQLQueryjbxx['minzu']:=edit7.text;
      DataModule1.SQLQueryjbxx['xueli']:=combobox3.text;
      DataModule1.SQLQueryjbxx['zhengzhimm']:=combobox4.text;
      DataModule1.SQLQueryjbxx['chushengrq']:=dateedit1.text;
      DataModule1.SQLQueryjbxx['dianhua']:=edit3.text;
      DataModule1.SQLQueryjbxx['xuexiao']:=edit4.text;
      DataModule1.SQLQueryjbxx['bumen']:=edit5.text;
      DataModule1.SQLQueryjbxx['zhiwu']:=edit6.text;
      TBlobField(DataModule1.SQLQueryjbxx.FieldByName('zhaopian')).LoadFromStream(stream1); //将当前位置图片转换成BLOB类型,存入数据库,                     

                                                                                            //注意如果不能使用TBobField,要uses db

      DataModule1.SQLQueryjbxx['gongzuojingli']:=memo1.text;
      //DataModule1.SQLTransaction.Commit;

      DataModule1.SQLQueryjbxx.post;
      DataModule1.SQLQueryjbxx.Refresh;
      Self.ModalResult:=mryes;
    end
  else
    showmessage('您输入的信息不完全请重新输入!');
end;

以上是数据库添加过程,sqlqueryjbxx已经append了,大家在自己写的时候要注意。


procedure Tf_userreg.BitBtn1Click(Sender: TObject);
begin
  OpenPictureDialog1.Title:='添加照片';
  OpenPictureDialog1.Filter:='图片文件(*.bmp;*.jpg;*.png)|*.bmp;*.jpg;*.png';
  if OpenPictureDialog1.Execute then
  begin
    image1.Picture.LoadFromFile(OpenPictureDialog1.FileName);
  end;
end;


数据库中二进制图片显示

                       
procedure TFormshow.FormShow(Sender: TObject);
var
   tempstream:TStringStream;
   tempjpeg:TJPEGImage;
begin
   try
     tempstream:=TStringStream.Create('');
     TBlobField(DataModule1.SQLQueryjbxx.FieldByName('zhaopian')).SaveToStream(tempstream);  //将类中的数据写到tempstream中,
     tempstream.Position:=0;
     tempjpeg:=TJPEGImage.Create;
     tempjpeg.LoadFromStream(tempstream);
     Image1.Picture.Bitmap.Assign(tempjpeg);
   finally
     tempstream.Free;
     tempjpeg.Free;
   end;      
这段代码的主要作用时:首先将查询结果中的JPEG图像格式数据保存到tstringstream中去,然后设置数据指针在tstringstream中的位置为0;接着从tstringstream中读入相关数

据,并把它们赋给image1.picture.bitmap,这样以来就实现了将数据库中所存储的JPEG格式的数据转化为BMP格式,并在image中将图像显示出来,最后将tstringstream和

tempjpeg这两个对象释放掉,要注意的是不能在设计阶段设置image的datafield属性,而只能通过写代码的形式在运行阶段把利用流式数据所转化过来的新格式图像数据赋给

image.picture.bitmap。
回复 支持 反对

使用道具 举报

*滑块验证:

本版积分规则

QQ|手机版|小黑屋|Lazarus中国|Lazarus中文社区 ( 鄂ICP备16006501号-1 )

GMT+8, 2025-5-2 20:52 , Processed in 0.027723 second(s), 10 queries , Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表