• Java从Tif中抽取最大的那张图进行裁剪成x*y份


            之前我有一篇帖子《kfb格式文件转jpg格式》讲述到 kfb ===> tif ===> jpg,但是针对于超大tif中的大图是无法顺利提取的,就算是能顺利提取,试想一下,2G的tif文件,如果能提取处理最大的那张图,并且在不压缩的情况下,jpg大图大小高达1G,前端也是无法顺利加载展示的。

            这里我为大家带来了解决方案:将tif中最大的那张图切割成 x * y 份,之后让前端去对每一份进行渲染加载。经过了两周时间,百度或是谷歌的雷都被我踩完了(搜索结果都不怎么靠谱)。多次实验后,总算是成功了。

            针对与tif中的最大的那张图的切割,我总结出了切割实现方法,仅供参考。

    利用jai-imageio进行处理

    1. package com.lonzh.utils;
    2. import javax.imageio.IIOException;
    3. import javax.imageio.ImageIO;
    4. import javax.imageio.ImageReadParam;
    5. import javax.imageio.ImageReader;
    6. import javax.imageio.stream.FileImageInputStream;
    7. import java.awt.*;
    8. import java.awt.image.BufferedImage;
    9. import java.io.File;
    10. import java.io.IOException;
    11. import java.util.ArrayList;
    12. import java.util.Iterator;
    13. import java.util.List;
    14. /**
    15. * 图片切割
    16. *
    17. * @author DaiHaijiao
    18. */
    19. public class ImgCutUtil {
    20. public static void main(String[] args) throws Exception {
    21. cut("D:\\病理切片\\教学切片(新)\\BL-01-11 心肌梗死.tif");
    22. }
    23. /**
    24. * @param imageWidth 图片宽度
    25. * @param imageHeight 图片高度
    26. * @param bisectionNumWidth 宽度方向等分数
    27. * @param bisectionNumHeight 高度方向等分数
    28. */
    29. private static List listPosition(int imageWidth, int imageHeight, int bisectionNumWidth, int bisectionNumHeight) {
    30. List list = new ArrayList<>();
    31. //每个部分的宽度
    32. int partWidth = imageWidth / bisectionNumWidth;
    33. //宽方向的余数
    34. int remainderWidth = imageWidth % bisectionNumWidth;
    35. //每个部分的高度
    36. int
  • 相关阅读:
    Unity-ProBuilder
    【小沐学C++】C++ 基于Premake构建工程项目(Windows)
    DRM全解析 —— plane详解(1)
    Intel汇编-内联汇编使用寄存器
    一文弄懂JUnit5相关注解
    架构师的 36 项修炼第08讲:高可用系统架构设计
    LeetCode 2511. 最多可以摧毁的敌人城堡数目
    Sentinel 分布式系统
    virtualbox虚拟机安装Ubuntu异常处理:FATAL: NO bootable medium found! System halted
    VSCODE环境搭建
  • 原文地址:https://blog.csdn.net/Dai_Haijiao/article/details/132870803