【发布时间】:2020-07-14 15:04:31
【问题描述】:
故事
我想要完成的任务概述:我有一些照片需要裁剪和调整大小,一次用于缩略图视图(大约 295x195),一次用于“标题图像”样式视图(大约 1400x560)。原始照片大小不一,最大的约为 2440x1600。这不是要解决的问题。
但是,图像不应使用“北”或“中心”重力进行裁剪,而应具有已定义的中心位置,即
图像应该被裁剪。为此,图像具有以百分比表示中心点的x 和y 值; x=50,y=50 意味着
图像的焦点实际上在中间。
我在这里和 imagemagick 论坛上进行了搜索,但找不到任何合适的东西,除了“切断图像的某个部分然后调整它的大小”。 我不确定这是否可以在一个 imagemagick 命令中完成,或者我是否需要自己计算所有内容并基本上创建一个空画布,将图像放在上面,移动并调整图像大小,然后将其他所有内容剃掉实现这一目标。
我想要达到的目标
我需要一个 imagemagick 命令来
- 将一张图像作为输入
- 根据我拥有的焦点(百分比或像素)将其调整大小并裁剪为给定大小(例如 295x195)
- 输出给定尺寸的图像,焦点在中间
我将为每个图像和每个所需大小使用一个命令。
这是我在草图中制作的带有演示图片的简短可视化,希望使其更容易理解我正在尝试做的事情:
左边的图像是我将焦点放在 282,282 处的基本图像。右边的那个是我想要的 295x195px 尺寸的裁剪(上面没有线条,它们只是为了问题演示)。如您所见,裁剪的中心点位于原始图像上的焦点所在的位置。
我尝试了什么
我的第一次尝试是使用-crop 的偏移值来设置图像的焦点:
convert photo.jpg -resize 1440x560^ -crop "1440x560+25%+25%" result.jpg
但我很快了解到这不是它的工作方式,因为它会导致图像太小(例如当坐标位于图像的左下角时)并且通常会被截断 在焦点处可见的图像部分,在阅读文档后才有意义。
然后我看到了-region 选项并尝试使用它,它具有 2400x1600 的图像大小并从我的图像中得到各种剪切:
convert photo.jpg -region 610x400 -resize 1440x560^ -crop 1440x560+0+0 result.jpg
区域选项的唯一效果是无论我输入什么值,我都会得到相同的图像剪切,并且它总是在图像上放置扭曲的白色水平条纹。
任何指向正确方向的提示(有或没有代码示例)都会有所帮助,所以我知道在哪里可以更深入地挖掘。
环境
- 用于开发的 macOS Catalina
- 包含代码的应用程序将在 debian buster 上运行
- 本地 imagemagick 版本为 7.0.8-66
- 服务器 imagemagick 版本是 6.9.10-23(我可以通过手动构建来更新它,但如果有一个只适用于 IM7 的解决方案也可以)
【问题讨论】:
-
当您使用“-crop”时,您可以通过设置重力来指定裁剪件的尺寸和中心点。试试
... -gravity center -crop 1440x560+480+140 ...之类的东西。您不能像尝试的那样将尺寸与百分比混合。此外,“-region”需要偏移量,但无论如何都不会做你想做的事情。 -
此外,您可以通过多种方式轻松修改图像,并在单个 ImageMagick 命令中创建多个输出图像。也许澄清您对在那里尝试做的事情的描述,以便我们提供示例。
-
添加了一个简短且希望清晰的“我想要实现的目标”部分。它基本上是一个图像和一个图像大小的一个命令
-
-region 需要偏移来指定其左上角。使用 -region 没有意义,只需为裁剪命令计算正确的左上角。您如何定义希望作物中心出现的位置? -crop 不使用 % 作为偏移量。但是您可以从 %.在 IM 7 中这很容易。对于 IM 6,您需要提前计算它们。你的平台是什么——Unix 还是 Windows?为什么不先裁剪,然后根据需要调整大小?
-
感谢您的解释。我编辑了我的问题并添加了一个可视化,希望它会有所帮助。我还在问题的底部添加了环境信息。最后,该命令在 Rails 应用程序中使用,该应用程序将构建和缓存裁剪后的图像,因此我需要一个简单的命令来传递给 imagemagick,或者如果它更复杂,我必须构建一些东西靠我自己让它在 Rails 框架内发生。但是,如果我可以让它在终端中工作,我可以让它在轨道上工作,所以......
标签: image-processing imagemagick imagemagick-convert