我正在寻找一种方法来加载现有的 png 图像,并对值进行逐个像素的操作。理想情况下,类似
image = Image.open('my.png')
image = image.map_each_rgb do |r, g, b|
[r-12, g+2, b+30]
end
image.save('my.png')
我调查了rmagick,但找不到实现这一目标的方法。
是否有任何替代方法可以进行此类图像编辑?
我正在寻找一种方法来加载现有的 png 图像,并对值进行逐个像素的操作。理想情况下,类似
image = Image.open('my.png')
image = image.map_each_rgb do |r, g, b|
[r-12, g+2, b+30]
end
image.save('my.png')
我调查了rmagick,但找不到实现这一目标的方法。
是否有任何替代方法可以进行此类图像编辑?
RMagick的each_pixel
方法怎么样?
http://studio.imagemagick.org/RMagick/doc/image2.html#each_pixel
img.each_pixel {|pixel, c, r| block }
以下是如何在 ruby-vips 中执行您想要的操作:
require 'vips'
include VIPS
im = Image.new('/home/john/pics/shark.png')
# y = x.lin(a, b) calculates (y = x * a + b), ie. a linear transform
# you can pass a single constant for a and b, or an array of constants, in
# which case one element of the array is used for each channel
# see http://rubydoc.info/gems/ruby-vips/0.3.0/VIPS/Image#lin-instance_method
# subtract 12 from red, add 2 to green, add 30 to blue
im = im.lin [1, 1, 1], [-12, 2, 30]
im.write('out.png')
它比 rmagick 快得多,使用更少的内存,并且没有(据我所知)泄漏。看:
http://www.vips.ecs.soton.ac.uk/index.php?title=Speed_and_Memory_Use
在 gem 文件中为 ruby 添加 gem rmagick 或为 jruby 添加 rmagick4j。使用回形针convert_options,我们可以为背景颜色,边框颜色,质量,重新大小,阴影等提供选项,图像裁剪:使用回形针和jcrop实现我们可以使用id/class直接调用jcrop。然后我们可以得到新的高度和宽度。
$(function() { $('#cropbox').Jcrop(); }); 对于默认裁剪大小 $(function() { $('#cropbox').Jcrop({ onChange: update_crop, onSelect: update_crop, setSelect: [0, 0, 500, 500], aspectRatio: 1 }); });
用于更新作物尺寸
函数 update_crop(coords) { $('#crop_x').val(coords.x); $('#crop_y').val(coords.y); $('#crop_w').val(coords.w); $('#crop_h').val(coords.h); }
在此处阅读全文:http ://www.railscarma.com/blog/technical-articles/image-manipulation/