Я пытаюсь наложить два изображения PNG (которые не являются прозрачными), используя R. Для этого моя логика c выглядит следующим образом: я читаю оба изображения, используя readPNG()
. Затем я добавляю альфа-канал, используя abind()
, который я установил, например, 0.5
, чтобы сделать изображения полупрозрачными. Пока все это работает хорошо, моя проблема в том, что когда я затем накладываю изображения, используя png()
, выходное изображение имеет белое поле. Это всегда происходит, хотя я установил поля 0
, используя par()
. Чего мне не хватает?
Ниже приведен минимальный рабочий пример:
library("png")
library("abind")
# Download two random pictures
pngURL1 <- "https://imgur.com/download/0ljEVEW"
pngURL2 <- "https://imgur.com/download/oShoMag"
download.file(pngURL1, "temp1.png", mode = "wb")
download.file(pngURL2, "temp2.png", mode = "wb")
# Load downloaded images and add alpha channel
img1 = readPNG("temp1.png")
img1 = abind::abind(img1, img1[,,1]) # add an alpha channel
img2 = readPNG("temp2.png")
img2 = abind::abind(img2, img2[,,1]) # add an alpha channel
# Make semi-transparent
img1[,,4] <- 0.5
img2[,,4] <- 0.5
# Create output image
png('test.png', width = 480, height = 360)
par(mar = c(0,0,0,0))
plot.new()
rasterImage(img1, 0, 0, 1, 1)
rasterImage(img2, 0, 0, 1, 1)
dev.off()
Это создает следующий вывод: Пример изображения с нежелательным полем Я бы хотел избавьтесь от поля, чтобы я получал только PNG-изображение, которое имеет те же размеры, что и входные изображения, которые я использовал.
Заранее большое спасибо за помощь!