0

我们有一个定制的 CMS,它允许上传图片。在 CMS 中,我们实现 了 jCrop。裁剪图像时(在 PHP 中使用 GD),我们将原始图像名称和裁剪图像名称存储在数据库(MySQL)中,以及服务器上的原始图像和裁剪图像。

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

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

最近我们一直在想如何改进我们的裁剪工作流程。从长远来看,仅在数据库中存储作物坐标的方法是否可行?处理作物的常用方法是什么?

提前致谢!

4

2 回答 2

4

我会使用这种方法:

  • 上传一张图片。为其分配一个唯一的 ID(即名称的 MD5 散列)。
  • 让用户裁剪它,只在数据库中存储坐标和图像名称
  • 存储裁剪的图像,给它一个文件名,例如由原始文件名加上裁剪的坐标。

通过这种方式,您将能够仅通过知道它的原始名称和裁剪的坐标来检索裁剪的图像。此外,不会存储任何作物的精确副本。

例子:

md5('image.jpg' . $crop->x0 . $crop->x1 . $crop->y0 . $crop->y1);
于 2013-11-10T13:40:03.813 回答
0

从长远来看,仅在数据库中存储作物坐标的方法是否可行?

如果你的意思是每次请求图片时你也会进行裁剪。这会给您的服务器(每次实时进行实际裁剪)和客户端(因为不会缓存这些动态生成的裁剪图像,除非您在整体上实现它)都增加了不必要的负载事物)。

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

也许更好的方法是 Facebook 在某些地方所做的:与其将图像裁剪为服务器端的方形图像,不如让客户端加载非方形版本 - 然后让客户端通过简单地进行“裁剪”将图像显示为方形元素内的定位背景图像……</p>

于 2013-11-10T13:44:29.563 回答