【问题标题】:Paperclip: How to resize an image only if it is big enough?Paperclip:如何仅在图像足够大的情况下调整图像大小?
【发布时间】:2011-07-18 07:10:04
【问题描述】:

我使用回形针来调整图片大小:

class Asset < ActiveRecord::Base
  has_attached_file :asset, :styles => { :thumb => "80x80#", 
                                         :medium => "1280x800>" }, ...

当原图大小为32x32时:

  1. 生成的medium 图片大小相同(即32x32),但文件有点不同,图片看起来有点变化。这是为什么呢?

  2. 生成的thumb 大小为80x80(它看起来被拉伸以适合这个大小)。 图片太小时如何避免调整大小。假设原始图片的尺寸在widthheight 变量中。

【问题讨论】:

  • 喂?你想到了什么?

标签: ruby-on-rails ruby-on-rails-3 imagemagick paperclip


【解决方案1】:

(1) 可能是因为 Paperclip 正在解码 JPEG,然后写入/编码新的 JPEG。 JPEG 是一种有损格式,因此每次编码都会降低图像质量。您可以使用 convert_options 来调整 JPEG quality,但您可能不得不接受 JPEG 的质量下降。

(2) 是因为 Paperclip 正在按照它的指示行事。 Paperclip 使用 ImageMagick 完成繁重的工作,样式尺寸仅为 ImageMagick geometry stringsone modification

Paperclip 还添加了“#”选项(例如“50x50#”),它将调整图像大小以最大程度地适应尺寸,然后裁剪掉其余部分(在中心加重)。

您的:thumb 样式使用“#”,因此您告诉Paperclip 您想要一个80x80 的图像,即使图像必须经过缩放和裁剪才能到达那里。您可以从维度字符串中删除“#”,如果需要或适当,可以添加the other modifiers 之一。

【讨论】:

  • 感谢您的回答!我确实想要“#”行为,我想知道是否可以“破解”回形针,以便仅在图像尺寸超过指定尺寸时才调整图像大小(我认为这是一个合理的要求)。
  • @Misha:您在寻找&lt;&gt; 修饰符吗?见Image Geometry。 AFAIK 除非您想修补 Paperclip 本身,否则您会被 ImageMagick 修饰符(加上 #)所困扰。
  • 我想要# 修饰符,但我不想放大图像。我检查了您提供的链接中的所有修饰符,但没有一个符合我的需求。更具体地说,如果图像尺寸为width x height,则:(1) 如果width &lt;= 80 &amp;&amp; height &lt;= 80,缩略图的大小应保持width x height(2) 否则,# 行为应适用,即缩略图的大小应为 80x80
  • @Misha:那我想你得破解回形针了。
  • 你破解了吗?我有一个medium 风格的768x 并且希望这仅适用于图像大于7680px 宽的情况。如果没有,请使用原始尺寸以避免拉伸和模糊。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-20
  • 1970-01-01
  • 1970-01-01
  • 2014-02-01
  • 2018-09-14
  • 1970-01-01
相关资源
最近更新 更多