【问题标题】:Approach for storing image crops存储图像裁剪的方法
【发布时间】:2013-11-22 07:21:17
【问题描述】:

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

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

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

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

提前致谢!

【问题讨论】:

  • 您提到您保留了上传的原始图片。为什么不每次都将其用作作物来源?
  • 感谢您的回答。因为用户可能会从大图像中裁剪右上部分。如果我们从中心创建自动裁剪,则原始图像中真正重要的部分将不会显示,

标签: php mysql crop jcrop


【解决方案1】:

我会使用这种方法:

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

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

例子:

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

【讨论】:

  • 感谢您的回答。你将如何处理额外的作物?因此,如果第一个裁剪是 200 x 300。你将如何处理另一个裁剪,比如 200 x 200?
  • 我会在数据库中存储一个新的作物,带有新的图像。除非您定义一组特定的可用裁剪,否则您无法判断用户将如何裁剪您的图像。
  • 感谢您的回答。如果不能让用户创建另一种作物怎么办?就像上面提到的情况一样,一张图片同时用于普通网站和移动网站,但图片大小不同?
  • 如果您可以定义可用作物的列表并坚持下去,我会在重新缩放到所有作物的最小可行尺寸后,通过获取图像的中心部分来自动化它。用户没有裁剪的可能性,只有自动裁剪。
【解决方案2】:

仅将作物坐标存储在数据库中的方法会长期有效吗?

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

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

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

【讨论】:

  • 感谢您的回答。我们目前还在动态创建缓存裁剪图像。一旦它被创建,我们就不必再次创建它,所以这不会是一个问题。有趣的想法是隐藏图像的一部分,但这意味着下载更多实际使用的图像,这当然在移动设备上远非理想。
  • Facebook 也进行即时裁剪:https://fbcdn-profile-a.akamaihd.net/hprofile-ak-prn1/c33.33.414.414/s160x160/1012777_10151766575129009_1544383854_n.png c33.33.414.414 部分表示裁剪坐标,s160x160 部分告诉它返回 160x160 平方图像。如果您从地址中删除c33.33.414.414/s160x160/,您将获得原始图像。它们还存储每个图像的一些默认裁剪版本,如果您将尾随 _n 替换为 _s,您将获得默认的方形裁剪版本。 :)
  • “Facebook 也进行即时裁剪”——我没有说他们根本没有使用它。但是对于您提到的图像 URL,我想他们至少会实现正确的 HTTP 缓存。
  • 是的,我知道,我发表评论只是为了添加更多关于他们裁剪事物方式的信息...... :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-05-12
  • 1970-01-01
  • 1970-01-01
  • 2017-05-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多