[R-sig-Geo] Writing PNG files with rgdal

Barry Rowlingson b.rowlingson at lancaster.ac.uk
Fri Aug 14 15:51:24 CEST 2009


I'm wondering if there's an easy way to write PNG files from a matrix?

I've got an NxM matrix of values, z, and I want to produce an NxM
pixel PNG file. I have a function pfunc(.) that converts values to
colours.

So currently I do this:

  library(rtiff)
  library(rgdal)
  z = matrix(runif(100),10,10)
  pfunc=colorRamp(c("blue","yellow"))

  tiffPath = "foo.tif"
  pngPath = "foo.png"

# get the rgb colours:
  rgb = pfunc(t(z)[ncol(z):1,])

# as a pixmapRGB
  rgbpixmap = pixmapRGB(c(rgb[,1],rgb[,2],rgb[,3]),ncol(z),nrow(z))

# save as a tiff (require(rtiff) package)
  writeTiff(rgbpixmap,tiffPath)

# now read in using rgdal and copy, since GDAL PNG driver doesn't have
a 'create' call:
  xp=GDAL.open(tiffPath)
  xx=copyDataset(xp,driver="PNG")
  saveDataset(xx,pngPath)
  GDAL.close(xx)
  GDAL.close(xp)

# we don't need this:
  file.remove(tiffPath)

But it seems a bit kludgy. I know its not really a 'geo' question, but
it seems that rgdal might have a better way to do this that I've not
hit on yet. Any ideas (short of system("convert foo.tif foo.png")). Or
is my solution as elegant as it can be?

Barry



More information about the R-sig-Geo mailing list