一张图片有的时候太大了之后,我们需要把大图分割成若干张小图存入数据库,在读取的时候,需要把若干张小图合成一张大图

因此有了如下的代码,首先分割

private static void splitImage() throws IOException {//String originalImg = "C:\\img\\split\\a380_1280x1024.jpg";String originalImg = "D:\\img\\1f90ec47-06f2-4de2-bc68-946d8f93595d-5456FC54C74A297CE994998C2873B370";// 读入大图File file = new File(originalImg);FileInputStream fis = new FileInputStream(file);BufferedImage image = ImageIO.read(fis);// 分割成4*4(16)个小图int rows = 3;int cols = 3;int chunks = rows * cols;// 计算每个小图的宽度和高度int chunkWidth = image.getWidth() / cols;int chunkHeight = image.getHeight() / rows;int count = 0;BufferedImage imgs[] = new BufferedImage[chunks];for (int x = 0; x < rows; x++) {for (int y = 0; y < cols; y++) {//设置小图的大小和类型imgs[count] = new BufferedImage(chunkWidth, chunkHeight, image.getType());//写入图像内容Graphics2D gr = imgs[count++].createGraphics();gr.drawImage(image, 0, 0,chunkWidth, chunkHeight,chunkWidth* y, chunkHeight * x,chunkWidth * y + chunkWidth,chunkHeight * x + chunkHeight, null);gr.dispose();}}// 输出小图for (int i = 0; i < imgs.length; i++) {//ImageIO.write(imgs[i], "jpg", new File("C:\\img\\split\\img" + i + ".jpg"));ImageIO.write(imgs[i], "jpg", new File("d:\\img\\img" + i + ".jpg"));}System.out.println("完成分割!");}

合并:

private static void mergeImage() throws IOException {int rows = 3;int cols = 3;int chunks = rows * cols;int chunkWidth, chunkHeight;int type;//读入小图File[] imgFiles = new File[chunks];for (int i = 0; i < chunks; i++) {imgFiles[i] = new File("d:\\img2\\img" + i + ".jpg");}//创建BufferedImageBufferedImage[] buffImages = new BufferedImage[chunks];for (int i = 0; i < chunks; i++) {buffImages[i] = ImageIO.read(imgFiles[i]);}type = buffImages[0].getType();chunkWidth = buffImages[0].getWidth();chunkHeight = buffImages[0].getHeight();//设置拼接后图的大小和类型BufferedImage finalImg = new BufferedImage(chunkWidth * cols, chunkHeight * rows, type);//写入图像内容int num = 0;for (int i = 0; i < rows; i++) {for (int j = 0; j < cols; j++) {finalImg.createGraphics().drawImage(buffImages[num], chunkWidth * j, chunkHeight * i, null);num++;}}//输出拼接后的图像ImageIO.write(finalImg, "jpeg", new File("d:\\img2\\finalImg.jpg"));InputStream is=(InputStream) ImageIO.createImageInputStream(finalImg);System.out.println("完成拼接!");}
 public static InputStream mergeImage_1(String path,String name,String prefix) throws IOException {int rows = 3;int cols = 3;int chunks = rows * cols;int chunkWidth, chunkHeight;int type;//读入小图File[] imgFiles = new File[chunks];for (int i = 0; i < chunks; i++) {imgFiles[i] = new File(path+name +"_"+ i+"."+prefix);}//创建BufferedImageBufferedImage[] buffImages = new BufferedImage[chunks];for (int i = 0; i < chunks; i++) {buffImages[i] = ImageIO.read(imgFiles[i]);}type = buffImages[0].getType();chunkWidth = buffImages[0].getWidth();chunkHeight = buffImages[0].getHeight();//设置拼接后图的大小和类型BufferedImage finalImg = new BufferedImage(chunkWidth * cols, chunkHeight * rows, type);//写入图像内容int num = 0;for (int i = 0; i < rows; i++) {for (int j = 0; j < cols; j++) {finalImg.createGraphics().drawImage(buffImages[num], chunkWidth * j, chunkHeight * i, null);num++;}}//输出拼接后的图像//ImageIO.write(finalImg, "jpeg", new File("d:\\img2\\finalImg.jpg"));//InputStream is=(InputStream) ImageIO.createImageInputStream(finalImg);finalImg.flush();ByteArrayOutputStream bs = new ByteArrayOutputStream();InputStream is=null;ImageOutputStream imOut;imOut = ImageIO.createImageOutputStream(bs);ImageIO.write(finalImg, prefix,imOut);is= new ByteArrayInputStream(bs.toByteArray());System.out.println("完成拼接!");return is;}

Java图片分割与合并相关推荐

  1. 干货来了,JAVA代码实现图片分割、合并工具类

    几天前在CSDN问答上看到这个问题,想联系提问者,告诉他,我解决了,可是一直没有联系上, 于是决定把实现代码以文章的形式发出来. 思路: 将原图,竖向划分为10个等份,前两个等份作为1个参考图,后8份 ...

  2. java 图片分割_Java atlas图集分割

    java版本的图集分割 atlasFilePath : 图集配置文件 imageFilePath :图集文件 outPath :输出文件夹 图片读取 图片裁剪 图片存储 StringUtil.pars ...

  3. java mp4分割_Java 合并多个MP4视频文件

    局限性 只支持mp4文件 经过尝试对于一些mp4文件分割不了 依赖 com.googlecode.mp4parser isoparser 1.1.22 工具类 package com.example. ...

  4. thinkphp5 图片压缩旋转_【好工具】在线免费无限制的PDF处理工具(转换、编辑、分割、合并、压缩)...

    在线好用的 PDF 编辑工具,PDF 转文档,PDF 压缩.编辑.分割不再难,解密 PDF 文档也在行,快来试试- 作者 & 编辑 | Leong SmallPDF SmallPDF http ...

  5. java io大文件_JavaIO流对大文件进行分割与合并

    对于大文件传输不方便时候可以试一下分割之后再操作: package com.lym; import java.io.BufferedInputStream; import java.io.Buffer ...

  6. java 图片合并_Java如何实现图片的叠加与拼接操作

    关于Java实现图片的叠加与拼接的文章网络上确实很多,碰巧小编开发工作中也遇到这些问题,就做了简要的梳理,作为笔记以备不时之需. Java对图片的处理主要使用的是BufferedImage类. Buf ...

  7. java 输入流可以合并吗_Java 使用IO流实现大文件的分割与合并实例详解

    java 使用IO流实现大文件的分割与合并 文件分割应该算一个比较实用的功能,举例子说明吧比如说:你有一个3G的文件要从一台电脑Copy到另一台电脑, 但是你的存储设备(比如SD卡)只有1G ,这个时 ...

  8. Java 批量导出PPT为图片,并合并生成PDF

    Java 批量导出PPT为图片,并合并生成PDF 最近有小伙伴需要把PPT打印,但苦于PPT太多,浪费纸张,所以特别写了这个合并多张PPT到一张A4纸上并生成PDF方便打印的程序: 前期准备 把PPT ...

  9. Java图片处理 - 创建工具类

    Java图片处理 - 创建工具类 Java原生代码实现工具类 Java原生代码实现使用jdk内部的GIFImageReader.GIFImageWriter等类,maven在编译的时候会提示这是sun ...

最新文章

  1. QTP的那些事--不能识别web上的测试对象
  2. 专家提醒:计算机专业毕业生求职三要点!
  3. matlab datetime时间处理、时间转换
  4. LeetCode - Medium - 114. Flatten Binary Tree to Linked List
  5. 去除List集合中的重复元素,并保持原有数据的初始顺序
  6. 打不开文件F:\vmware -副本\Ubuntu 16.vmdk:该虚拟机的磁盘已经由虚拟机或者快照使用
  7. WinDbg使用摘要
  8. cnblogs用户体验评价
  9. 纽微特反省:经常跑同一个客户,也没新东西看
  10. VS2017适配版的 VA 安装教程
  11. CISP 考试教材《第 3 章 知识域:信息安全管理》知识整理
  12. android显示缩略图,Android:是否可以显示视频缩略图?
  13. javaScript学习笔记【尚硅谷】
  14. 对静态页面的一些理解
  15. 前端面试题之浏览器原理篇
  16. 什么是知识图谱?通俗易懂
  17. 3dsmax2021图文安装教程
  18. 阿里云 Elasticsearch简介和购买流程
  19. LeetCode 712. 两个字符串的最小ASCII删除和
  20. Jenkins:設定一次後就很方便的排程工具

热门文章

  1. R中namespace ‘xxxpackage’ xx版本 is being loaded, but >= xx版本 is required问题解决
  2. Linux下vi进入一个文件后,按Esc+q无法退出编辑模式的解决办法。
  3. 学习方法:十步学习法
  4. Adobe-字体名-字体family-对应关系
  5. es6.3.1 搜索中must和should混合的用法
  6. 邮件伪造测试-Swaks
  7. BlueTooth: 蓝牙基础知识进阶——Packet解析
  8. 「HTML和CSS入门指南」hr 标签详解
  9. 怎样在PS中使用渐变功能对图片调色?原来还有这样的调色模式!
  10. 计算机cad查询,CAD的查询功能