总看别人微博的九宫格广告,想想,实现倒是很简单,应该说简单到爆了,不过还是手写实现一下吧

主要思想:

1. 一个待绘制的BufferedImage,长宽都是原图的1/3

2. 使用graphics,通过偏移量选择绘制原图的区域

3. 绘制结束就可以输出到文件

4. 通过两层循环,绘制9个位置的全部图片

说完上图

原图

切分后的图片

代码也比较简单,实现起来很!方!便!

     File imgfile;Image originimg;BufferedImage image;Graphics g;FileOutputStream out;JPEGImageEncoder encoder;try {// 获取原始图片imgfile = new File("input.jpg");originimg = ImageIO.read(imgfile);// 获取原始图片的宽和高int width = originimg.getWidth(null);int height = originimg.getHeight(null);for (int i = 0; i < 3; i++) {for (int j = 0; j < 3; j++) {// 九宫格,每张图片大小都为原来的1/3image = new BufferedImage(width / 3, height / 3,BufferedImage.TYPE_INT_RGB);// 创建图片g = image.createGraphics();// 绘制图片g.drawImage(originimg, width * -i / 3, height * -j / 3,width, height, null);// 图片绘制完成,关闭gg.dispose();// 输出流和输出文件out = new FileOutputStream("output" + i + "-" + j + ".jpg");// 下面代码将输出图片转换为JPEG、JPG文件encoder = JPEGCodec.createJPEGEncoder(out);encoder.encode(image);out.close();System.out.println("输出文件output" + i + "-" + j + ".jpg");}}} catch (Exception e) {e.printStackTrace();}

打完收工

这里的问题就在于长方形的图片切出来也是长方形的,未必好看,但是直接切成正方形的需要考虑截取哪一部分

以下图为例

原图为长方形的截图效果如下

如果依然希望输出正方型,压缩图片效果不好,所以采用直接截取图片的方式

File imgfile;Image originimg;BufferedImage image;Graphics g;FileOutputStream out;JPEGImageEncoder encoder;try {// 获取原始图片imgfile = new File("input3.jpg");originimg = ImageIO.read(imgfile);// 获取原始图片的宽和高int width = originimg.getWidth(null);int height = originimg.getHeight(null);// 如果输入为长方形,重新计算长宽int outputwidth = width > height ? height : width;int outputheight = outputwidth;for (int i = 0; i < 3; i++) {for (int j = 0; j < 3; j++) {// 九宫格,每张图片大小都为原来的1/3// 长方形,新建图片大小为计算后的正方型的1/3image = new BufferedImage(outputwidth / 3,outputheight / 3, BufferedImage.TYPE_INT_RGB);// 创建图片g = image.createGraphics();// 绘制图片// 长方形,计算偏移量的数据采用计算后的正方形g.drawImage(originimg, outputwidth * -i / 3, outputheight* -j / 3, width, height, null);// 图片绘制完成,关闭gg.dispose();// 输出流和输出文件out = new FileOutputStream("output" + i + "-" + j + ".jpg");// 下面代码将输出图片转换为JPEG、JPG文件encoder = JPEGCodec.createJPEGEncoder(out);encoder.encode(image);out.close();System.out.println("输出文件output" + i + "-" + j + ".jpg");}}} catch (Exception e) {e.printStackTrace();}

最终截取了正方形的部分,效果如下

java实现微博九宫格图片切分相关推荐

  1. python如何将图片打包进exe里_用python将图片切分为九宫格 并打包成exe可执行文件(附源码)...

    前言 经常在朋友圈或者微博看到九宫格显示的图片,虽然是九张图片,但是这是一张图片经过切割而成的,显示效果很震撼.今天,我们就用python将图片切分为九宫格,并打包成exe可执行文件,就算不需要代码也 ...

  2. python语言编写一个生成九宫格图片的代码_python实现图片九宫格分割

    大家都知道在微信朋友圈或者微博以及QQ动态中,有很多"强迫症患者"发图片都爱发9张,而有些图是一张图片分成的九宫图,对于这种操作,大家知道是怎么做到的吗? 本文就是用Python做 ...

  3. ImageMagick将多张图片拼接成一张图片_高逼格九宫格图片,2020年朋友圈图片,自己做不求人...

    元旦快乐!! 2019年过去了,2020年你的计划里不知道还有没有2018年的待完成事项呢?(拖延症的话,经常是拖着拖着就没了吧= =)无论如何在许下愿望列下清单的那一刻我们也是斗志满分阿! 今天给大 ...

  4. android 最新 九宫格,Android开发中怎么显示一个九宫格图片

    Android开发中怎么显示一个九宫格图片 发布时间:2020-11-21 15:09:33 来源:亿速云 阅读:86 作者:Leah 本篇文章给大家分享的是有关Android开发中怎么显示一个九宫格 ...

  5. android从九宫格全屏预览,仿微信朋友圈展示图片的九宫格图片展示控件,支持点击图片全屏预览大图...

    AssNineGridView 仿微信朋友圈展示图片的九宫格图片展示控件,支持点击图片全屏预览大图(可自定义). 写在前面 这是一个九宫格控件,本来是很久之前就写好了,现在才开源出来,也是看了很多优秀 ...

  6. Android 实现仿微信朋友圈九宫格图片+NineGridView+ImageWatcher(图片查看:1.预览,2.拖动,3.放大,4.左右滑动,5.长按保存到手机)的功能

    一.测试 实现: 二.添加依赖包: implementation 'androidx.appcompat:appcompat:1.1.0'implementation 'androidx.recycl ...

  7. python123九宫格输入_python制作朋友圈九宫格图片

    本文实例为大家分享了python朋友圈九宫格图片的具体制作代码,供大家参考,具体内容如下 将一张图片,切分成九宫格的样式: 原图: # -*- coding: UTF-8 -*- from PIL i ...

  8. 如何利用PPT制作九宫格图片效果

    在朋友圈.微博经常可以看到有人发九宫格图片.这里所说的九宫格图片其实是一张图,分在九张图片中显示,能够产生一种留白和想象的空间. 在制作PPT的过程中也可以做一个九宫格图片,增强视觉效果.下面介绍1种 ...

  9. python朋友圈教程_Python 生成你的朋友圈九宫格图片

    关于微信之前写过以下文章,有兴趣可以点击查看: 如何导出你的微信语音 c 盘空间又满了?微信清理神器帮你释放空间 微信撤回的消息也能看到! 如何备份可能被删的公众号文章和网页 如何在电脑上登陆多个微信 ...

最新文章

  1. springmvc常用配置
  2. 设计模式复习-备忘录模式
  3. 由小游戏跳一跳想到的
  4. apk提取加密素材_从apk包中提取unity资源
  5. mysql创建数据库schooldb_mysql创建新用户和数据库
  6. 教你用Python自制拼图小游戏,轻松搞定熊孩子
  7. 各种渲染软件设计理论详解
  8. Oracle之Union与Union all的区别
  9. 安装版mysql数据库data在_MySQL 5.7版本的安装使用详细教程+更改数据库data的存储路径...
  10. 游戏开发入行大师攻略
  11. FANUC机器人_KAREL编程入门学习(1)
  12. 第一次发博客,随便说说
  13. 基于PaddlePaddle 2.0动态图实现的CRNN文字识别模型
  14. Linux-网络管理
  15. 实验六—基本数据管理(三)
  16. 基于WPA的暴力破解(JAVA实现破解WIFI)
  17. 全链路监控Jaeger
  18. 如何删除多个计算机名称,电脑双系统怎么删除一个呢?教你快速删除
  19. 生命探测仪能穿墙能探废墟 但不能穿透金属(图)
  20. Windows窗口消息大全,全不全自己看

热门文章

  1. 培训三天敏捷我懂了这些
  2. Excel高级功能 数据工具
  3. 华硕ac68u无线最佳设置_华硕AC86U,AC88U的掉线、断流问题何时彻底解决?
  4. 自建数据库与云数据库RDS性能优势与优缺点对比
  5. 使用谷歌浏览器查看ws消息
  6. 相似图像识别算法是什么,机器图像识别常用算法
  7. selenium爬取网页表格数据并存到Excel
  8. 2009最新山东省百强企业排名
  9. html中正方形列表标签属性,CSS 列表样式
  10. adb常用命令|修改build.porp文件