Paperclip:如何仅在图像足够大的情况下调整大小?

8
我使用Paperclip来调整图片大小,就像这样:

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

当原始图片的大小为32x32时:
  1. 生成的medium图片大小相同(即32x32),但文件有所不同,图片看起来也有些变化。这是为什么?

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


你好?你有什么想法? - Mark Boulder
1个回答

6

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

(2) 是因为Paperclip在按照指示执行操作。 Paperclip使用ImageMagick来完成重要工作,而样式尺寸只是ImageMagick几何字符串,并进行了一个修改:

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

您的:thumb样式使用“#”,因此您告诉Paperclip您想要一个80x80的图像,即使必须缩放和裁剪该图像才能达到目标尺寸。您可以从维度字符串中删除“#”,如果需要或适当,添加其他修改器


谢谢您的回答!我确实想要"#"的行为,我想知道是否有可能“黑掉”Paperclip,使图像仅在其尺寸超过指定尺寸时调整大小(我认为这是一个合理的要求)。 - Misha Moroshko
@Misha:你是在寻找<还是>修饰符?请参考Image Geometry。据我所知,除非你想要打补丁来修改Paperclip本身,否则你只能使用ImageMagick的修饰符(加上#)。 - mu is too short
我想要使用#修饰符,但是我不想放大图片。我查看了你提供的链接中的所有修饰符,但没有一个符合我的需求。具体来说,如果图片尺寸为宽度 x 高度,那么:**(1)** 如果 宽度 <= 80 && 高度 <= 80,缩略图的尺寸应保持为 宽度 x 高度。**(2)** 否则,应用#的行为,即缩略图的尺寸应为80x80 - Misha Moroshko
@Misha:那我想你就得去黑Paperclip了。 - mu is too short
你成功地破解了吗?我有一个768x的中等风格,并且只想在图像宽度大于7680像素时应用此风格。如果不是,则使用原始大小以避免拉伸和模糊。 - Mark Boulder

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接