如何使用 R 获取单波段栅格的 RGBA 颜色 table?

How to get the RGBA color table of a singleband raster using R?

这是一个名为 singleband-raster.tif 的光栅文件。

使用 R,我可以像这样得到颜色 table:

my.raster <- raster( "/path/to/singleband-raster.tif" )
colortable( my.raster ) 

它会给你这样的 RGB 值:

[1] "#FFFFFF" "#969696" "#FA00FF" "#F200FF" "#E600FF" # shortened for brevity

没关系,但我想要得到的是 RGBA(红、绿、蓝、alpha)值,而不仅仅是 RGB 值。因为光栅文件也有像这样的 alpha 值:

[1] "#FFFFFF00" "#969696FF" "#FA00FFFF" "#F200FFFF" "#E600FFFF"

可以通过命令行中的 GDAL 工具检查 alpha 值,如下所示:

gdalinfo /path/to/singleband-raster.tif

如何使用 R 获取单波段光栅的 RGBA 颜色 table?

这个page

The TIFF format only supports R,G,B components for palettes / color tables. Thus on writing the alpha information will be silently discarded.

(因此,阅读不可用)

似乎在这种情况下(文件中没有 alpha)GDAL 将 0 的 alpha 分配给 NA 标志,并将 255 分配给所有其他值。 raster::colortable 没有显示。但是使用 terra 开发版本 (版本 0.9-1),您可以获得想要的东西

library(terra)
x <- rast("singleband-raster.tif")
ct <- cols(x)[[1]]

head(ct)
#  red green blue alpha
#1 255   255  255     0
#2 150   150  150   255
#3 250     0  255   255
#4 242     0  255   255
#5 230     0  255   255
#6 222     0  255   255
 
cols <- rgb(ct[,1], ct[,2], ct[,3], ct[,4], maxColorValue=255)
head(cols)
#[1] "#FFFFFF00" "#969696FF" "#FA00FFFF" "#F200FFFF" "#E600FFFF" "#DE00FFFF"