之前我有一篇帖子《kfb格式文件转jpg格式》讲述到 kfb ===> tif ===> jpg,但是针对于超大tif中的大图是无法顺利提取的,就算是能顺利提取,试想一下,2G的tif文件,如果能提取处理最大的那张图,并且在不压缩的情况下,jpg大图大小高达1G,前端也是无法顺利加载展示的。
这里我为大家带来了解决方案:将tif中最大的那张图切割成 x * y 份,之后让前端去对每一份进行渲染加载。经过了两周时间,百度或是谷歌的雷都被我踩完了(搜索结果都不怎么靠谱)。多次实验后,总算是成功了。
针对与tif中的最大的那张图的切割,我总结出了切割实现方法,仅供参考。
利用jai-imageio进行处理
- package com.lonzh.utils;
-
- import javax.imageio.IIOException;
- import javax.imageio.ImageIO;
- import javax.imageio.ImageReadParam;
- import javax.imageio.ImageReader;
- import javax.imageio.stream.FileImageInputStream;
- import java.awt.*;
- import java.awt.image.BufferedImage;
- import java.io.File;
- import java.io.IOException;
- import java.util.ArrayList;
- import java.util.Iterator;
- import java.util.List;
-
- /**
- * 图片切割
- *
- * @author DaiHaijiao
- */
- public class ImgCutUtil {
-
-
- public static void main(String[] args) throws Exception {
- cut("D:\\病理切片\\教学切片(新)\\BL-01-11 心肌梗死.tif");
- }
-
- /**
- * @param imageWidth 图片宽度
- * @param imageHeight 图片高度
- * @param bisectionNumWidth 宽度方向等分数
- * @param bisectionNumHeight 高度方向等分数
- */
- private static List
listPosition(int imageWidth, int imageHeight, int bisectionNumWidth, int bisectionNumHeight) { - List
list = new ArrayList<>(); - //每个部分的宽度
- int partWidth = imageWidth / bisectionNumWidth;
- //宽方向的余数
- int remainderWidth = imageWidth % bisectionNumWidth;
- //每个部分的高度
- int