新手问题 关于 carrierwave 处理图片的问题

kingwkb · 2013年07月15日 · 最后由 kingwkb 回复于 2013年07月16日 · 3009 次阅读

我现在用 carrierwave 和 mini_magick 处理图片

看 mini_magick 的文档 manipulate! 的文档,说是更多信息可以看 imagemagick 的文档

http://www.imagemagick.org/script/command-line-options.php

同时又说 nimi_magick 可以替换 rmagick 来使用

但是例中出现的代码

class MyUploader < CarrierWave::Uploader::Base
     include CarrierWave::MiniMagick

     process :do_stuff => 10.0

     def do_stuff(blur_factor)
       manipulate! do |img|
         img = img.sepiatone
         img = img.auto_orient
         img = img.radial_blur blur_factor
       end
     end
   end

这个 sepiaton, auto_orient, radial_blue 的方法都和 image_magick 的对不上

sepiatione 在 image_macick 的文档上是 -sepia-tone auto_orient 对应的是是 -auto-orient radial_blur 对应的是 -radial-blur

还有我看加水印的代码用的是 composite,这个在 image_magick 上面是单独的一个命令

搞不懂这些是怎么一一对应的啊?

想查个 composite 的参数,不知道怎么查了

现在是怎么了,问题都是没人回复的

#1 楼 @kingwkb 既然你问道了,你是否觉得这个列表有点不妥呢?

#2 楼 @Rei 恩,我改到 rails 里面了,不过感觉这个也不太妥,我一开始就没找到合适的分类,所以就放新手了

#3 楼 @miclle 我找到这段代码

def watermarking
    manipulate! do |img|
      logo = MiniMagick::Image.open(Rails.root + 'public/images/agrichem_preto.png')
      img = img.composite(logo, Magick::SouthEastGravity, Magick::OverCompositeOp)
    end
  end

但是我真的不知道这个参数怎么和 http://www.imagemagick.org/script/composite.php 这个文档对应起来

Magick::SouthEastGravity

这个参数是 RMagick 中的吗?

#4 楼 @kingwkb 我给改回新手问题了。

我的看法是,为什么要问这么多问题?这里是社区,不是问答社区(问答社区也没有回答义务)。别人回不回答都自由,不要催答案,否则会引来我这种人。

社区提倡的是解决问题然后分享,不是提问题。新手提问是一种短期的照顾,不是特权。

#6 楼 @Rei 恩,你说的是对的,这里不是问答社区,但是对于我们独自奋斗的新手来说,身边真的是没有可以交流的,已经很大程度上去 google 了,google 不来的问题才来问是,国内也没个好的问答社区,能回答 ruby 的可能也就这里了吧,所以才会多一点问题,还请谅解

但是我也不只是在问,看到别人的问题,能给解决的,我也都是尽量回复了。

#7 楼 @kingwkb 或许是人家给例子时不小心少打了个下划线,统一用下划线替换横线就好了

爪机不方便查代码,提示一下,可以用 img.combine_options(:convert) {|c| ...} 来拼参数。在这个 c 这个对象上面调用 push 方法把参数连起来。参数都是 shellescape 过的,不怕注入。

注意如果使用 convert 处理图片,会把原图路径作为第一个参数。不需要 convert 的话,可以参考 combine_options 的实现,跳过对 :convert 的处理。

楼主找 Google 不到答案,就静下心来看看源码吧。

附一个前几天写的 gist 供参考 https://gist.github.com/zhangyuan/5932220

#10 楼 @zhangyuan 恩,谢谢,我这个用不着拼参数吧,我觉得一个命令就搞定的,不过我查看源码里面有 watermark 的 方法,我试了几个都不行,报错

def watermarking
   manipulate! do |img|
    mark = MiniMagick::Image.open("#{Rails.root}/app/assets/images/watermark.png")
     # img = img.composite(logo, Magick::SouthEastGravity, Magick::OverCompositeOp)
     # img = img.watermark(mark, 0.25, 0, Magick::SouthEastGravity)
     img = img.watermark(mark, 0.25, 0, 'southeast')
   end
 end
需要 登录 后方可回复, 如果你还没有账号请 注册新账号