Php 在数据库中上载和存储图像的方法
我正在创建一个db,它基本上可以处理一张音乐专辑的艺术品和它们的不同尺寸。相册艺术品由缩略图、主封面图像、缩放图像和其他类型的图像组成。大小比率方面因相册的格式而异。所以一张CD专辑的缩略图可能是50px乘以50px,但对于一盒磁带,它可能是35px乘以50px i、 e:Php 在数据库中上载和存储图像的方法,php,mysql,Php,Mysql,我正在创建一个db,它基本上可以处理一张音乐专辑的艺术品和它们的不同尺寸。相册艺术品由缩略图、主封面图像、缩放图像和其他类型的图像组成。大小比率方面因相册的格式而异。所以一张CD专辑的缩略图可能是50px乘以50px,但对于一盒磁带,它可能是35px乘以50px i、 e: 一张CD将包含3种或3种以上尺寸(拇指、主屏幕、缩放等)的封面插图(类型) 一张CD还将包含3种或3种以上尺寸的镶嵌CD艺术品(类型)(拇指、主、缩放等) 搜索网络,似乎有不同的方法来实现这一点 方法1: 使用带有输入
- 一张CD将包含3种或3种以上尺寸(拇指、主屏幕、缩放等)的封面插图(类型)
- 一张CD还将包含3种或3种以上尺寸的镶嵌CD艺术品(类型)(拇指、主、缩放等)
- 使用带有输入字段的表单来输入数据
- 有一个上传输入字段来上传图像(好质量的图像…让我们称之为imageX),该图像将用于创建不同的大小
- 验证imageX是否可接受(尺寸、类型等)
- 现场创建不同的大小,并在数据库中为创建的每个大小添加一条记录。每个记录都包含大小(宽度和高度)和文件名
artworktype
==========
artworktype_id, artworktype
artworksize
==========
artworksize_id, artworksize
artwork
==========
artwork_id, album_id, artworktype_id, artworksize_id, filename, filenamewidth, filenameheight
artworktype
==========
artworktype_id, artworktype
artwork
==========
artwork_id, album_id, artworktype_id, filename
优点:
包括宽度和高度(无需启动PHP的imagegetsize即可获得大小)
缺点:
冗余数据
方法2:
- 使用带有输入字段的表单来输入数据
- 有一个上传输入字段来上传图像(好质量的图像…让我们称之为imageX),该图像将用于创建不同的大小
- 验证imageX是否可接受(尺寸、类型等)
- 当场创建不同的大小,并将它们相应地移动到文件系统(命名约定待定)
- 在数据库中仅为上载的文件创建记录
- 让PHP确定大小,并使用名称约定获得其他大小
artworktype
==========
artworktype_id, artworktype
artworksize
==========
artworksize_id, artworksize
artwork
==========
artwork_id, album_id, artworktype_id, artworksize_id, filename, filenamewidth, filenameheight
artworktype
==========
artworktype_id, artworktype
artwork
==========
artwork_id, album_id, artworktype_id, filename
优点:
没有冗余
缺点:
需要PHP的getimagesize函数来获取大小。对于图像来说,这是可以接受的。但是,对于许多图像(比如一批缩略图),这可能会给服务器带来压力
有没有达到这个目标的标准?其他人是怎么做的?有什么意见吗
已编辑:
我不喜欢数据库中的二进制数据。。。因此,这个选项是不可能的…为此使用
blob
。我做过类似的申请。查看我的代码:
PHP代码:
数据库转储将是:
HTML代码:
请参见此链接;我会使用方法一来获得最佳的用户体验和更低的服务器负载。如果我必须使用方法2,我可能不会使用getimagesize
将没有大小的图像发送到浏览器。使用方法2,并将图片命名为{w}x{h}{id}.jpg
[或.png或其他,所以你不需要调用任何函数。moonwave99:我不确定文件名中的大小是个好主意还是一场即将发生的灾难…对不起,我忘了提到,我不喜欢数据库中的二进制数据…所以基本上,方法2是你的选择(没有二进制数据)嗯…是的,为什么?有什么问题吗?
<form method="post" enctype="multipart/form-data">
<input name="image" accept="image/jpeg, image/png, image/gif" type="file">
<input value="Submit" type="submit">
</form>