-
Notifications
You must be signed in to change notification settings - Fork 62
Description
Before™️, I had this code working.
def draw_rubyvips(filename)
# true -> 1, false -> 0
@data.map! { |x| x == true ? 1 : x }
@data.map! { |x| x == false ? 0 : x }
# make a 2D image from the data array
im = Vips::Image.new_from_array(@data.each_slice(@width).to_a)
im = (im == 1).ifthenelse(@colors[1], @colors[0], blend: true)
if @scale.is_a?(Numeric)
opts = { kernel: :nearest }
im = im.resize(@scale, **opts)
end
im.write_to_file(filename, compression: 9, palette: true, colours: 2, Q: 0, bitdepth: 1)
endNow it throws this error when reaching write_to_file:
/home/noraj/.asdf/installs/ruby/4.0.0/lib/ruby/gems/4.0.0/gems/ruby-vips-2.3.0/lib/vips/operation.rb:228:in 'Vips::Operation#build': vips_colourspace: no known route from 'matrix' to 'srgb' (Vips::Error)
The rest of my code retrieve a (one-line or multiline) CSV, flatten it to one line, converts every value to 0 or 1 and in draw_rubyvips I recreate a 2D array of 0 and 1 and replace every 0 & 1 by it's corresponding RGB color ([0,0,0] and [255,255,255] by default). Options are always set for PNG where I don't need large bitdepth or palette because I always have 2 colors and want an optimized image in terms of space. pp im returns #<Image 35x35 uchar, 3 bands, matrix>, indeed the colourspace is of type matrix. Maybe this approach is no longer the best for my case. I can't figure how to work around this colourspace conversion issue or avoid the colourspace being casted when saving to a file.
I'm using libvips 8.18.0 and ruby-vips 2.3.0.