Describe the bug
BitsPerSample is modeled as an Int, although in multi-band TIFFs this tag contains as many values as SamplesPerPixel. This results in producing invalid multi-band TIFFs that cannot be consumed by third-party tools.
To Reproduce
Add a file read-and-write-back.scala to the project root directory with the following content:
//> using scala 3
//> using dep "org.locationtech.geotrellis:geotrellis-raster_2.13:3.7.0"
import geotrellis.raster.io.geotiff.MultibandGeoTiff
@main def run() =
val originalTiff = MultibandGeoTiff("./raster/data/geotiff-test-files/overviews/multiband.tif")
originalTiff.write("/tmp/multiband.tif")
Then, run the following commands from a shell, from within the project root directory:
scala-cli read-and-write-back.scala
exiftool -IFD0:BitsPerSample /tmp/multiband.tif
exiftool -IFD0:BitsPerSample ./raster/data/geotiff-test-files/overviews/multiband.tif
Actual output:
Bits Per Sample : 8
Bits Per Sample : 8 8 8 8
Note that the BitsPerSample tag of the written file /tmp/multiband.tif is 8, whereas the original file contained 8 8 8 8.
Expected output:
Bits Per Sample : 8 8 8 8
Bits Per Sample : 8 8 8 8
The BitsPerSample tag should be a collection.
Environment
- GeoTrellis version: 3.7.0
Additional context
According to the following comment, this issue seems to be known from the project maintainers:
|
bitsPerSample: Int = 1, // This is written as an array per sample, but libtiff only takes one value, and so do we. |
However, the comments refers to a lib libtiff which I am not sure to follow what it refers to. Is this comment legacy? If yes, would you consider changing the model of bitsPerSample to be an Array[Short] instead of an Int?
Describe the bug
BitsPerSampleis modeled as anInt, although in multi-band TIFFs this tag contains as many values asSamplesPerPixel. This results in producing invalid multi-band TIFFs that cannot be consumed by third-party tools.To Reproduce
Add a file
read-and-write-back.scalato the project root directory with the following content:Then, run the following commands from a shell, from within the project root directory:
Actual output:
Note that the
BitsPerSampletag of the written file/tmp/multiband.tifis8, whereas the original file contained8 8 8 8.Expected output:
The
BitsPerSampletag should be a collection.Environment
Additional context
According to the following comment, this issue seems to be known from the project maintainers:
geotrellis/raster/src/main/scala/geotrellis/raster/io/geotiff/tags/BasicTags.scala
Line 25 in d65d6a2
However, the comments refers to a lib
libtiffwhich I am not sure to follow what it refers to. Is this comment legacy? If yes, would you consider changing the model ofbitsPerSampleto be anArray[Short]instead of anInt?