.. note:: :class: sphx-glr-download-link-note Click :ref:`here ` to download the full example code .. rst-class:: sphx-glr-example-title .. _sphx_glr_generated_examples_io_split-jpeg-to-fits.py: ===================================================== Convert a 3-color image (JPG) to separate FITS images ===================================================== This example opens an RGB JPEG image and writes out each channel as a separate FITS (image) file. This example uses `pillow `_ to read the image, `matplotlib.pyplot` to display the image, and `astropy.io.fits` to save FITS files. ------------------- *By: Erik Bray, Adrian Price-Whelan* *License: BSD* ------------------- .. code-block:: python import numpy as np from PIL import Image from astropy.io import fits Set up matplotlib and use a nicer set of plot parameters .. code-block:: python import matplotlib.pyplot as plt from astropy.visualization import astropy_mpl_style plt.style.use(astropy_mpl_style) Load and display the original 3-color jpeg image: .. code-block:: python image = Image.open('Hs-2009-14-a-web.jpg') xsize, ysize = image.size print("Image size: {} x {}".format(xsize, ysize)) plt.imshow(image) .. image:: /generated/examples/io/images/sphx_glr_split-jpeg-to-fits_001.png :class: sphx-glr-single-img .. rst-class:: sphx-glr-script-out Out: .. code-block:: none Image size: 400 x 232 Split the three channels (RGB) and get the data as Numpy arrays. The arrays are flattened, so they are 1-dimensional: .. code-block:: python r, g, b = image.split() r_data = np.array(r.getdata()) # data is now an array of length ysize*xsize g_data = np.array(g.getdata()) b_data = np.array(b.getdata()) print(r_data.shape) .. rst-class:: sphx-glr-script-out Out: .. code-block:: none (92800,) Reshape the image arrays to be 2-dimensional: .. code-block:: python r_data = r_data.reshape(ysize, xsize) g_data = g_data.reshape(ysize, xsize) b_data = b_data.reshape(ysize, xsize) Write out the channels as separate FITS images .. code-block:: python red = fits.PrimaryHDU(data=r_data) red.header['LATOBS'] = "32:11:56" # add spurious header info red.header['LONGOBS'] = "110:56" red.writeto('red.fits') green = fits.PrimaryHDU(data=g_data) green.header['LATOBS'] = "32:11:56" green.header['LONGOBS'] = "110:56" green.writeto('green.fits') blue = fits.PrimaryHDU(data=b_data) blue.header['LATOBS'] = "32:11:56" blue.header['LONGOBS'] = "110:56" blue.writeto('blue.fits') Delete the files created .. code-block:: python import os os.remove('red.fits') os.remove('green.fits') os.remove('blue.fits') **Total running time of the script:** ( 0 minutes 0.073 seconds) .. _sphx_glr_download_generated_examples_io_split-jpeg-to-fits.py: .. only :: html .. container:: sphx-glr-footer :class: sphx-glr-footer-example .. container:: sphx-glr-download :download:`Download Python source code: split-jpeg-to-fits.py ` .. container:: sphx-glr-download :download:`Download Jupyter notebook: split-jpeg-to-fits.ipynb ` .. only:: html .. rst-class:: sphx-glr-signature `Gallery generated by Sphinx-Gallery `_