Php 在数据库中上载和存储图像的方法

Php 在数据库中上载和存储图像的方法,php,mysql,Php,Mysql,我正在创建一个db,它基本上可以处理一张音乐专辑的艺术品和它们的不同尺寸。相册艺术品由缩略图、主封面图像、缩放图像和其他类型的图像组成。大小比率方面因相册的格式而异。所以一张CD专辑的缩略图可能是50px乘以50px,但对于一盒磁带,它可能是35px乘以50px i、 e: 一张CD将包含3种或3种以上尺寸(拇指、主屏幕、缩放等)的封面插图(类型) 一张CD还将包含3种或3种以上尺寸的镶嵌CD艺术品(类型)(拇指、主、缩放等) 搜索网络,似乎有不同的方法来实现这一点 方法1: 使用带有输入

我正在创建一个db,它基本上可以处理一张音乐专辑的艺术品和它们的不同尺寸。相册艺术品由缩略图、主封面图像、缩放图像和其他类型的图像组成。大小比率方面因相册的格式而异。所以一张CD专辑的缩略图可能是50px乘以50px,但对于一盒磁带,它可能是35px乘以50px

i、 e:

  • 一张CD将包含3种或3种以上尺寸(拇指、主屏幕、缩放等)的封面插图(类型)

  • 一张CD还将包含3种或3种以上尺寸的镶嵌CD艺术品(类型)(拇指、主、缩放等)

搜索网络,似乎有不同的方法来实现这一点

方法1:

  • 使用带有输入字段的表单来输入数据
  • 有一个上传输入字段来上传图像(好质量的图像…让我们称之为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>