使用Matplotlib将图片保存为.tiff格式

 更新时间:2023年09月14日 14:52:16   作者:datamonday  
这篇文章主要介绍了使用Matplotlib将图片保存为.tiff格式问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

Matplotlib将图片保存为.tiff格式

sci论文为防止图片失真,最好提交 tiff 格式(位图)或者其它类型的矢量图。

因为经常用matplotlib绘图,于是可以按照以下方法将图片保存为 tiff 格式,之后使用PS进行压缩。

主要用到了io和PIL模块,流程是先保存为png格式,在后再加载,通过PIL保存为 tiff 格式。

举个简单的例子

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.lines import Line2D
import io
from PIL import Image
custom_lines = [Line2D([0], [0], color=cmap(0.), lw=4),
                Line2D([0], [0], color=cmap(.5), lw=4),
                Line2D([0], [0], color=cmap(1.), lw=4)]
N = 10
data = [np.logspace(0, 1, 100) + np.random.randn(100) + ii for ii in range(N)]
data = np.array(data).T
fig, ax = plt.subplots()
lines = ax.plot(data)
ax.legend(custom_lines, ['Cold', 'Medium', 'Hot'])
# Save the image in memory in PNG format
png1 = io.BytesIO()
plt.savefig(png1, format="png", dpi=500, pad_inches = .1, bbox_inches = 'tight')
# Load this image into PIL
png2 = Image.open(png1)
# Save as TIFF
png2.save("ap_qt_ad.tiff")
png1.close()

示例结果:

python图像处理之tiff文件的保存与解析

tiff文件是一种常用的图像文件格式,支持将多幅图像保存到一个文件中,极大得方便了图像的保存和处理。

python中支持tiff文件处理的是libtiff模块中的TIFF类(libtiff下载链接https://pypi.python.org/pypi/libtiff/)。

这里主要介绍tiff文件的解析和保存,

具体见如下代码:

from libtiff import TIFF
from scipy import misc
##tiff文件解析成图像序列
##tiff_image_name: tiff文件名;
##out_folder:保存图像序列的文件夹
##out_type:保存图像的类型,如.jpg、.png、.bmp等
def tiff_to_image_array(tiff_image_name, out_folder, out_type): 
    tif = TIFF.open(tiff_image_name, mode = "r")
    idx = 0
    for im in list(tif.iter_images()):
        #
        im_name = out_folder + str(idx) + out_type
        misc.imsave(im_name, im)
        print im_name, 'successfully saved!!!'
        idx = idx + 1
    return
##图像序列保存成tiff文件
##image_dir:图像序列所在文件夹
##file_name:要保存的tiff文件名
##image_type:图像序列的类型
##image_num:要保存的图像数目
def image_array_to_tiff(image_dir, file_name, image_type, image_num):
    out_tiff = TIFF.open(file_name, mode = 'w')
    #这里假定图像名按序号排列
    for i in range(0, image_num):
        image_name = image_dir + str(i) + image_type
        image_array = Image.open(image_name)
        #缩放成统一尺寸
        img = image_array.resize((480, 480), Image.ANTIALIAS)
        out_tiff.write_image(img, compression = None, write_rgb = True)
    out_tiff.close()
    return 

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

最新评论