我正在寻找一个可以打开和复制大型TIFF文件部分的库.我查看了LibTiff.Net,它可以非常快速地打开文件,但它没有任何用于裁剪或复制图像部分的功能.我的图像向上是100,000 x 100,000像素,并且创建System.Drawing.Bitmap该尺寸会使应用程序崩溃,因此转换为Bitmap第一个不是一个选项.
任何人都可以推荐.NET库吗?
我尝试了以下代码来完成读写tiff图像的任务:
// Define the source and destination file names.
String inputFile = /images/FarmHouse.tif
String outputFile = /images/FarmHouse.bmp
// Load the input image.
RenderedOp src = JAI.create("fileload", inputFile);
// Encode the file as a BMP image.
FileOutputStream stream =
new FileOutputStream(outputFile);
JAI.create("encode", src, stream, BMP, null);
// Store the image in the BMP format.
JAI.create("filestore", src, outputFile, BMP, null);
Run Code Online (Sandbox Code Playgroud)
但是,当我运行代码时,我收到以下错误消息:
Caused by: java.lang.IllegalArgumentException: Only images with either 1 or 3 bands
can be written out as BMP files.
at com.sun.media.jai.codecimpl.BMPImageEncoder.encode(BMPImageEncoder.java:123)
at …Run Code Online (Sandbox Code Playgroud) 如何在Python中转换和保存16位单通道TIF?
我可以毫无问题地加载16位和32位图像,并看到32位图像是模式F,16位图像是模式I;16S:
import Image
i32 = Image.open('32.tif')
i16 = Image.open('16.tif')
i32
# <TiffImagePlugin.TiffImageFile image mode=F size=2000x1600 at 0x1098E5518>
i16
# <TiffImagePlugin.TiffImageFile image mode=I;16S size=2000x1600 at 0x1098B6DD0>
Run Code Online (Sandbox Code Playgroud)
但我在使用16位图像时遇到问题.如果我想保存为PNG,我不能直接这样做:
i32.save('foo.png')
# IOError: cannot write mode F as PNG
i16.save('foo.png')
# ValueError: unrecognized mode
Run Code Online (Sandbox Code Playgroud)
如果我转换32位图像,我可以保存它:
i32.convert('L').save('foo.png')
Run Code Online (Sandbox Code Playgroud)
但是相同的命令不适用于16位图像:
i16.convert('L').save('foo.png')
# ValueError: unrecognized mode
Run Code Online (Sandbox Code Playgroud) 我有两页的tiff图像.当我将文件转换为jpg格式时,我丢失了第二页.有没有办法将tiff文件上的两个图像放入一个jpg文件中.因为tiff文件太大我不得不减小它们的大小.有没有办法以编程方式减少tiff文件大小?它也可以解决我的问题.
当我PIL==1.1.7用来加载TIFF图像时,它似乎得到了颜色空间错误:

这是怎么回事?
.tiff使用创建convert test.jpg test.tiff(但似乎与其他TIFF文件发生过)PIL.Image.DEBUG = True:
>>> from PIL import Image
>>> Image.DEBUG = True
>>> Image.open("/tmp/test.tiff").show()
tag: ImageWidth (256) - type: short (3) - value: (560,)
tag: ImageLength (257) - type: short (3) - value: (401,)
tag: BitsPerSample (258) - type: short (3) - value: (8, 8, 8)
tag: Compression (259) - type: short (3) - value: (7,)
tag: PhotometricInterpretation (262) - type: short (3) - … 我正在尝试用LibTIFF写入10,12位RGB TIFF文件.
像素数据本地保存在unsigned short缓冲区(16位)
1)如果设置TIFFTAG_BITSPERSAMPLE为10或12,则从缓冲区中读取的位数不足,输出不正确.(我知道它只是读取每个组件10或12位,而不是16,这是问题)
2)我尝试将缓冲区中的位打包,因此它实际上是12-R,12-G,12-B.在这种情况下,我认为文件正确写入,但我找不到的查看器可以正确显示此图像.
3)如果我设置TIFFTAG_BITSPERSAMPLE为16,观众可以显示TIFF图像,但是我有一个问题,我不知道图像最初是10位还是12位(如果我想稍后用LibTIFF读取它).此外,观众期望动态范围是16位而不是10或12,也导致视图不良.
4)最烦人的部分是我在网上找不到10,12或14位TIFF图像,看看标题应该是什么样子.
最后,将10或12位图像数据写入TIFF文件的正确方法是什么?
是否有一种很好的方法可以查看图像的格式,而无需将整个文件读入内存?
显然这会因格式而异(我对TIFF文件特别感兴趣)但是什么样的过程对于确定文件的图像格式是有用的而无需读取整个文件?
奖励:如果图像是Base64编码的字符串怎么办?在解码前推断它的任何可靠方法?
我正在寻找java API将JPEG文件流转换为TIFF文件.我看了JAI,但没有找到类似于我正在看的东西.
有人能指出我这样做的好API吗?
在我作为研究生的工作中,我捕获显微镜图像并使用python将它们保存为原始tif.我想添加元数据,例如我正在使用的显微镜名称,放大倍数和成像激光波长.这些细节对于我如何对图像进行后期处理非常重要.
我应该可以用tif做到这一点,对吗?既然它有一个标题?
我能够在PIL图像中添加信息:
im.info['microscope'] = 'george'
Run Code Online (Sandbox Code Playgroud)
但是当我保存并加载该图像时,我添加的信息就消失了.
我对所有建议持开放态度.如果我也有,我只会用元数据保存一个单独的.txt文件,但将它嵌入图像中会非常好.谢谢.