如何使用ImageMagick和Paperclip为缩略图应用阴影效果?

4

我想通过让imagemagick为所有缩略图应用阴影来改变paperclip中的缩略图处理方式。 我卡在的是实际的imagemagick命令,可以实现这个小奇迹。 我尝试过的所有方法都返回一个没有原始图像的不正确比例的阴影。

def transformation_command
  scale, crop = @current_geometry.transformation_to(@target_geometry, crop?)
  trans = ""
  trans << " -resize \"#{scale}\""
  trans << " -crop \"#{crop}\" +repage" if crop
  # Apply Drop Shadow
  trans << " #{convert_options}" if convert_options? 
  trans
end

我尝试过的一个...

def transformation_command
  scale, crop = @current_geometry.transformation_to(@target_geometry, crop?)
  trans = ""
  trans << " -resize \"#{scale}\""
  trans << " -crop \"#{crop}\" +repage" if crop
  trans << " \( +clone -background black -shadow 60x5+10+10 \) +swap -background none -layers merge +repage"
  trans << " #{convert_options}" if convert_options? 
  trans
end

我完全不了解ImageMagick,非常需要帮助。

2个回答

4

经过一些尝试和在文档中挖掘,我终于搞明白了。

has_attached_file :image, 
  :styles => { :thumb => ["100x100#", :png] }, 
  :convert_options => { :thumb => '\( +clone -background black -shadow 70x4+0+0 \) +swap -background none -layers merge +repage' }
  1. 确保您已安装最新版本的ImageMagick。
  2. ["100x100#", :png] 将图像转换为png格式,以便投影是透明的。
  3. 在转换选项下,:thumb 仅将转换应用于 :thumb 样式,使用 :all 将转换应用于所有样式。
  4. 调整“70x4+0+0”以获得所需的阴影效果。

1

我发现使用rmagick接口比向imagemagick本身发送命令行选项要容易得多。

如果您使用rmagick,可以使用阴影方法。

img = Image.read('slide.png').first
shadow = img.shadow(0, 0, 0.0, '20%')

然后将图像合成到阴影上。

我写了一篇关于使用rmagick的文章:http://schf.uc.org/articles/2006/10/18/render-greatlooking-collages-with-ruby-and-rmagick

试着读一下,可能会让你更好地理解。

我还写了一个抽象库给rmagick,它试图使其更易于使用。我称之为RubyShop,因为它试图模仿Photoshop基于图层的合成。(我真的很讨厌这个名字,如果我再次启动该项目,我可能会改变它)


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