修改ruby中图像的颜色

前端之家收集整理的这篇文章主要介绍了修改ruby中图像的颜色前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我如何改变颜色:

进入这个:

我使用Gimp生成输出图像,输入图像为第一层,图像背景颜色为第二层,在“图层”面板中我选择了“颜色”模式

我想保留背景颜色,但希望颜色为棕色.

有任何想法与ChunkyPNG这样做?或者我应该使用带有颜色查找表的ImageMagick?

解决方法

谢谢你的想法.

我发现Linuxios中最有用的一个Gimp layer modes

require "json"
require "httpclient"
require "chunky_png"

module ChunkyPNG::Color

  def h(value)
    r,g,b = r(value).to_f / MAX,g(value).to_f / MAX,b(value).to_f / MAX
    min,max = [r,b].minmax

    return 0 if max == min

    result = case max
      when r then (g - b) / (max - min) + (g < b ? 6 : 0)
      when g then (b - r) / (max - min) + 2
      when b then (r - g) / (max - min) + 4
    end

    result * 60
  end

  def s(value)
    min,max = [r(value),g(value),b(value)].minmax.map { |value| value.to_f / MAX }
    max == 0 ? 0 : (max - min) / max
  end

  def v(value)
    [r(value),b(value)].max.to_f / MAX
  end

  def hsv(h,s,v)
    h = h.to_f / 360
    i = (h * 6).floor
    f = h * 6 - i
    p = v * (1 - s)
    q = v * (1 - f * s)
    t = v * (1 - (1 - f) * s)

     case i % 6
      when 0 then r,b = v,t,p
      when 1 then r,b = q,v,p
      when 2 then r,b = p,t
      when 3 then r,q,v
      when 4 then r,b = t,p,v
      when 5 then r,q
    end

    rgb *[r,b].map {|value| (value * 255).round }
  end

end


module CoderWall

  module_function

  def badges(username)
    url = URI.escape("https://coderwall.com/#{username}.json")
    response = HTTPClient.get(url)

    json = JSON.parse(response.body)
    urls = json['badges'].map {|b| b['badge']}
    brown      = ChunkyPNG::Color.from_hex("#bf8a30")
    hue        = ChunkyPNG::Color.h(brown)
    saturation = ChunkyPNG::Color.s(brown)
    value      = ChunkyPNG::Color.v(brown)
    urls.each do |url|
      matches = url.match /(\w+)\-/
      response = HTTPClient.get(url)
      filename = "./tmp/coderwall/"+matches[1]+".png"
      File.open(filename,"w") {|f| f.write(response.body)}

      image = ChunkyPNG::Image.from_file(filename)

      image.pixels.map! do |pixel|
          v = ChunkyPNG::Color.v(pixel)
          unless ChunkyPNG::Color.a(pixel) > 0
            v = value
          end
          ChunkyPNG::Color.hsv(hue,saturation,v)
      end
      image.save(filename.gsub(/\.png/,"_brown.png"),:fast_rgba)
    end
  end
end

badges = CoderWall.badges("astropanic")

上面的代码包含在网络上找到的一些片段.

结果如下:Stop doing new year resolutions. Make the change now !

猜你在找的Ruby相关文章