1

既存の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を調べましたが、これを実現する方法が見つかりませんでした。

そのような画像編集を可能にする代替案はありますか?

4

3 に答える 3

3

RMagickのeach_pixel方法はどうですか?

http://studio.imagemagick.org/RMagick/doc/image2.html#each_pixel

img.each_pixel {|pixel, c, r| block }
于 2010-09-23T21:41:49.650 に答える
2

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

于 2013-02-17T11:01:34.707 に答える
0

gemファイルにrubyの場合はgemrmagick、jrubyの場合はrmagick4jを追加します。paperclip convert_optionsを使用すると、background-color、border-color、quality、re-size、shadowなどのオプションを指定できます。ImageCrop:paperclipとjcropを使用して実装されます。id/classを使用してjcropを直接呼び出すことができます。次に、新しい高さと幅を取得できます。

$(function(){$('#cropbox')。Jcrop();}); デフォルトのクロップサイズの場合$(function(){$('#cropbox')。Jcrop({onChange:update_crop、onSelect:update_crop、setSelect:[0、0、500、500]、aspectRatio:1});});

作物サイズの更新について

function 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/

于 2015-11-02T05:34:53.297 に答える