ruby - 如何使用 Ruby-Vips 高效地创建纯色背景图像
问题描述
我想使用 Ruby-Vips 提供的方法创建一个给定大小的纯色背景画布。现在,我可以这样做,如下所示:
canvas = Vips::Image.black(600, 600).ifthenelse([0,0,0], [252, 186, 3])
但是,必须创建一个黑色图像,然后以这种方式逐个像素地应用颜色,这似乎很奇怪。有没有更好或更有效的方法来实现这一点?
解决方案
如果您尝试匹配现有图像,可以使用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 等)
- 扩大到所需的大小
- 设置元数据,如分辨率、解释等。
推荐阅读
- amazon-web-services - Lambda 函数在代码管道中永远不会成功
- swift - 不能等待 MKDirections.calculate 的结果,取而代之的是 nil
- jquery - 列出我可以使用的所有事件?
- node.js - MongoDB ISODate 值为 0 毫秒
- javascript - 查找父元素中元素的绝对左侧位置
- amazon-web-services - AWS Cloudwatch Json 指标过滤模式
- r - 如何使用数据表的两列在ggplot2中定义x轴上的范围
- html - 在引导程序中排列标签并选择
- azure - 从 JSON 复杂类型获取数据的 U-SQL 脚本语法错误
- android - 多个 PDTextField 的 PDFBox setValue