Работа с изображениями в Ruby - PullRequest
1 голос
/ 23 сентября 2010

Я ищу способ загрузить существующее 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 , но не смог найти способ добиться этого.

Есть ли альтернативы, которые позволили бытакое редактирование изображений?

Ответы [ 3 ]

3 голосов
/ 24 сентября 2010

Как насчет метода Рагика each_pixel? 1002

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

img.each_pixel {|pixel, c, r| block }
2 голосов
/ 17 февраля 2013

Вот как сделать то, что вы хотите в 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

0 голосов
/ 02 ноября 2015

Добавьте gem rmagick для ruby ​​или rmagick4j для jruby в вашем файле gem.Используя paperclip convert_options, мы можем предоставить параметры для цвета фона, цвета рамки, качества, изменения размера, тени и т. Д. Обрезка изображения: реализована с использованием paperclip и jcrop. Мы можем напрямую вызывать jcrop с помощью id / class.Затем мы можем получить новые высоту и ширину.

$ (function () {$ ('# cropbox'). Jcrop ();});Для размера обрезки по умолчанию $ (function () {$ ('# cropbox'). Jcrop ({onChange: update_crop, onSelect: update_crop, setSelect: [0, 0, 500, 500], aspectRatio: 1});});

Для обновления размера кадрирования

function update_crop (координаты) {$ ('# crop_x'). Val (ordins.x);$ ( '# Crop_y') Вал (coords.y).$ ( '# Crop_w') Вал (coords.w).$ ( '# Crop_h') Вал (coords.h).}

Прочитать статью полностью здесь: http://www.railscarma.com/blog/technical-articles/image-manipulation/

...