从代码中羽化图像

时间:2010-09-24 14:17:00

标签: ruby-on-rails ruby image image-processing image-manipulation

有没有办法从代码中提取图像? (如果您不知道羽化是什么,请检查this - 我没有使用脏语)

我知道像Photoshop这样的专业设计应用程序可以做到这一点,但我希望用户将图像上传到我的网站,然后以羽毛的方式显示它们。 (现在有一个你每天都听不到的句子)

4 个答案:

答案 0 :(得分:1)

Paperclip支持使用ImageMagick应用程序进行图像处理,该应用程序允许您以编程方式操作上载时的图像。请查看以下链接中标题为后期处理的小节

http://github.com/thoughtbot/paperclip

你必须熟悉ImageMagick的CLI来弄清楚你想要什么,但它绝对可行。

答案 1 :(得分:1)

我可以看到两种方式。在这两种方式中,您都可以准备透明的PNG图像,即“羽毛”效果。然后,您将此图像与原始图像组合,您将获得所需的结果。

在动态尺寸的情况下,解决方案会变得复杂一些 - 但基本原理是相同的。

CSS方式

在这种情况下,您可以在客户端进行操作。只需准备透明的PNG蒙版即可实现“羽毛”效果 - 使用Photoshop / Gimp创建它。

假设您将掩码命名为“feather.png”,原始图像名为“source.jpg”。然后您可以使用此HTML代码

<div style="width: 200px;height: 200px; background: url(/images/source.jpeg)">
  <img width="200" height="200" src="/images/feather.png" />
</div>

服务器端

在这种情况下,我肯定会使用paperclip gem。它使用了魔术imagemagick库。你可以把它想象成命令行上的Photoshop(有点夸张但不多)

在你的模特中:

class Avatar < ActiveRecord::Base
  has_attached_file :image, :styles => {
    :feather => {
      :geometry => "200x200",
      :format => :jpg
    },
    :normal => {
      :geometry => "200x200",
      :format => :jpg
    }
  },
  :convert_options => {
    :feather => "#{Rails.root.join('public/images/feather-200x200.png')} -composite"
  }

end

就是这样。然后在您的代码中,当您想要使用“羽毛”图像时,您应该使用:

<%= image_tag avatar.image.url(:feather) %>

或者:正常的非羽毛版本。

所有转换和转换都只是作为一项任务完成:

avatar = Avatar.new
# from file...
avatar.image = open(....)
# or maybe from form...
avatar.image = params[:...]
# it not only saves the avatar to db but runs the image transformations
avatar.save!

答案 2 :(得分:0)

据我所知,rmagick是最好的:http://rmagick.rubyforge.org/portfolio2.html

...但最接近您正在搜索的内容是:

alt text

您还可以让用户上传他们的照片,然后使用一些CSS技巧(例如图片顶部的透明png)显示它的羽毛状物。

答案 3 :(得分:0)

免责声明:我在Atalasoft工作。

我们的免费成像SDK DotImage Photo可用于执行此操作。最简单的方法是在原始图像上使用叠加半透明图像。您可以在运行时创建它们,使其大小合适。