在R中使用透明度覆盖两张图片

4

我有两张图片要在R中导入:

image_A <- load.image('C:/Image test/testA.jpg')
image_B <- load.image('C:/Image test/testB.jpg')

我希望将图像B叠加到A上,并对图像B应用透明度。如何实现?

2
请阅读magick软件包文档此处。它通常用于进行图像处理。它可能会帮助您解决问题。 - Argon
如果它们是JPEG格式,它们就没有像PNG格式那样的透明背景,所以需要一些工作。这是什么上下文?这些是图表吗? - alistaire
也许可以读取像素颜色,然后使用这里提出的想法:https://menugget.blogspot.com/2012/04/adding-transparent-image-layer-to-plot.html#more - M--
1个回答

4

这里有一种选项,使用基于R的rasterImage函数。

首先让我们获取两张图片。第一张是读入R标志的JPEG格式图片。然后添加另一个数组层来存储alpha通道(JPEG图片没有透明度)。

img.logo = jpeg::readJPEG(system.file("img", "Rlogo.jpg", package="jpeg"))
img.logo = abind::abind(img.logo, img.logo[,,1]) # add an alpha channel

对于第二个图像,让我们创建一个与img.1相同尺寸的数组,但用随机颜色填充它。
img.random = img.logo
img.random[] = runif(prod(dim(img.random))) # this image is random colors

现在让我们将基础图像设置为完全不透明,将R标志设置为半透明。
img.logo[,,4] = 0.5  # set alpha to semi-transparent
img.random[,,4] = 1  # set alpha to 1 (opaque)

现在我们已经有了示例图像,可以使用 rasterImage 进行叠加。
png('test.png', width = 2, height = 2, units = 'in', res = 150)
  par(mai=c(0,0,0,0))
  plot.new()
  rasterImage(img.random, 0, 0, 1, 1)
  rasterImage(img.logo,   0, 0, 1, 1)
dev.off()

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接