`
ahua186186
  • 浏览: 563105 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

工具类4:ImageUtil

 
阅读更多
import java.awt.image.BufferedImage;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;
import java.util.Random;
import java.util.StringTokenizer;
import java.util.UUID;
import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.struts2.ServletActionContext;
import org.apache.struts2.dispatcher.multipart.MultiPartRequestWrapper;
import org.codehaus.xfire.client.Client;
import com.mortennobel.imagescaling.ResampleOp;
/**
* 图片处理工具
* @author ziyuzhang
*
*/
public class ImageUtil {

private static final int BUFFER_SIZE = 16 * 1024;



    /**
     * 处理图片并保存  一张原图和一张缩小后的图片  小图可用于手机端
     * @param upload             大图对象
     * @param uploadFileName     图片原名
     * @param webPath            工程部署的绝对地址
     * @param filePath           图片目录
     * @return   为一字符数字,0位置 为原图片位置,1位置为压缩后图片位置,2位置为压缩后图片高度,3位置为压缩后图片宽度,4位置为压缩后图片大小
     */
public static String[] uploadImages(File upload, String uploadFileName,String webPath,String filePath) {

StringTokenizer tokenizer = new StringTokenizer(uploadFileName, ".");
String ext="";
while(tokenizer.hasMoreTokens()){
ext = tokenizer.nextToken();
}

//大图的名字
String filename = ImageUtil.getUUID()+"."+ext;
//保存大图
if(!ImageUtil.saveFile(upload,webPath,filePath,filename)){
         return null;
}

String afterFileName = ImageUtil.getUUID();
//小图的名字
String smallname =   afterFileName + "." + ext;
String smallPath = webPath + filePath + smallname;
     // 产生一张新的截图
String[] fileinfo =  ImageUtil.resizeImage(upload, smallPath,ConfigUtil.getIntValue("image.width"),
ConfigUtil.getIntValue("image.height"),ext);
if(null == fileinfo){
    return new String[]{"/" + filePath + filename,"/" + filePath + filename,
             null,null,null};
}else{
    return new String[]{"/" + filePath + filename,"/" + filePath + smallname,
                 fileinfo[0],fileinfo[1],fileinfo[2]};
}

}

/**
* 对应图片key为 upload
* 保存附件 限制大小100M
* @param response
* @param request
* @return
*/
   public static String getfile(HttpServletResponse  response,HttpServletRequest  request) {


SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
         // 根据服务器的文件保存地址找到项目部署的绝对地址
         String webPath = ServletActionContext.getServletContext().getRealPath("/")  ;
         String filePath ="upload/"+sdf.format(new Date())+"/";
//文件保存目录路径
String savePath = webPath+ "upload/";
//最大文件大小
long maxSize = 1024*1024*100;
response.setContentType("text/html; charset=UTF-8");
if (!ServletFileUpload.isMultipartContent(request)) {
return "erro";
}
//如果目录不存在则创建
if (!(new File(savePath).exists())) {
if (!(new File(savePath).mkdirs())) {
return "erro";
}
}

//检查目录写权限
if (!(new File(savePath)).canWrite()) {
return "erro";
}
MultiPartRequestWrapper   mul = (MultiPartRequestWrapper)request;
File[] imageFiles = mul.getFiles("upload");
String[] filesss = mul.getFileNames("upload");
if (imageFiles != null && imageFiles.length >0) {

String fileName = filesss[0];
long fileSize = imageFiles[0].length();
//检查文件大小
if (fileSize > maxSize) {
return "erro";
}
//检查扩展名
String fileExt = fileName.substring(
fileName.lastIndexOf(".") + 1).toLowerCase();

SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");
String newFileName = df.format(new Date()) + "_" + new Random().nextInt(1000) + "." + fileExt;
//保存图片到硬盘
ImageUtil.saveFile(imageFiles[0], webPath, filePath, newFileName);

filePath = webPath + filePath+newFileName ;
}   

    return filePath;
    }



/**
* 将文件保存到制定位置,路径不存在自动创建
*
* @param file
*            要保存的文件
* @param webPath
*            工程部署的绝对路径
* @param filePath
*            文件夹的相对路径
* @param filename
*            文件名
* @return
*/
public static boolean saveFile(File file, String webPath, String filePath,
String filename) {

if (new File(webPath + filePath).exists()) {
webPath = webPath + filePath + "/" + filename;
File dstFile = new File(webPath);
if (copy(file, dstFile)) {
return true;
}

} else {
if (new File(webPath + filePath).mkdirs()) {
webPath = webPath + filePath + "/" + filename;
File dstFile = new File(webPath);
if (copy(file, dstFile)) {
return true;
}

}

}
return false;

}

/**
* 把源文件对象复制成目标文件对象
*
* @param src
*            源文件
* @param dst
*            目标文件
* @return
*/
public static boolean copy(File src, File dst) {
boolean result = false;
InputStream in = null;
OutputStream out = null;
try {
in = new BufferedInputStream(new FileInputStream(src), BUFFER_SIZE);
out = new BufferedOutputStream(new FileOutputStream(dst),
BUFFER_SIZE);
byte[] buffer = new byte[BUFFER_SIZE];
int len = 0;
while ((len = in.read(buffer)) > 0) {
out.write(buffer, 0, len);
}
result = true;
} catch (Exception e) {
e.printStackTrace();
result = false;
} finally {
if (null != in) {
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (null != out) {
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return result;
}

/**
* 接收File输出图片
* 以图片高为标准 按比例缩减图片
* @param file
*            原图片对象
* @param writePath
*            小图片存放的路径
* @param width
*            宽
* @param height
*            高
* @param format
*            图片格式
* @return
*/
public static String[]  resizeImage(File file, String writePath,
Integer width, Integer height, String format) {

try {
BufferedImage inputBufImage = ImageIO.read(file);
inputBufImage.getType();

System.out.println("转前图片高度和宽度:" + inputBufImage.getHeight() + ":"
+ inputBufImage.getWidth());
if(height >=inputBufImage.getHeight() || width >= inputBufImage.getWidth()){

return null;
}else{
//double dd = inputBufImage.getHeight() / height;
//width = (int) (inputBufImage.getWidth() / dd);
//height = (int) (inputBufImage.getHeight() / dd);
// 转换
ResampleOp resampleOp = new ResampleOp(width, height);
BufferedImage rescaledTomato = resampleOp.filter(inputBufImage,null);
File fil = new File(writePath);
ImageIO.write(rescaledTomato, format,fil);
System.out.println("转后图片高度和宽度:" + rescaledTomato.getHeight() + ":"
+ rescaledTomato.getWidth());
return new String[]{rescaledTomato.getHeight()+"",rescaledTomato.getWidth()+"",fil.length()+""};
}
} catch (IOException e) {
e.printStackTrace();
return null;
}

}

public static String lastname(String name) {
String[] ls = name.split("\\.");

return ls[ls.length - 1];
}

public static String getUUID() {

return UUID.randomUUID().toString().replaceAll("-", "");
}
}
转自:http://lucien-zzy.iteye.com/blog/2009507
分享到:
评论

相关推荐

    android工具类 26个实用工具类

    4. **JSON解析工具类**:如`JsonUtil`,用于解析JSON字符串到Java对象,或把Java对象转换成JSON格式,通常会利用Gson、Jackson或Fastjson等库。 5. **图片处理工具类**:可能包括图片的加载、缩放、裁剪、圆角处理...

    我积攒的java工具类 基本满足开发需要的工具类

    D:\002 我的工具类\010 操作图片\整体图片操作\ImageUtil.java D:\002 我的工具类\010 操作图片\整体图片操作\OperateImage.java D:\002 我的工具类\010 操作图片\整体图片操作\Quant.java D:\002 我的工具类\010 ...

    Android imageUtil 裁剪

    `imageUtil`裁剪工具类是为了简化这一过程而设计的。这个工具类是基于第三方开源库进行修改和优化的,目的是为了提供更加高效、易用的图片裁剪功能。下面我们将详细讨论Android图片裁剪的基本原理和`imageUtil`裁剪...

    Android开发常见的136个工具类.rar

    4. 日期时间工具类(DateUtil):提供日期时间的格式化、比较、计算差值等功能,如获取当前时间、解析日期字符串、计算两个日期之间的差值等。 5. JSON处理工具类(JsonUtil):包含JSON字符串的序列化和反序列化,便于...

    android开发各种工具类

    4. **文件操作工具类** (FileUtil) - `createFile()`:创建文件。 - `readFile()`/`writeFile()`:读写文件内容。 - `deleteFile()`:删除文件。 5. **JSON解析工具类** (JsonUtil) - `parseJsonObject()`/`...

    应用ImageUtil进行图片压缩(源代码)

    在这个场景中,我们关注的是使用一个名为`ImageUtil`的工具类来实现图片的压缩并生成缩略图。下面将详细解释如何使用`ImageUtil`进行图片压缩以及相关的编程知识点。 首先,`ImageUtil`通常是一个自定义的Java库...

    ImageUtil: 图片和字节数组相互转换、图片保存工具类

    Android 图片和字节数组相互转换、图片保存工具类

    安卓通用工具类.zip

    写在前面1.此工具类为整理工具类,可能会有重复,大家可以一起维护整理,...更新说明(v1.1,v1.2): 新增键盘工具类 时间选择器工具类 判断重复点击工具类, textview显示自动换行工具类 DES加密工具类 ImageUtil新增方法

    Android代码-AndroidUtils安卓通用工具类

    1.此工具类为整理工具类,可能会有重复,大家可一起维护整理,添加和删除一些常用的工具类,并写上注释. 2.希望大家积极整理维护,争取创建一个强大的android工具类. 3.本项目已上传到jitpack.io,使依赖更方便. 4.依赖jar...

    安卓开发框架工具类相关-Android开发的通用工具类.zip

    在安卓应用开发中,工具类(Utils)是开发者经常使用的组件,它们包含了各种常用功能的静态方法,可以方便地在项目中的任何地方调用。"安卓开发框架工具类相关-Android开发的通用工具类.zip" 提供了一组可能用于...

    android图片Imageutil

    ### 图片工具类(ImageUtil)知识点详解 #### 一、概述 在Android开发过程中,对图片的处理是一项常见的任务,包括但不限于保存图片到本地、从网络加载图片等操作。本篇将详细介绍一个实用的图片工具类`ImageUtil`,...

    安卓开发框架工具类相关-常用开发工具类文件复制日志打印图片处理toast.rar

    图片处理工具类ImageUtil通常包含裁剪、缩放、旋转、转换格式等功能。例如,`compressImage()`方法可以用来减小图片文件大小,避免内存溢出;`rotateImage()`用于调整图片方向,尤其是在处理相机拍摄的照片时;`...

    ImageUtil 图片渲染第三方类

    ImageUtil是一个第三方图片渲染库,它为开发者提供了便捷的方式来处理和操作图片,特别是对于那些需要快速实现多种图片效果的应用来说,ImageUtil是一个非常实用的工具。 ImageUtil的核心功能在于其内置了13种不同...

    Android-Java开发中用到的工具类收集

    在Android Java开发中,工具类(Utils类)是开发者经常使用的辅助代码集合,它们封装了各种通用功能,以便在项目中快速调用。这个名为"java-utils-master"的压缩包很可能是包含了一系列实用工具类的开源项目。下面,...

    Android常用的工具类

    4. **网络请求工具类** (NetworkUtil) 网络请求是Android应用的核心部分,此类可能包含了HTTP请求、JSON解析等功能,使得开发者可以更便捷地处理网络数据。 5. **权限管理工具类** (PermissionUtil) 针对Android ...

    Android快速开发不可或缺的11个工具类

    4. **图片处理工具类(ImageUtil)**:在Android中,图片加载和处理是常见的需求,此类可能包含图片的压缩、裁剪、缩放等方法。比如,`compressImage()`用于减小图片文件大小,以适应内存和存储限制。 5. **JSON解析...

    Android敏捷开发常用工具类

    四、图片处理工具类(ImageUtil) ImageUtil类通常用于处理图片加载、缩放、裁剪等操作。例如,loadBitmapFromUrl()可以从网络加载图片,resizeBitmap()可以调整图片尺寸,而cropBitmap()则可以裁剪图片的一部分。 五...

    java工具类 utils.zip

    在Java编程中,工具类(Utils)是程序员经常会用到的辅助类库,它们封装了常用的功能,使得代码更加简洁高效。"java工具类 utils.zip" 提供了一系列实用的工具类,涵盖了日期处理、字符串操作、JSON解析、Spring ...

    ImageUtil.java

    本文件是图片验证码工具类,作用是生成一个四位数的图片验证码

    ImageUtil 图片高保真缩放与裁剪,不依赖于任何第三方库

    然而,`ImageUtil`是一个特别的工具类,它实现了图片的高保真缩放和裁剪功能,而且不依赖任何第三方库,这意味着我们可以直接在项目中使用这个类,而不需要引入额外的依赖,这对于保持项目的轻量化和减少潜在的冲突...

Global site tag (gtag.js) - Google Analytics