【问题标题】:Fastest way to extract a crop from a JPEG file on demand?按需从 JPEG 文件中提取裁剪的最快方法?
【发布时间】:2015-09-25 11:58:04
【问题描述】:

我网站上的用户可以点击照片的一部分来获得特写。

我目前有一些 JavaScript 可以触发对 PHP 脚本的 AJAX 调用,该脚本使用 ImageMagick 来检索相关裁剪。

我可以在 PHP 之外做得更好吗?以某种方式直接使用 ImageMagick,还是其他方式?

目前这些文件与主网站位于同一服务器上,但由于空间限制,我正在将它们移动到单独的服务器上,因此需要以某种方式在两者之间进行调用。

照片大小不一,有些是 1600x1200,只有 200KB,有些是 24MP+ 20MB+ 原件。

【问题讨论】:

  • 比强迫你的服务器做硬图像处理让它到客户端(JS)要好。检查画布 html5 + js 裁剪:tympanus.net/codrops/2014/10/30/resizing-cropping-images-canvas
  • 向客户端发送一个 20MB 的文件似乎不是很好的用户体验...
  • 我不确定,但如果用户可以点击照片的一部分,这意味着他是通过 http 请求获得的。这意味着(我认为),用户获取图片,选择裁剪选项,服务器采用该选项并裁剪它加载图片以进行处理。因此,最好强制客户端裁剪并上传完成的裁剪,而不是由您的服务器执行。随你喜欢
  • 他们可以看到的初始照片是低分辨率带宽友好的 1024px 版本,而不是完整文件。

标签: php imagemagick jpeg crop


【解决方案1】:

使用 ImageMagick,您有两种选择:

  1. 在加载时裁剪图像。然后最初加载的是裁剪图像。
  2. 加载图像,然后对其进行裁剪。最初加载的是完整图像。

第一种方法效率更高,速度更快。

此方法是将图像区域信息附加到输入图像中,并放在方括号 ([...]) 中,如下所示:

convert wizard:[130x150+80+80] -resize 200% wiz-head.png

这将裁剪一块130x150 像素,距原始内置wizard: 图像的左上角偏移80 像素。这是两个并排的图像,wizard:(左)和裁剪后的部分,调整了 200%:

如果你想裁剪 JPEG,你会使用类似的东西:

   convert some.jpeg[330x250+180+280] -resize 300% output.png

【讨论】:

  • 谢谢。在 PHP 脚本中使用它的最佳方法是什么?我应该使用php.net/manual/en/book.imagick.php,还是可以像您的示例一样使用直接命令行访问 IM 来加快速度?
  • @Codemonkey:抱歉——那个问题我没有能力回答。如果我是你,我会在你的环境中设计并运行一些基准测试并测试图像,然后再决定。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-26
  • 2011-04-18
  • 2012-02-03
  • 1970-01-01
  • 1970-01-01
  • 2014-05-12
相关资源
最近更新 更多