如何使用Imagemagick的命令行选项创建一个裁剪和居中的图像?

spo*_*ong 4 ruby-on-rails imagemagick rails-activestorage ruby-on-rails-5.2

我有一个Ruby on Rails 5.2 RC2应用程序,它使用ActiveStorage来托管图像.特别是它用变体转换图像.

我想传递一个通常为16:9或4:3比例的图像,并将其variant裁剪为特定的比例,宽度x高度,并使其居中.图像可以是水平或垂直的,但新的裁剪尺寸居中.

图像裁剪

Imagemagick命令行选项文档中,我有以下内容:

<%= image_tag @photo.image.variant(extent: "1:1", crop: "800x800").processed.service_url %>

它会创建一个方形裁剪,但它不会居中.它默认为左侧.如何创建以Imagemagick命令行选项为中心的裁剪图像?

我正在寻找适用于任何图像大小或宽高比的解决方案.我相信任何调整大小都会从最初上传的图像中进行创建.

作为参考,我正在寻找升级使用Carrierwave的旧Rails应用程序.有一个resize_to_fill确实如此.示例代码:

version :square_thumb do process :resize_to_fill => [200,200] end

Geo*_*orn 6

用于combine_options同时将gravitycrop选项传递给ImageMagick的mogrify实用程序:

@photo.image.variant(combine_options: { gravity: "center", crop: "800x800" })
Run Code Online (Sandbox Code Playgroud)

您还应该避免直接在视图中处理变体,因为它会阻止渲染.

  • 我正在使用它作为方形缩略图:`@ photo.image.variant(combine_options:{thumbnail:'200x200 ^',gravity:'center',extent:'200x200'})`.它运作良好,但我没有尝试可变长宽比. (6认同)
  • 这非常接近。由于实际源代码中的链接,我不知道 combine_options 。我发现以下内容可以产生最佳结果:@photo.image.variant(combine_options: {crop: "4:3", resize: "800x600", Gravity: "center" })。顺序确实很重要,因为我尝试了不同的顺序。如果您更新答案以包含此内容,我将接受。 (2认同)

Bon*_*nzo 0

您需要在某处添加重力设置。在命令行中它将是-重力中心。

范围扩展了画布,我认为你不需要它

尝试:

gravity: "center", crop: "800x800"
Run Code Online (Sandbox Code Playgroud)