公司的APP要做一个九格切图功能, 类似朋友圈那种一张大图放上去.

本来已经用Python三十行搞定. 结果被测试部的质疑我不会用Java写?? 一下子脾气就上来了, 用Java写了一个支持N格切图的功能. 现在想想真是后悔, 浪费生命. 在此给大家贡献出来

源码已上传至GitHub, 如果喜欢就点个星星啥的呗 https://github.com/HarrisonQi/GridCutter

思路:

  1. 读取图片
  2. 根据宫格数进行计算每个格子的X, Y坐标
  3. 对每一个进行裁剪

1. 读取图片

读取图片的方式千千万, 从本地或者从URL读取皆可

  1. 通过URL读取BufferedImage
 // 需要对IOException进行处理, 一共两处, 在URL连接处和文件读取处URL url = new URL("http://yihezo.cn/static/media/logo.9d4a5ade.png");URLConnection connection = url.openConnection(); //打开连接connection.setDoOutput(true);connection.setReadTimeout(3000);// 设置超时时间(非必须)BufferedImage img = ImageIO.read(connection.getInputStream());
  1. 通过本地文件路径读取BufferedImage
 File file = new File("C:/a.png");BufferedImage img = ImageIO.read(new FileInputStream(file));

2. 计算XY坐标

我们拿四宫格为例:

拿到一张图片(假如它的宽和高都是300), 我们在脑海里想象它切割后的样子:

我们需要做的, 就是拿到A, B, C, D四个点的坐标

很简单的, 先读取图片的宽和高:

 int height = img.getHeight();int width = img.getWidth();

宽和高都拿到了, 接下来就很容易求出坐标:(注意, 左上角为0,0)

  • A(0,0)
    B(img.getWidth()/2,0)
    C(0, img.getWidth()/2)
    D(img.getWidth()/2,img.getWidth()/2)

根据公式得出:

  • A(0,0)
    B(150,0)
    C(0, 150)
    D(150,150)

会用到原生的裁剪方法:

img.getSubimage(x坐标, y坐标, x长度, y长度)

3. 对每一个进行裁剪

思路: 两层for循环计算出每个的横纵坐标, 并把图片根据得出的坐标进行裁剪

不说废话, 直接上代码:

 public List<BufferedImage> getGridPics(int xColumns, int yColumns, BufferedImage img, String outFolderPath) throws IOException {List<BufferedImage> resImgs = new ArrayList<>();int index = 1;for (int i = 1; i <= yColumns; i++) {int height = img.getHeight();int posY = height / yColumns * i - height / yColumns;int lenY = height / yColumns;for (int j = 1; j <= xColumns; j++) {int width = img.getWidth();int posX = width / xColumns * j - width / xColumns;int lenX = width / xColumns;BufferedImage resImg = img.getSubimage(posX, posY, lenX, lenY);if (outFolderPath != null) {if (outFolderPath.trim().length() > 0) {if (!outFolderPath.endsWith("/")) {// 若路径字符串不以'/'结尾, 则补上outFolderPath += "/";}File f = new File(outFolderPath + index + ".png");ImageIO.write(resImg, "png", f);}}resImgs.add(resImg);index++;}}return resImgs;}

想必看完思路后, 你一定可以自己写出来了.

如果还是不明白… 去github上直接下载吧!
https://github.com/HarrisonQi/GridCutter

以上代码定有疏漏及更优方案, 若发现问题, 欢迎在评论区讨论!

[Java] Java九格切图 (同样支持四格, 六格, n*n格)相关推荐

  1. 切图小贴士-手机Android平台“点九”的切图

    用户手中看到的产品界面,并非设计师呕心沥血创作的效果图,而是一个个单独的切图经由开发同学技术实现.切图作为设计师与开发者之间的桥梁,它的作用很关键,合适的切图.精准的位置可以最大限度的还原效果图的设计 ...

  2. 手机Android平台“点九”的切图方法

    http://blog.sina.com.cn/s/blog_687bea510101g6dj.html 用户手中看到的产品界面,并非设计师呕心沥血创作的效果图,而是一个个单独的切图经由开发同学技术实 ...

  3. 利用PS自动切图、支持svg且支持icoMoon——再也不用四处去转格式了

    今天想导出svg格式的图片支持webFont,结果AI打不开了,文件好像损坏了,于是就想办法在PS里面导出. 网上搜索到一篇文章,腾讯的 http://isux.tencent.com/ps-phot ...

  4. Effective Java之for-each循环优先于for循环(四十六)

    for循环的缺点: 对于for循环遍历,我们很容易出现这样的一些低级错误: 对于数组 for(int i = 0 ; i >100 ; i++) for(int i = 100 ; i > ...

  5. 图格 Pro for mac(图片拼图切图大师)

    图格 pro是一款能够实现拼图.美化.添加水印等等多种操作的小工具,软件内有大量相框,拼图模板,水印贴纸等等功能供您使用,可快速制作出精美的照片. 图格 pro安装教程 图格 Pro特色功能 支持照片 ...

  6. html用九张图片做出九宫图,九宫切图软件 如何快速把照片做成九宫格切图

    在微博时尚流行的图片展示上,九宫切图是当下最流行的一种,一张非常普通的照片经过了九宫切图软件的处理,变成非常漂亮的九宫图片,是不是美观大大提升了.尤其是在把自己自拍的照片做成九宫图展示,让人更有一种不 ...

  7. 百度、高德、腾讯、天地图、谷歌、必应地图切片切图工具 MapCutter(旧名MapTiler),支持超大图、高清切片、webgl、leaflet、maptalk、openlayers、cesium等

    # MapCutter 地图覆盖图瓦片地图(金字塔图)切图工具,支持百度.腾讯.高德.天地图.谷歌.必应地图等,是市面上最易使用的同类软件.. 百度.高德.腾讯.天地图.谷歌.必应等自定义地图/图片叠 ...

  8. 点“九”切图-教程分享

    用户手中的产品界面,并非设计师呕心沥血创作的效果图,而是一个个单独的切图经由开发同学技术实现.切图作为设计师与开发者之间的桥梁,它的作用很关键,合适的切图.精准的位置可以最大限度的还原效果图的设计,精 ...

  9. 蓝湖切图后如何做成html,蓝湖支持「切图压缩」了!

    Hey,大佬们,蓝湖正式上线「切图压缩」功能,号称设计师和工程师必备利器!埋头工作的你,还不快来试试! 什么是「切图压缩」?「切图压缩」前后有什么区别? 蓝湖通过智能无损压缩技术,选择性地减少 PNG ...

最新文章

  1. 【Groovy】xml 序列化 ( 使用 MarkupBuilder 生成 xml 数据 | 标签闭包下创建子标签 | 使用 MarkupBuilderHelper 添加 xml 注释 )
  2. 人脸识别技术新突破,网友:匪徒带着面罩呢?
  3. pythonjam的用法_jam的用法总结大全
  4. 托管节点池助力用户构建稳定自愈的 Kubernetes 集群
  5. app分发平台java_集成 Asset Delivery (Java)
  6. oracle的命名规则
  7. memcached 远程拒绝服务漏洞
  8. Keras中CNN联合LSTM进行分类
  9. 给 Android 应用开发者的十个建议
  10. Linux进程突然挂死,小玩意:如何让linux上挂死的进程重启?
  11. 可以做mysql题的网站_牛客网MySQL练习题
  12. Java流程控制练习题
  13. 如何将页脚固定在页面底部,而不是屏幕底部!
  14. MAC Monterey升级后的L2TP问题的完美解决方案
  15. Zebra BI for Excel
  16. CSS 与 地图可视化 三棱锥 (九)
  17. java ldap 根ou_【LDAP】LDAP 中 CN, OU, DC 的含义
  18. 【图像融合学习笔记001】图像融合论文及代码网址整理总结(1)——多聚焦图像融合
  19. PMP考生注意了!你们最关心的问题都在这!
  20. httpPrinter--vue--打印

热门文章

  1. liunx使用sakura frp进行进行内网穿透,搭建网站
  2. Ubuntu18.04安装OpenCV教程
  3. 零宽断言(?=exp)实现手机靓号中的连号查询问题释疑
  4. 艾库尔科技创始人吕家俊——AI技术需要打破壁垒
  5. 深度学习炼丹-不平衡样本的处理
  6. spring boot 实现fisco bcos最基础案例
  7. 工程伦理--14.4 中国工程跨文化实践的伦理规范
  8. 【自动驾驶模拟器AirSim快速入门 | 03】模型训练
  9. MATLAB二值化图像
  10. AmazonS3 配置错误