存储图像作物的方法

时间:2013-11-10 13:31:21

标签: php mysql crop jcrop

我们有一个自定义的CMS,可以上传图片。在我们已经实施的CMS中 jCrop。在裁剪图像时(使用PHP中的GD),我们将原始图像名称和裁剪图像名称存储在数据库(MySQL)中,以及服务器上的原始图像和裁剪图像。

当我们需要替代裁剪时,我们使用PHP创建裁剪图像的另一个裁剪(并将其保存到服务器)。因为这样的图像现在已经被GD处理了两次,结果通常看起来很糟糕。

可能的用例:在CMS中我们管理人员。每个人都可以拥有一张图片。由于人们通常以纵向模式显示,我们让用户以纵向进行裁剪。在网站上这很好,但在移动网站上,我们实际上需要一个方形图像。因此我们需要两种作物。

最近我们一直想知道如何改善我们的作物工作流程。仅在数据库中存储作物坐标的方法是否可以长期使用?处理作物的常用方法是什么?

提前致谢!

2 个答案:

答案 0 :(得分:3)

我会用这种方法:

  • 上传图片。为其分配唯一ID(即名称的MD5哈希值)。
  • 让用户裁剪它,只在db
  • 中存储坐标和图像名称
  • 存储裁剪后的图像,为其指定一个文件名,例如原始文件名和作物坐标。

通过这种方式,您只能通过了解裁剪图像的原始名称和裁剪坐标来检索裁剪后的图像。此外,不会存储任何作物的精确副本。

示例:

md5('image.jpg' . $crop->x0 . $crop->x1 . $crop->y0 . $crop->y1);

答案 1 :(得分:0)

  

仅在数据库中存储作物坐标的方法是否可以长期工作?

如果您的意思是,那么每次请求图片时您也会进行裁剪。这会给您的服务器(每次都在实时进行实际裁剪)和客户端上带来不必要的负担(因为这些动态生成的裁剪图像不会缓存,除非您在整体上实现这一点)的东西)。

  

由于人们通常以纵向模式显示,我们让用户以纵向裁剪。在网站上这很好,但在移动网站上,我们实际上需要一个方形图像。因此我们需要两种作物。

也许更好的方法就是f.e. Facebook确实在某些地方:不是将图像裁剪为方形服务器端,而是让客户端加载非方形版本 - 然后让客户端通过简单地将图像显示为定位的背景图像来进行“裁剪”在一个方形元素内...