图片保存地址date:imagejpeg/jpeg是什么

如何保存TDBimage显示的图片到数据库中(不要通过文件途径)???
Description of your first forum.
7 篇帖子 & 分页:1 / 1
由 shangmin & 星期六, 日 17:05
保存DBimage显示的图片时我们通常的做法就是如下:
DBimage显示一副C:\aaa.jpg,我们要保存DBimage显示的图片时是通过将C:\aaa.jpg保存
到数据库中去,DBimage只不过是将C:\aaa.jpg显示出来而已,现在我想直接保存DBimage
显示的图片,不要通过保存C:\aaa.jpg文件的形式,如何实现?请各位高手指点!!!!
由 zjgo & 星期一, 日 15:20
DBimage 本身就提供存储功能呀,有datafield和datesource呀,你post的时候就直接存
入数据库了,根本就用文件方式呀
由 tongdanfeng & 星期一, 日 16:15
由 jsongy & 星期一, 日 16:20
由 liangzi2222 & 星期二, 日 18:03
难道就没有高手来看看嘛。
我也很需要这方面的资料呀。
由 zhilon & 星期二, 日 18:12
建议參考如下:
如何实现在数据库中图像的存储和显示
一、 原理介绍——流式数据的类型及其应用
在Dephi中提供了TStream来支持对流式数据的操作。TStream是万流之源,但由于它是一个抽象类,
故不能被直接使用;而要使用其相应的子类,如:TFileStream 、TStringStream、TMemoryStream、
TBlobStream、TWinSocketStream和TOleStream。TStream提供了统一、简洁的方法来进行数据的读写。
&1.)SaveToStream(Stream: TStream );
作用:将类中的数据写到Stream的当前位置中
&2.)LoadFromStream(Stream: TStream);
作用:从当前位置读入Stream里的数据
&实际使用时我们基本上只要使用上面两个函数就可以了。
二、所遇到的问题及相应的解决方法
为了节省图像的存储空间和使用更加方便,决定采用JPEG这种图像格式。
(一)所遇到的问题
第一、在Delphi 5中进行画图所用到的组件是TImage,所生成的图像的格式为BMP格式,而为了节省
图像的存储空间,图像在数据库里存储的格式须为JPEG格式,这样就产生了图像格式转化的需求;
而TImage本身并不直接提供这两种图像格式之间的转化。
第二、怎样将存储在数据库中的图像取出并且显示出来:在Delphi 5中,能提供
这种功能的组件是TDBImage,但该组件却存在着一个很大的缺陷:它所能显示的图像类型只能是一
些图标文件,元文件和BMP文件,而不能支持JPEG格式的图像在该组件中的显示;但根据实际需要,
在数据库中所存储的图像数据却是以JPEG格式保存的。
(二)相应的解决方法
为了解决上述两个问题,可以采用目前数据库中一种名为大二分对象(BLOB——Binary Large Object),
它是用来处理某些特殊格式的数据的。BLOB在数据库的表中实际上是以二进制数据的形式存放的。
为了处理BLOB字段,可以借鉴一些可视的桌面数据库的方法。在这里,我们选择了通过内存流的方式来
完成;使用内存流,可减少磁盘操作,大大提高运行效率。
具体的过程和相关的程序代码如下:
1、如何实现在数据库中的图像存储:
这里是利用TStream的子类TMemoryStream向数据库中存储图像的。下面的这段代码是
在按了“保存”按钮之后所触发的事件处理程序:
procedure TForm1.Button1Click(Sender: TObject);
MyJPEG : TJPEGI
MS: TMemoryS
MyJPEG := TJPEGImage.C
& &with MyJPEG do
& & &Assign(Image.Picture.Graphic);
& & &MS:=TMemoryStream.
& & &SaveToStream(MS);
& & &MS.Position:=0;
& & & & & & & &Table1.E
& & & & & & & & TBlobField(Table1.FieldbyName('Image')).LoadFromStream(MS);
& & & & & & & & Table1.P
& & & & & & & & messagebox(getactivewindow(),'图像保存完毕!','保存',mb_ok); & & & & &
& &MyJPEG.F
在这段代码里TStream的子类TMemoryStream利用内存流起到了将BMP格式转化为JPEG格式的中间桥梁的作用。
2、如何将图像从数据库中取出并显示出来:
下面的这段代码是在按了“查看图像”按钮之后所触发的事件处理程序:
procedure TForm1.Button1Click(Sender: TObject);
var tempstream:TStringS
& tempjpeg:TJPEGI
& & & &tempstream:=TStringStream.Create(' '); & &
& & & &TBlobField(Query1.FieldByName('Image')).SaveToStream(tempstream); & & & & & &
& & & &tempstream.Position:=0;
& & & &tempjpeg:=TJPEGImage.C
& & & &tempjpeg.LoadFromStream(tempstream);
& & & &DBImage1.Picture.Bitmap.Assign(tempjpeg);
& & & &tempstream.F
& & & &tempjpeg.F
这段代码的主要作用是:首先将查询结果中的JPEG图像格式数据保存到TStringStream中去,然后设置数据
指针在TStringStream中的位置为0;接着从TStringStream中读入相关数据,并把它们赋给
TDBImage.Picture.Bitmap,这样一来就实现了将数据库中所存储的JPEG格式的数据转化为BMP格式,
并在TDBImage中将图像显示出来。最后将TStringStream和TJPEGImage这两个对象释放掉。特别要注意的
是不能在设计阶段设置TDBImage的DataField属性,而只能通过写代码的形式在运行阶段把利用流式数据所
转化过来的新格式的图像数据赋给TDBImage.Picture.Bitmap。
由 app2001 & 星期三, 日 13:27
一个利用TBlobStream在数据库中保存BMP和JPG图片的例子,可同时支持这两种格式的图片
/6to23/Docu/BlobStream.zip
7 篇帖子 & 分页:1 / 1图片处理_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
上传于||暂无简介
阅读已结束,如果下载本文需要使用2下载券
想免费下载本文?
下载文档到电脑,查找使用更方便
还剩5页未读,继续阅读
你可能喜欢这里来看看php中如何上传图片的
先看代码check_image.php
&title&&/title&
&style type="text/css"&&/style&
&form action="check_image.php" method="post" enctype="multipart/form-data"&
&td&Your username&/td&
&td&&input type="text" name="username" /&&/td&
&td&Upload image*&/td&
&td&&input type="file" name="uploadfile"/&&/td&
&td colspan="2"&
&small&&em& * Acceptable image formats include: GIF, JPG/JPEG and PNG.&/em&&/small&
&td&Image Caption&/td&
&td&&input type="text" name="caption"/&&/td&
&td colspan="2" style="text-align:"&
&input type="submit" name="submit" value="Upload" /&
这里没什么可以说的,都是常见的html标签。
下面看看上传的代码check_image.php,重要的地方都做了注释,整个过程是先根据那个&input type="file" name="uploadfile"/&指定的图片路径来创建一个图片文件,然后再通过指定的上传路径生成这个图片。
$db = mysql_connect('localhost','root','Ctrip') or die('can not connect to database');
mysql_select_db('moviesite',$db) or die(mysql_error($db));
//上传文件的路径
$dir = 'D:\Serious\phpdev\test\images';
$_FILES:用在当需要上传二进制文件的地方,获得该文件的相关信息
$_FILES['userfile']['name'] 客户端机器文件的原名称。
$_FILES['userfile']['type'] 文件的 MIME 类型,需要浏览器提供该信息的支持,例如&image/gif&
$_FILES['userfile']['size'] 已上传文件的大小,单位为字节
$_FILES['userfile']['tmp_name'] 文件被上传后在服务端储存的临时文件名,注意不要写成了$_FILES['userfile']['temp_name']很容易写错的,虽然tmp就是代表临时的意思,但是这里用的缩写
$_FILES['userfile']['error'] 和该文件上传相关的错误代码。['error']
if($_FILES['uploadfile']['error'] != UPLOAD_ERR_OK)
switch($_FILES['uploadfile']['error'])
case UPLOAD_ERR_INI_SIZE: //其值为 1,上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值
die('The upload file exceeds the upload_max_filesize directive in php.ini');
case UPLOAD_ERR_FORM_SIZE: //其值为 2,上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值
die('The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form.');
case UPLOAD_ERR_PARTIAL: //其值为 3,文件只有部分被上传
die('The uploaded file was only partially uploaded.');
case UPLOAD_ERR_NO_FILE: //其值为 4,没有文件被上传
die('No file was uploaded.');
case UPLOAD_ERR_NO_TMP_DIR: //其值为 6,找不到临时文件夹
die('The server is missing a temporary folder.');
case UPLOAD_ERR_CANT_WRITE: //其值为 7,文件写入失败
die('The server failed to write the uploaded file to disk.');
case UPLOAD_ERR_EXTENSION: //其他异常
die('File upload stopped by extension.');
$image_caption = $_POST['caption'];
$image_username = $_POST['username'];
$image_date = date('Y-m-D');
/*getimagesize方法返回一个数组,
$width : 索引 0 包含图像宽度的像素值,
$height : 索引 1 包含图像高度的像素值,
$type : 索引 2 是图像类型的标记:
1 = GIF,2 = JPG, 3 = PNG, 4 = SWF, 5 = PSD, 6 = BMP,
7 = TIFF(intel byte order),8 = TIFF(motorola byte order),
9 = JPC,10 = JP2,11 = JPX,12 = JB2,13 = SWC,14 = IFF,15 = WBMP,16 = XBM,
$attr : 索引 3 是文本字符串,内容为&height="yyy" width="xxx"&,可直接用于 IMG 标记
list($width,$height,$type,$attr) = getimagesize($_FILES['uploadfile']['tmp_name']);
//imagecreatefromgXXX方法从一个url路径中创建一个新的图片
switch($type)
case IMAGETYPE_GIF:
$image = imagecreatefromgif($_FILES['uploadfile']['tmp_name']) or die('The file you upload was not supported filetype');
$ext = '.gif';
case IMAGETYPE_JPEG:
$image = imagecreatefromjpeg($_FILES['uploadfile']['tmp_name']) or die('The file you upload was not supported filetype');
$ext = '.jpg';
case IMAGETYPE_PNG:
$image = imagecreatefrompng($_FILES['uploadfile']['tmp_name']) or die('The file you upload was not supported filetype');
$ext = '.png';
die('The file you uploaded was not a supported filetype.');
$query = 'insert into images(image_caption,image_username,image_date) values ("'.$image_caption.'","'.$image_username.'",now())';
mysql_query($query , $db) or die(mysql_error($db));
$last_id = mysql_insert_id();
//用写入的id作为图片的名字,避免同名的文件存放在同一目录中
$imagename = $last_id.$ext;
$query = 'update images set image_filename="'.$imagename.'" where image_id='.$last_id;
mysql_query($query , $db) or die(mysql_error($db));
//有url指定的图片创建图片并保存到指定目录
switch($type)
case IMAGETYPE_GIF:
imagegif($image,$dir.'/'.$imagename);
case IMAGETYPE_JPEG:
imagejpeg($image,$dir.'/'.$imagename);
case IMAGETYPE_PNG:
imagepng($image,$dir.'/'.$imagename);
//销毁由url生成的图片
imagedestroy($image);
&title&&/title&
&h1&So how does it feel to be famous&/h1&
&p&Here is the picture you just upload to servers&/p&
&img src="images/&?php echo $imagename;?&" alt="upload image" /&
&td&Image save as:&/td&&td&&?php echo $imagename?&&/td&
&td&Image type:&/td&&td&&?php echo $ext?&&/td&
&td&Height:&/td&&td&&?php echo $height?&&/td&
&td&Width:&/td&&td&&?php echo $width?&&/td&
&td&Upload date:&/td&&td&&?php echo $image_date?&&/td&
最后写道数据库中的信息如下:
在upload_image.php这个页面中同图片file控件使用户可以通过浏览自己的本地文件选择要上传的文件,其次还要对form的enctype属性进行设置,这里需要上传文件所以在发送到服务器之前不对表单数据进行编码,需要将值设置成mulitpart/form-data,还要注意这里method属性应该设置成post,如果设置成get的话,不能正常地上传文件。
在check_image.php这个页面中则需要检查文件类型,然后将文件信息写入到数据库中,最后在指定的路径中写入文件并输出文件信息,如果不符合类型或者写入的过程中有错误则会输出错误并跳出程序,输出错误信息。
php中使用$_FILES数组来存储上传的文件信息,这个数组是多维的,第一维的KEY是上传控件的name属性值,如果在一个页面中有多个上传控件的话可以使用不同的KEY值来区分它,第二维参数名字及含义如下:
& &name:在本地的文件名字& &type:图片文件的扩展名字& &size:图片文件的大小以byte来计算& &tmp_name:在上传到的新的目录上的文件名字& &error:上传过程中出现的错误在上传到目录之前文件以一种临时文件的形式出现,上传完之后一定要销毁这个临时文件。
type属性是要上传文件的扩展名字,例如:image/jpg,image/gif,记住这个名字是通过浏览器来获得的,可能不正确,不怀好意的用户可能会伪造这个文件扩展名。
size属性表示要上传文件的大小,它是以byte来计算,
error属性来告诉客户端上传过程中的一些错误代码,通过这些代码将能编写出更加健壮的程序,error的枚举值如下:
UPLOAD_ERR_OK:文件上传成功UPLOAD_ERR_INI:上传文件超过php.ini文件中规定最大上传文件大小UPLOAD_ERR_FORM_SIZE:上传文件超过HTML文件中规定的文件上传大小限制UPLOAD_ERR_PARTIAL:上传的文件不完整UPLOAD_ERR_NO_FILE:在中没有指定临时文件夹UPLOAD_ERR_CANT_WRITE:文件夹没有写入权限,php不能写入UPLOAD_ERR_EXTENSION:上传文件被php中断
很多地方可以对上传文件进行限制,当上传文件大小超过php.ini中文件大小的时候将返回UPLOAD_ERR_INI值,默认情况下这个值是2M,如下:
upload_max_filesize = 2M如果要修改这个值,可能还需要同时修改&post_max_size这个,upload_max_filesize限制上传文件的大小,post_max_size限制整个post数据大小,所以如果upload_max_filesize大于post_max_size,上传也可能失败,所以这两个值的关系应该是post_max_size大于upload_max_filesize。
当文件大小大于html页面中一个特定的隐藏域设置大小的时候将返回UPLOAD_ERR_FORM_SIZE,这个隐藏域的设置如下:&input type=&hidden& name=&MAX_FILE_SIZE& &value=&262144&/&&input type=&file& name=&uploadfile&/&
&要注意的是这个隐藏域的位置应该在上传控件之上。这个值不一定有用,不怀好意的人可能在上传过程中修改文件的大小信息进而蒙骗服务器。正常情况下这个值还是有用的,可以用它来显示文件大小超过限制的信息。
当文件上载成功之后,getimagesize()方法可以返回一个5个元素的数组,用来获取文件的信息,例如:
下标为0的元素:图片的宽度下标为1的元素:图片的高度下标为2的元素:一个枚举,表示图片的类型下标为3的元素:一个字符串类似于height=& yyy & & width=& xxx &下标为4的元素:文件的扩展名称,简单说还是文件的类型
&确定图片类型之后,将文件读入内存,imagecreatefrom*()方法打开文件并返回句柄,记住文件是首先放到一个临时的文件夹中,然后再写入到最终路径中,最后销毁,通常是使用&move_uploaded_file() 方法来实现的,第一个参数是要文件名字,第二个参数是文件上传的路径,如果文件类型是非法的话imagecreatefrom*()方法会返回错误。
同时根据文件类型制定文件扩展,如果上传的文件不再指定的范围内,将返回信息The file you uploaded was not a supported filetype。如果一切进行的顺利的话,将文件信息写入倒数据库中。
最后imagegif() , & &imagejpeg() , imagepng() 这类方法将文件通过$image方法得到的结果写入到指定的文件名中,imagejpeg()方法有第三个参数,这个参数将会影响图片的质量,100表示最小的压缩比例,质量也是最好的,同理0质量是最差的。
imagedestroy()方法将$image方法占用的内存资源释放掉,php会自动释放掉这些资源,但是如果手动释放表示我们有一个好的习惯。最后将上传的文件显示在页面中,表示已经上传成功。
阅读(...) 评论()
作者:Tyler Ning
出处:/tylerdonet
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。  在安装Ecshop的时候,遇到两个问题:
  1.Strict Standards: Non-static method cls_image::gd_version() should not be called statically in&D:\X\www\ecshop\install\includes\lib_installer.php&on line&31
  解决:找到install/includes/lib_installer.php中的第31行&& return cls_image::gd_version();然后在找到include/cls_image.php中的678行,发现gd_version()方法未声明静态static,所以会出错。这时候只要:
  1)将function gd_version()改成static function gd_version()即可。
  2)或者将install/includes/lib_installer.php中的第31行return cls_image::gd_version();改成:
$p = new cls_image();
return $p-&gd_version();
  2.检测环境的时候提示:是否支持 JPEG是不支持的。
  解决:查看发现有libjpeg.lib库,GD2库也有,都加载了,也都正常。查看ecshop源代码发现install/includes/lib_installer.php中第100行,JPEG写成了JPG,正确的应该是:
$jpeg_enabled = ($gd_info['JPEG Support']
=== true) ? $_LANG['support'] : $_LANG['not_support'];
  为何说Ecshop写错了,因为我打印数组$gd_info的时候,里面的键名是:JPEG Support。而$gd_info数组里的值都是直接调用系统环境变量的。
  3.默认时区问题:Warning: date_default_timezone_get(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in&D:\X\www\ecshop\install\includes\lib_installer.php&on line&225
  解决:方法1,将php.ini里是date.timezone前的";"去掉,改成:date.timezone = PRC;
  方法2,在页头使用 ini_set('date.timezone','Asia/Shanghai');
  方法3,在页头使用date_default_timezone_set()设置 date_default_timezone_set('PRC'); //东八时区 echo date('Y-m-d H:i:s');
阅读(...) 评论()

我要回帖

更多关于 imagejpeg 的文章

 

随机推荐