Открыть tif файл python

How to open, edit and save raster files (.tif) using Python

Fellow researchers and open-source GIS enthusiasts, Welcome to my blog! I’d like to start with a disclaimer – I may be a researcher of this very area but that doesn’t mean everything I do or write here will work for you, in your own desktop configurations and package versions. I have no responsibility if you lose data or mess up your installation. I also do not authorize any copies of my content. Today, I am going to write about how to open, edit and save raster files using Python if you are familiarized with Python (mainly Anaconda). Maybe you need to run every pixel in a raster through a Python function, or you want to do custom operations with them that are not available on GUI software such as QGIS. It also can be used to do batch processing. I showed another way to do batch processing here. We are going to use GDAL on Python, installed through Conda, to do this.

How to do it

for opening the raster read-only and saving it on step1 variable. Copy the transformation to a variable, it will be useful later.

Do the processing you need to and save it to the output variable. Example, the whole raster to the power of 1.2:

Example with a random raster

I generated a random raster by binomial distribution on QGIS 3.18, with values between 0 and 10. The actual range of the generated raster was [2,7]. randomized rasterAfter running the code on Python, the following raster was generated: randomized rasterIt looks the same, but the range has changed: randomized rasterShowing that the code worked! Edit (August 2nd, 2021): if you are having issues with GDAL-style transforms in rasterio, there is a quick solve for it. Check out this post. Edit (March 21st, 2023): I wrote a post about saving raster files using GDAL on Python. It might be useful for someone who does not want to use both rasterio and GDAL to open and save raster files when using Python.

Читайте также:  Платформа для разработчика java
Luísa Vieira Lucchese
Postdoctoral Researcher

Postdoc at University of Pittsburgh

Источник

tifftools 1.3.12

Pure Python tools for reading and writing all TIFF IFDs, sub-IFDs, and tags.

Developed by Kitware, Inc. with funding from The National Cancer Institute.

Example

Commands

tifftools —help and tifftools —help provide usage details.

  • tifftools split [—subifds] [—overwrite] source [prefix] : split a tiff file into separate files. This is also available as the library function tifftools.tiff_split .
  • tifftools concat [—overwrite] source [source . ] output : merge multiple tiff files together. Alias: tifftools merge . This is also available as the library function tifftools.tiff_concat .
  • tifftools dump [—max MAX] [—json] source [source . ] : print information about a tiff file, including all tags, IFDs, and subIFDs. Alias: tifftool info . This is also available as the library function tifftools.tiff_dump .
  • tifftools set source [—overwrite] [output] [—set TAG[:DATATYPE][,] VALUE] [—unset TAG:[,]] [—setfrom TAG[,] TIFFPATH] : modify, add, or remove tags. This is also available as the library function tifftools.tiff_set .

Library Functions

  • read_tiff
  • write_tiff
  • Constants
  • Tag
  • Datatype
  • get_or_create_tag
  • EXIFTag, GPSTag, etc.

Installation

tifftools is available on PyPI and conda-forge.

To install with pip from PyPI:

conda install -c conda-forge tifftools

Purpose

tifftools provides a library and a command line program for maniplulating TIFF files. It can split multiple images apart, merge images together, set any tag in any IFD, and dump all IFDs and tags in a single command. It only uses python standard library modules, and is therefore widely compatible.

Rationale

There was a need to combine images from multiple TIFF files without altering the image data or losing any tag information. Further, when changing tag values, it was essential that the old values were fully removed from the output.

The command line tools associated with libtiff are commonly used for similar purposes. The libtiff command tools have significant limitations: tiffdump and tiffinfo require multiple commands to see information from all IFDs. tiffset does not remove data from a file; rather it appends to the file to only reference new data, leaving the old values inside the file. tiffsplit doesn’t keep tags it doesn’t recognize, loosing data. tiffcp always reencodes images and will fail for compression types it does not know.

Likewise, there is a wide variety of EXIF tools. For the most part, these only alter tags, usually by appending to the existing file. ImageMagick’s convert command also recompresses images as it combines them.

Many programs deal with both classic and BigTIFF. Some will start writing a classic TIFF, but leave a small amount of unused space just after the file header. If the file exceeds 4Gb, parts of the file are rewritten to convert it to a BigTIFF file, leaving small amounts of abandoned data within the file.

tifftools fills this need. All tags are copied, even if unknown. Files are always rewritten so that there is never abandoned data inside the file. tifftools dump shows information on all IFDs and tags. Many of the command line options are directly inspired from libtiff.

tifftools does NOT compress or decompress any image data. This is not an image viewer. If you need to recompress an image or otherwise manipulate pixel data, use libtiff or another library.

As an explicit example, with libtiff’s tiffset , tag data just gets dereferenced and is still in the file:

$ grep  photograph.tif    present tiffset -s ImageDescription  photograph.tif tiffinfo photograph.tif  grep ImageDescription ImageDescription: secret phrase grep  photograph.tif    file photograph.tif matches tiffset photograph.tif -s ImageDescription  tiffinfo photograph.tif  grep ImageDescription ImageDescription: public phrase grep  photograph.tif    file photograph.tif matches
$ grep  photograph.tif    present tifftools  -y -s ImageDescription  photograph.tif tiffinfo photograph.tif  grep ImageDescription ImageDescription: secret phrase grep  photograph.tif    file photograph.tif matches tifftools  -y photograph.tif -s ImageDescription  tiffinfo photograph.tif  grep ImageDescription ImageDescription: public phrase $ grep  photograph.tif    not present

TIFF File Structure

TIFF Files consist of one or more IFDs (Image File Directories). These can be located anywhere within the file, and are referenced by their absolute position within the file. IFDs can refer to image data; they can also contain a collection of metadata (for instance, EXIF or GPS data). Small data values are stored directly in the IFD. Bigger data values (such as image data, longer strings, or lists of numbers) are referenced by the IFD and are stored elsewhere in the file.

In the simple case, a TIFF file may have a list of IFDs, each one referencing the next. However, a complex TIFF file, such as those used by some Whole-Slide Image (WSI) microscopy systems, can have IFDs organized in a branching structure, where some IFDs are in a list and some reference SubIFDs with additional images.

TIFF files can have their primary data stored in either little-endian or big-endian format. Offsets to data are stored as absolute numbers inside a TIFF file. There are two variations: “classic” and “BigTIFF” which use 32-bits and 64-bits for these offsets, respectively. If the file size exceeds 4 Gb or uses 64-bit integer datatypes, it must be written as a BigTIFF.

Limitations

Unknown tags that are offsets and have a datatype other than IFD or IFD8 won’t be copied properly, as it is impossible to distinguish integer data from offsets given LONG or LONG8 datatypes. This can be remedied by defining a new TiffConstant record which contains a bytecounts entry to instruct whether the offsets refer to fixed length data or should get the length of data from another tag.

Because files are ALWAYS rewritten, tifftools is slower than libtiff’s tiffset and most EXIF tools.

Источник

Оцените статью