2012-05-22 38 views
5

Tôi hoàn toàn mới để xử lý hình ảnh. Tôi không biết gì về nội dung JPEG là gì và nó hoạt động như thế nào.Thư viện xử lý ảnh Ruby-vips. Có ví dụ hay về cách sử dụng không?

Tôi tự hỏi, nếu tôi có thể tìm thấy ở đâu đó đoạn mã ruby ​​biểu diễn sau thao tác đơn giản:

  1. Mở file jpeg.
  2. Lặp lại từng pixel và đặt màu thành màu xanh lá cây fx.
  3. Viết kết quả cho một tệp khác.

Tôi đặc biệt quan tâm đến cách này có thể được thực hiện bằng ruby-VIP thư viện
https://github.com/ender672/ruby-vips

Mục tiêu của tôi - phải học cách để thực hiện các hoạt động xử lý ảnh cơ bản sử dụng ruby-VIP (chỉnh gamma, độ sáng, tint, ...)

Bất kỳ liên kết nào đến ví dụ làm việc phức tạp hơn 'hello world'-like one on github của ruby-vips sẽ được đánh giá cao!

Nếu có lựa chọn thay thế cho ruby-vips, tôi cũng sẽ biết ơn họ.


CẬP NHẬT

Phần lớn đã xảy ra kể từ khi tôi hỏi câu hỏi này:

+0

ruby-vips trông bị bỏ rơi trên github. Hãy ghi nhớ điều đó, đặc biệt nếu bạn muốn sử dụng các phiên bản ruby ​​sau này. – d11wtq

+0

Cây làm việc có trên https://github.com/jcupitt/ruby-vips. Ngoài ra ruby-vips được phát hành tại rubygems: http://rubygems.org/gems/ruby-vips –

+0

cảm ơn. Trên thực tế trông khá tốt. Sẽ phải có một cuộc chơi xung quanh với nó. Chúng tôi thực sự cần một cái gì đó cho phép vẽ lên một bức tranh quá (hiện tại chúng tôi đang hướng tới Cairo cho điều đó) ... Tôi muốn có nhiều hơn (như thế này) khi nói đến xử lý hình ảnh trong ruby. – d11wtq

Trả lời

9

Tôi là một trong những người duy trì libvips, thư viện xử lý hình ảnh mà ruby-vips kết thúc tốt đẹp.

Kho lưu trữ ruby-vips của Tim chưa được chạm vào một lúc. Tôi có một ngã ba ở đây làm việc với libvips hiện tại:

https://github.com/jcupitt/ruby-vips

Có một ruby-VIP dụ trên trang VIP chính, trên trang tiêu chuẩn. Ví dụ này tải một hình ảnh, cắt giảm 100 pixel mỗi cạnh, giảm kích thước 10%, làm sắc nét và lưu lại.

http://www.vips.ecs.soton.ac.uk/index.php?title=Speed_and_Memory_Use#ruby-vips

Để thiết lập các kênh màu đỏ và màu xanh để không và chỉ để lại một hình ảnh màu xanh lá cây (là những gì bạn nghĩa là gì?), Bạn có thể nhân R và B bằng zero và G bằng 1. Một hoạt động có ích cho điều này là "lin", (nghĩa là "biến đổi tuyến tính").

http://rubyvips.holymonkey.com/classes/VIPS/Image.html#M000123

out = in.lin(a, b) 

bộ mỗi pixel trong ra là

out = in * a + b 

Nó cho phép bạn đưa ra một loạt các con số cho a, b và sẽ sử dụng một yếu tố mảng cho mỗi kênh hình ảnh. Vì vậy, do đó:

#!/usr/bin/ruby 

require 'rubygems' 
require 'vips' 
include VIPS 

im = Image.new('/home/john/pics/theo.jpg') 
im = im.lin [0, 1, 0], [0, 0, 0] 
im.write('x.jpg') 

Để thay đổi hình ảnh gamma bạn có thể thử một cái gì đó như:

im = im.pow(0.5).lin(255/255 ** 0.5, 0) 

Dù rằng sẽ có một chút chậm (nó sẽ gọi pow() ba lần cho mỗi pixel), nó sẽ nhanh hơn nhiều để tạo một bảng tra cứu, chạy pow() trên đó, sau đó ánh xạ hình ảnh qua bảng:

+4

Về ruby-vips so với RMagick: lợi thế của vips sẽ thấp hơn nhiều so với sử dụng bộ nhớ (ví dụ: 100 điểm trên chuẩn), nhanh hơn nhiều (hệ số 5 trên điểm chuẩn đó) và lớn hơn, linh hoạt hơn phạm vi của các hoạt động xử lý hình ảnh và định dạng pixel (rmagick chỉ hỗ trợ 1 - 5 kênh hình ảnh, ví dụ và đấu tranh với hình ảnh điểm nổi). lợi ích của rmagicks sẽ là sử dụng rộng rãi, tài liệu toàn diện hơn và một bộ các hoạt động tích hợp phù hợp với các trường hợp sử dụng phổ biến (ví dụ: vips không tích hợp porter-duff tích hợp, bạn cần cuộn riêng). – user894763

+0

Câu trả lời hay! Cảm ơn! –

+0

Tôi có thể phải xem xét CarrierWave vá để sử dụng điều này như là một thay thế cho RMagick. Tôi không có nhiều tình yêu dành cho RMagick và điều này có vẻ tốt hơn, cảm ơn. – d11wtq

1

Tôi xin lỗi tôi không biết ruby-VIP, nhưng ImageMagick là một cổ điển khi nói đến xử lý hình ảnh. Có các ràng buộc Ruby dưới dạng RMagick (current repo) và bạn có thể lấy được rất nhiều chức năng từ tài liệu ImageMagick, nhưng cũng có ba hướng dẫn here, cũng như nhiều ví dụ trên web.

Nếu bạn thực sự muốn đi sâu vào lý thuyết xử lý ảnh, nguồn gốc của nó là một dạng xử lý tín hiệu (điều này hoàn toàn thú vị và bổ ích vì nó thường cho phép bạn áp dụng các thuật toán rất giống nhau trên hình ảnh tín hiệu âm thanh/video, nhưng cuối cùng nó sẽ rất nặng về toán học - biến đổi Fourier), nếu toán học không làm bạn sợ, tôi chỉ có thể khuyên bạn đọc book bởi Gonzalez và Woods, tôi sẽ nói đó là tham chiếu xác định trong lĩnh vực này. Nó đắt tiền, nhưng có tất cả những gì bạn cần trong đó để giúp bạn bắt đầu và vượt ra ngoài. Here's cũng là trang có liên kết đến sách điện tử miễn phí nếu bạn muốn bắt đầu mà không phải chi nhiều tiền trước.

Các vấn đề liên quan