我如何改变颜色:
进入这个:
我使用Gimp生成输出图像,输入图像为第一层,图像背景颜色为第二层,在“图层”面板中我选择了“颜色”模式
我想保留背景颜色,但希望颜色为棕色.
有任何想法与ChunkyPNG这样做?或者我应该使用带有颜色查找表的ImageMagick?
解决方法
谢谢你的想法.
我发现@L_404_1@ios中最有用的一个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")
上面的代码包含在网络上找到的一些片段.