Java 切割图片代码

(2012-09-04 10:39:48)

标签:

宽度

切割

源文件

工具类

java

package com.lyis.commons.util;

import java.awt.image.BufferedImage;

import java.io.File;

import java.util.ArrayList;

import java.util.List;

import javax.imageio.ImageIO;

import com.lyis.commons.dto.ImageDto;

public class CutImage {

public ImageDto cut(File sourceFile, String targetDir, int width,

int height)

throws Exception {

List list = new

ArrayList();

BufferedImage source = ImageIO.read(sourceFile);

int sWidth = source.getWidth(); // 图片宽度

int sHeight = source.getHeight(); // 图片高度

if (sWidth > width

&& sHeight > height)

{

int cols = 0; // 横向切片总数

int rows = 0; // 纵向切片总数

int eWidth = 0; // 末端切片宽度

int eHeight = 0; // 末端切片高度

if (sWidth % width == 0) {

cols = sWidth / width;

} else {

eWidth = sWidth % width;

cols = sWidth / width + 1;

}

if (sHeight % height == 0) {

rows = sHeight / height;

} else {

eHeight = sHeight % height;

rows = sHeight / height + 1;

}

String fileName = null;

File file = new File(targetDir);

if (!file.exists()) { // 存储目录不存在,则创建目录

file.mkdirs();

}

BufferedImage image = null;

int cWidth = 0; // 当前切片宽度

int cHeight = 0; // 当前切片高度

for (int i = 0; i < rows; i++) {

for (int j = 0; j < cols; j++) {

cWidth = getWidth(j, cols, eWidth, width);

cHeight = getHeight(i, rows, eHeight, height);

// x坐标,y坐标,宽度,高度

image = source.getSubimage(j * width, i * height, cWidth,

cHeight);

fileName = targetDir + "/map_" +

i + "_" + j +

".jpg";

file = new File(fileName);

ImageIO.write(image, "JPEG",

file);

list.add(file);

}

}

}

return new ImageDto(sWidth, sHeight, list);

}

public ImageDto cut(String source, String targetDir, int width, int

height)

throws Exception {

return cut(new File(source), targetDir, width, height);

}

private int getWidth(int index, int cols, int endWidth, int width)

{

if (index == cols - 1) {

if (endWidth != 0) {

return endWidth;

}

}

return width;

}

private int getHeight(int index, int rows, int endHeight, int

height) {

if (index == rows - 1) {

if (endHeight != 0) {

return endHeight;

}

}

return height;

}

}

分享:

喜欢

0

赠金笔

加载中,请稍候......

评论加载中,请稍候...

发评论

登录名: 密码: 找回密码 注册记住登录状态

昵   称:

评论并转载此博文

发评论

以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

java中如何切割图片_Java 切割图片代码相关推荐

  1. 解决java中使用getImage()导入图片失败问题

    解决java中使用getImage()导入图片失败问题 在使用getImage(fileName)方法导入图片时,一直失败.后来加入相对路径解决找不到图片问题. 代码如下 image = Toolki ...

  2. java中怎么合成图片_Java 实现图片合成

    图片合成 利用Java的绘图方法,实现图片合成 在开始之前,先定一个小目标,我们希望通过图片合成的方式,创建一个类似下面样式的图片 I. 设计思路 首先解析一下我们的目标实现图片合成,那么这些合成的基 ...

  3. java字符串 n换行符_java切割字符串中的回车应注意是\n\r不是\n

    我们在Java中如果用到处理要分隔字符串,不免会用到String的split(String regex)函数,这时候我们要注意的. 如果想以回车来分隔字符串,很多同学都会这样做.下面是例子: Stri ...

  4. java中使用IO将文件切割后保存(FileInputStream、FileOutputStream)

    直接代码: public class Demo {public static void main(String[] args) throws IOException {split(new File(& ...

  5. java中session的作用_java中session的工作原理是什么?和Cookies有何区别?

    现在大家学习的东西和以前大不相同了,越来越多的人倾向于去学习高新技术以获得更好的发展.java是很多人的第一选择.java中的知识还是很多的,今天就来为大家介绍一下. 首先来说一下java中sessi ...

  6. JAVA中的适配器应用_Java适配器模式详解和实际应用.md

    # 一.了解适配器模式 ## 1.什么是适配器模式 适配器模式将一个类的接口转换成另一种接口,让原本接口不兼容的类可以兼容.这种模式的主要作用就是把原本不兼容的接口,通过适配修改做到统一. 这个模式可 ...

  7. java中的vm自变量_java中JVM虚拟机内存模型详细说明

    java中JVM虚拟机内存模型详细说明 JVM的内部结构如下图: 一个优秀Java程序员,必须了解Java内存模型.GC工作原理,以及如何优化GC的性能.与GC进行有限的交互,有一些应用程序对性能要求 ...

  8. java中equals的重写_Java重写equals方法(重点讲解)

    为什么equals()方法要重写? 判断两个对象在逻辑上是否相等,如根据类的成员变量来判断两个类的实例是否相等,而继承Object中的equals方法只能判断两个引用变量是否是同一个对象.这样我们往往 ...

  9. java中引用类型有哪些_java中什么是引用类型

    java中的引用类型是指除了基本数据类型之外的所有类型.java中有四种引用类型,分别是强引用.软引用.弱引用和虚引用.引用类型和原始类型具有不同的特征和用法. Java 提供两种不同的类型:引用类型 ...

  10. java中注解的使用_java中注解的使用

    使用过ssh框架的人一定也使用过注解,尤其是在spring框架中,注解可谓是spring容器和AOP编程的重要环节.注解就是用于修饰类.全局变量.方法.参数或局部变量的接口,java中规定,注解的使用 ...

最新文章

  1. PHP学习笔记-PHP与JavaScript的交互
  2. 001——数组(一)数组知识及foreach函数应用
  3. Python是非常优美的语言,那到底如何个美呢?
  4. css3弹性盒子、媒体查询、多列布局
  5. python集合类型一般应用的场景包括_Python学习,数据类型,python,篇
  6. python之类的封装、多态、继承
  7. ng机器学习视频笔记(十三) ——异常检测与高斯密度估计
  8. 计算机基础(五):堆和栈区别
  9. xlua的hotfixManager
  10. linux模拟进程调度,Linux进程调度模拟3
  11. js高级学习笔记(b站尚硅谷)-8-关于语句分号的问题
  12. pandavan 固件squashfs只读文件系统如何上传应用程序
  13. 浪潮服务器销售案例ppt,浪潮服务器产品线介绍(ppt 105页)
  14. SuperMap iDesktop常见问题解答集锦(八)
  15. 地理工具 | EXCEL读取照片EXIF,并在地图上标注拍摄地点
  16. 福特汉姆大学计算机科学专业,福特汉姆大学计算机与信息科学系
  17. 概率论与数理统计--笔记
  18. linux who命令功能,Linux who命令详解
  19. Excel如何快速删除空白行?替换部分字符?
  20. 计算机病毒的自述,电脑的自述作文500字

热门文章

  1. script-百度换肤效果
  2. SpringCloud实战五:统一配置中心
  3. Go语言中协程的概念和基本使用
  4. Jupyter Notebook安装jupyter_contrib_nbextension扩展功能和安装后不显示Nbextensions标签的解决办法
  5. mysql 容灾 灾备 备份
  6. RequestsLibrary库入门介绍
  7. C#笔记14 LINQ
  8. 基于Verilog-HDL实现会呼吸的流水灯
  9. Vivado入门使用指南之----多路分频器(逻辑分析仪IP的使用以及前后仿真及ip的基本使用)
  10. Verilog 语法点使用————(持续更新)