既存の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の場合は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/