如何使用 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"
这是一个名为 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"