如何提取tiff图像

如何从 TIFF 文件中提取图像

TIF 的 TIFF 是 Tag Image File Format 的缩写,是流行的光栅图形图像之一,被图形艺术家、出版业和摄影师广泛使用。 TIFF 不同于 JPEGGIFPNG,因为它是一种“未压缩”格式,可以存储比 JPEG 格式更多的图像数据。现在,TIFF 文件的显着特征之一是它能够将多个图像(每个图像都有多个通道)存储为图像时间堆栈或 z 堆栈中的连续帧。因此,在本文中,我们将详细探讨如何使用 Java Cloud SDK 从多帧 TIFF 图像中提取帧。

TIFF 图像处理 API

我们创建了一个图像处理 API,提供编辑、操作和转换光栅、图元文件、photoshop 和其他支持的格式 为各种文件格式的功能。现在谈论 TIFF 图像处理,API 非常有能力处理 TIFF 图像。因此,根据本文的范围,我们将使用 Aspose.Imaging Cloud SDK for Java,它是 REST API 的包装器。因此,利用其功能的第一步是通过在 pom.xml(maven 构建类型项目)中包含以下信息来在 java 项目中添加其引用。

<repositories> 
    <repository>
        <id>aspose-cloud</id>
        <name>artifact.aspose-cloud-releases</name>
        <url>https://artifact.aspose.cloud/repo</url>
    </repository>   
</repositories>

<dependencies>
    <dependency>
        <groupId>com.aspose</groupId>
        <artifactId>aspose-imaging-cloud</artifactId>
        <version>22.4</version>
    </dependency>
</dependencies>

下一步是从 Cloud Dashboard 获取客户端凭据详细信息,如果您没有 Aspose Cloud Dashboard 的帐户,请通过有效的电子邮件地址创建一个免费帐户。现在使用新创建的帐户登录并在 Aspose Cloud Dashboard 中查找/创建客户端 ID 和客户端密码。

如何在 Java 中提取 TIFF 图像

让我们探索有关如何使用 Java 代码片段从 tiff 文件中提取图像的详细信息。请注意,API 还允许您调整大小、裁剪和旋转翻转提取的帧。此外,布尔参数 saveOtherFrames 之一允许您指定结果是包含所有其他帧还是仅包含指定帧。

  • 首先,根据个性化客户端凭证创建一个 ImagingApi 对象
  • 其次,使用 readAllBytes(…) 方法读取第一个 TIFF 图像的内容并传递给 byte[] 数组
  • 第三,创建一个 UploadFileRequest 类的实例,我们在其中指定 TIFF over Cloud storage 的名称
  • 现在使用 uploadFile(…) 方法将第一个 TIFF 图像上传到云存储
  • 下一步是指定 TIFF 帧索引、提取帧的高度和宽度、提取原点,并指定是否需要提取帧的特定角度
  • 现在创建一个 GetImageFrameRequest 对象,我们在其中指定输入 TIFF 图像和上面定义的属性
  • 调用 ImagingAPI 的 getImageFrame(…) 方法获取 TIFF 帧
  • 使用 FileOutputStream 对象将提取的帧保存到本地驱动器
// 从 https://dashboard.aspose.cloud/ 获取 ClientID 和 ClientSecret
String clientId = "7ef10407-c1b7-43bd-9603-5ea9c6db83cd";
String clientSecret = "ba7cc4dc0c0478d7b508dd8ffa029845";

// 创建成像对象
ImagingApi imageApi = new ImagingApi(clientSecret, clientId);

// 从本地系统加载第一个 TIFF 图像
File file1 = new File("DeskewSampleImage.tif");
byte[] imageStream = Files.readAllBytes(file1.toPath());
			
// 创建文件上传请求对象
UploadFileRequest uploadRequest = new UploadFileRequest("input.tiff",imageStream,null);
// 将第一张 TIFF 图像上传到云存储
imageApi.uploadFile(uploadRequest);

Integer frameId = 0; // Frame number inside TIFF
// 提取框架的新宽度和高度
Integer newWidth = 1000;
Integer newHeight = 1400;

// 开始帧提取的起点
Integer x = 10;
Integer y = 10;

// 要提取帧的矩形区域
Integer rectWidth = 900;
Integer rectHeight = 800;

// 指定提取的 TIFF 帧的旋转角度
String rotateFlipMethod = "Rotate90FlipY";
// 结果仅包含指定的帧而不包含其他帧
Boolean saveOtherFrames = false;

// 创建请求对象以根据指定的详细信息提取 tiff 帧
GetImageFrameRequest getImageFrameRequest = new GetImageFrameRequest("input.tiff", frameId, newWidth, newHeight,
                    x, y, rectWidth, rectHeight, null, saveOtherFrames, null, null);

// 提取的帧在响应流中返回
byte[] updatedImage = imageApi.getImageFrame(getImageFrameRequest);

// 将提取的 TIFF 帧保存在本地存储中
FileOutputStream fos = new FileOutputStream("/Users/s4/Documents/" + "Extracted-TIFF.tiff");
fos.write(updatedImage);
fos.close();
提取 tiff 帧

获取 TIFF 帧预览

上例中使用的示例 TIFF 图像可以从 DeskewSampleImage.tif 下载。

使用 cURL 命令处理 TIFF 图像

访问 REST API 的另一种便捷方式是通过 cURL 命令。由于Aspose.Imaging Cloud是基于REST架构的,所以我们也可以使用cURL命令提取tiff图像帧。现在,此活动的先决条件是使用以下命令生成 JWT 访问令牌(基于客户端凭据)。

curl -v "https://api.aspose.cloud/connect/token" \
-X POST \
-d "grant_type=client_credentials&client_id=bb959721-5780-4be6-be35-ff5c3a6aa4a2&client_secret=4d84d5f6584160cbd91dba1fe145db14" \
-H "Content-Type: application/x-www-form-urlencoded" \
-H "Accept: application/json"

在生成 JWT 令牌后,我们需要执行以下命令来提取 TIFF 图像帧。

curl -v -X GET "https://api.aspose.cloud/v3.0/imaging/first.tiff/frames/0?newWidth=1000&newHeight=1200&x=10&y=10&rectWidth=800&rectHeight=800&saveOtherFrames=false" \
-H  "accept: application/json" \
-H  "authorization: Bearer <JWT Token>" \
-o ExtractedFrame.tiff

结论

至此,我们已经了解了有关如何从 tiff 文件中提取图像的所有必要细节。我们探索了使用 Java Java 代码片段或通过 cURL 命令提取 TIFF 帧的选项。另一种测试 API 有前途的功能的方法是通过 SwaggerUI,如果您想修改 SDK 的源代码,您可以从 GitHub 下载(我们所有的 Cloud SDK 都是在 MIT 下开发的执照)。

尽管如此,产品文档 是了解 API 提供的其他令人兴奋的功能的绝佳信息来源 最后,如果您在使用 API 时遇到任何问题,您可以考虑通过免费联系我们快速解决产品支持论坛

相关文章

请访问以下链接以了解更多信息: