Как убрать поле вокруг изображения, созданного с помощью png () в R - PullRequest
3 голосов
/ 27 февраля 2020

Я пытаюсь наложить два изображения 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-изображение, которое имеет те же размеры, что и входные изображения, которые я использовал.

Заранее большое спасибо за помощь!

1 Ответ

2 голосов
/ 27 февраля 2020

Нежелательные поля являются результатом вычисления диапазона оси. По умолчанию диапазон оси расширяется на 4% за пределы диапазона данных. Чтобы решить эту проблему, вы можете установить параметры xaxs и yaxs в par в i - внутренний стиль.

Для вашего примера это будет:

par(mar = c(0,0,0,0), xaxs="i", yaxs="i")

результат: Exmaple png result

...