【发布时间】:2010-05-29 05:09:12
【问题描述】:
我将图像直接存储在 mysql Db 中。使用 php 以高质量(缩略图和原始大小的图像)显示图像的最佳方式是什么。
【问题讨论】:
我将图像直接存储在 mysql Db 中。使用 php 以高质量(缩略图和原始大小的图像)显示图像的最佳方式是什么。
【问题讨论】:
那么,您将图像文件的二进制内容存储在数据库中(可能是 BLOB 字段),对吧?
显示原始大小的图像不是什么大问题,我希望您已经将原始图像的文件名/文件扩展名(或至少 mime 类型)与二进制数据一起存储。
如果你表images e。 G。包含两个,content 保存二进制数据,file_name 保存存储图像的文件名和文件扩展名,你可以这样想代码:
$res = mysql_query("select * from images");
while($row = mysql_fetch_assoc($res)) {
$pathname = 'some/path/' . $row['file_name'];
file_put_contents($pathname, $row['content']);
}
这样做是从images 表中选择所有条目,并将二进制内容从数据库写入以原始图像命名的输出文件。考虑在写入输出文件后设置[chmod][1],具体取决于您的服务器设置。
如果您没有可用的文件名属性,那么您必须生成一些随机名称(也许使用md5($row['content'])?虽然可能会很慢。)。但你需要原始文件扩展名或存储图像的mime类型,否则不容易找出图像是abc.JPG或abc.PNG或abc.GIF等。
如果some/path/ 在您的文档根文件夹中,您现在可以使用http://www.domain.com/some/path/XYZ.jpg 访问您创建的图像(例如XYZ.jpg)。
将原始图像存储在磁盘上,创建缩略图很容易。我衷心推荐Imagemagick(检查是否安装在您的服务器上),但您也可以使用与PHP 捆绑在一起并且很可能可用的PHP GDLib 滚动您自己的缩略图脚本。已经有大量依赖于 Imagemagick 和/或 GDLib 的 PHP 预建缩略图脚本。我还没有尝试过,但听说过关于phpThumb() 的好消息。
最后一句话:您可能自己也注意到了,将图像以二进制形式存储在数据库中并不是一个好主意。当然,如果应用程序已经构建并且您必须按照它们的方式处理事物,那么您没有选择的余地。但在性能方面,最好将图像路径名与一些元数据(如文件大小、宽度、高度等)一起存储在数据库中,保持数据库大小和用于快速处理结果集的 select/php 代码。
【讨论】:
使用 php 以高质量显示图像(缩略图和原始大小的图像)的最佳方法是将原始图像和缩略图存储在文件系统中,然后生成一个 <img> 标记来显示它。
【讨论】: