问题标签 [libtiff]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
563 浏览

c - TiffLib 泄漏无效文件的句柄

如果我尝试用 . 打开无效的 TIFF 文件TIFFOpen(),函数将返回NULL. 由于某种原因,没有调用错误处理程序。但是,该文件仍处于打开状态,因此我无法从同一进程中删除/覆盖它。

我尝试使用TIFFFdOpen(),以便我可以自己关闭句柄,但由于某种原因,它在有效 TIFF 上给了我这个错误:“无法读取 TIFF 标头”。这次错误是通过错误处理程序传递的。

我该如何解决这些问题中的任何一个?

更新:我说的是问题TIFFOpen()本身,而不是稍后调用的函数。例如,如果 TIFF 文件的大小为零,它们可能会发生。

0 投票
5 回答
4068 浏览

c++ - efficient TIFF tile extraction C++

I am working with 1gb large tiff images of around 20000 x 20000 pixels. I need to extract several tiles (of about 300x300 pixels) out of the images, in random positions.

I tried the following solutions:

  • Libtiff (the only low level library I could find) offers TIFFReadline() but that means reading in around 19700 unnecesary pixels.

  • I implemented my own tiff reader which extracts a tile out of the image without reading in unnecesary pixels. I expected it to be faster, but doing a seekg for every line of the tile makes it very slow. I also tried reading to a buffer all the lines of the file that include my tile, and then extracting the tile from the buffer, but results are more or less the same.

I'd like to receive suggestions that would improve my tile extraction tool!

Everything is welcome, maybe you can propose a more efficient library I could use, some tips about C/C++ I/O, some higher level strategy for my needs, etc.

Regards, Juan

0 投票
7 回答
7723 浏览

c++ - LibTIFF:从 TIFF 图像中提取所有标签

我目前正在从事一个项目,该项目需要我将 TIFF 图像拆分为一个包含所有标签的文件和一个包含所有图像数据的文件,并从这些文件中重建一个 TIFF 图像。唯一的问题是 LibTIFF 似乎没有提供从图像中​​获取所有标签的简单方法。我尝试使用 TIFFGetTagListCount 然后 TIFFGetField 来检索标签,但这只会返回标签的一小部分。我已经开始推出自己的版本,但我只想仔细检查并确保我没有忽略某些东西,因为这似乎是一个非常明显的功能,应该包含在库中。

0 投票
3 回答
19592 浏览

c# - 使用 C# 中的 LibTiff(访问平铺的 TIFF 图像)

我想使用 LibTiff 访问非常大的 TIFF 文件。我需要多个页面和图块之类的功能,因此 LibTiff 似乎是正确的方法。任何人都可以帮助我如何使用 C# 中的 LibTiff 吗?我找到了一些链接(例如包含部分代码的 blog.bee-ee。但我无法获得一个版本。我查看了FreeImage但发现它不合适(图片约为 800 MPixel 8 或 16位灰度-> 800-1600 MByte)大小,我无法在 32 位环境中将其加载到内存中)

我在 C/C++ 方面非常有经验,但在 C# 方面还没有。谁能帮我做一个包装或一些提示?

注意:我需要页面来访问 tiff 中的金字塔平面(多分辨率),以及 256x256 的图块,以便快速访问图像的不同部分而无需立即加载。

[编辑] LibTIFF.NET解决方案对我来说似乎最实用。我现在将它集成到产品开发中,它可能会为我省去很多关于进出托管内存的麻烦。我还没有尝试过“回调”功能,这似乎可以通过 .net 方式很好地解决。感谢您对 stackoverflow 的帮助 [/Edit]

0 投票
2 回答
1974 浏览

tiff - 将大 1 位 tiff 缩小为 8 位灰度/24 位

假设我有一个 100000x100000 1 位(K 通道)tiff,dpi 为 2000,我想将其缩小到 200 的 dpi。我得到的图像将是 10000x10000 图像。这是否意味着 1 位图像中的每 10 位对应于新图像中的 1 个像素?顺便说一句,我正在使用 libtiff 并使用 tiffreadscanline 读取 1 位 tiff。谢谢!

0 投票
2 回答
6357 浏览

c# - 在 C# 中使用 libtiff 从一种 TIFF 格式转换为另一种

我有一个使用 JPEG 格式的 TIFF,WPF/C# 无法通过TiffBitmapDecoder. 我们的客户使用文件格式,而我们当前的 C++ 和 Java 代码处理它。

我需要将其转换为可以使用TiffBitmapDecoder或标准显示的格式BitmapImage。看起来 libtiff 的 C# 版本是可行的方法,但我没有任何运气转换代码。

这是我的尝试-我总是以损坏的文件告终。

0 投票
2 回答
2394 浏览

c++ - 尝试将“ExtraSamples”标签应用于要写入的 TIFF 文件时出错

我有一个程序可以拍摄图像并将其写入 TIFF 文件。图像可以是灰度(8 位)、带 Alpha 通道的灰度(16 位)、RGB(24 位)或 ARGB(32 位)。我在写出没有 alpha 通道的图像时没有任何问题,但是对于具有 alpha 的图像,当我尝试设置额外的样本标记时,我会被发送到由 TIFFSetErrorHandler 设置的 TIFF 错误处理例程。传入的消息<filename>: Bad value 1 for "ExtraSamples"位于 _TIFFVSetField 模块中。下面的一些示例代码:

据我所知,标签永远不会被写入文件。幸运的是,GIMP 仍然可以识别附加通道是 alpha,但是需要读取这些 TIFF 的其他一些程序并不那么慷慨。我是否缺少必须在 TIFFTAG_EXTRASAMPLES 之前设置的标签?我是否缺少其他需要存在的标签?任何帮助,将不胜感激。

0 投票
2 回答
1607 浏览

c++ - 无法在 Mac 上使用 Libtiff 写入 TIFF 文件

TIFFWriteScanline 在 Windows 和 Linux 上工作,但在 Mac 上失败

更新的问题:

我使用 libtiff3.9.4 在 mac 10.6.4 上用 c++ 读写 TIFF 文件。我的项目被编写为可移植的,并且在 Windows 32 位和 Ubuntu 64 位上都可以正常运行。但是在 Mac 上,Libtiff 函数 TIFFWriteScanline 总是失败(它返回!= 1)。TIFF 文件已创建,但没有任何内容。我能够读取 LZW 压缩图像,但无法写入。此外,该程序还适用于 Windows 和 linux 上的 CCITT Group4 图像,但在 mac 上读取扫描线失败。

我已经尝试了 libtiff3.8.2 和 libtiff4.0.0beta6 没有任何运气。

有什么想法为什么 libtiff 在 Linux 上运行良好时不会在 Mac 上编写扫描线?

代码:

0 投票
3 回答
2955 浏览

tiff - tiffcp.exe 在循环中将结果文件与结果文件合并

我正在构建一个 Web 应用程序,它需要几个 tiff 图像文件,并使用命令行中的 GNUWin32 tiffcp.exe 将它们合并到一个单个 tiff 图像文件中。

我这样做的方式是遍历文件列表并构建一串文件名以合并到一个变量中。

strfileList = "c:folder\folder\folder\aased98-def-wsdeff-434fsdsd-dvv.tif c:folder\folder\folder\aased98-def-wsdeff-434fsdsd-axs.tif c:folder\folder\folder\aased98 -def-wsdeff-434fsdsd-dxzs.tif"

然后我就写到命令行:

tiffcp.exe strFileList results.tif

文件名是 guid,因此路径相当长,我无法控制它们来缩短它们。因此,如果我有一堆这些文档(超过 20 个文件左右),字符串变量的长度超过了 windows 命令行的限制,并且合并失败。

由于这个过程只是合并文件,我的下一个想法是不要将文件名写入字符串,而是一次合并一个文件。所以第一次循环运行以下类型的代码:

tiffcp.exe 文件 1.tif 结果.tif

结果是一个完美的 476k tif 文件。但循环的下一次迭代需要合并第二个文件加上第一个“结果”tif 文件的内容。所以我这样做:

tiffcp.exe 结果.tif 文件 2.tiff 结果.tif

每次结果都是一个空白的 1K tiff 文件?

我能找到的所有 tiffcp.exe 示例都说 file1.tif file2.tif results.tif,没有一个使用结果文件写回自身?

关于如何做到这一点的任何建议?

0 投票
1 回答
2089 浏览

c++ - 检测 TIFF 图像中每像素的位数

使用 LibTiff 处理单色 tiff 图像,我可以读取“每个样本的位数”参数:TIFFTAG_BITSPERSAMPLE。当它返回 16 时,此类图像的实际“每像素位数”值可能是 9 到 16 之间的任何值,在大多数情况下是 10、12、14 或 16。是否有任何 tiff 图像标签可以保留此值?