Как эффективно создать solid цветное фоновое изображение с Ruby -Vips - PullRequest
1 голос
/ 09 апреля 2020

Я хочу создать цветной фоновый холст solid заданного размера, используя методы, доступные с Ruby -Vips. Прямо сейчас я могу сделать это следующим образом:

canvas = Vips::Image.black(600, 600).ifthenelse([0,0,0], [252, 186, 3])

Однако кажется странным, что нужно создать черное изображение, а затем применить цвет за пикселем таким образом. Есть ли лучший или более эффективный способ сделать это?

1 Ответ

1 голос
/ 09 апреля 2020

Если вы пытаетесь сопоставить существующее изображение, вы можете использовать new_from_image:

y = x.new_from_image [1, 2, 3]

Создает изображение, которое копирует большинство свойств из x, но каждый пиксель значение заменяется на [1, 2, 3].

Источник new_from_image показывает, как эффективно сделать изображение с нуля:

    def new_from_image value
      pixel = (Vips::Image.black(1, 1) + value).cast(format)
      image = pixel.embed 0, 0, width, height, extend: :copy
      image.copy interpretation: interpretation, xres: xres, yres: yres,
        xoffset: xoffset, yoffset: yoffset
    end

Итак:

  • сделать одно пиксельное черное изображение
  • добавить константу
  • в желаемом формате (uint8, double, et c.)
  • развернуть до нужного размера
  • установить метаданные, такие как разрешение, интерпретация и т. Д. c.
...