- 浏览: 563070 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
jiang2011jiang:
mybatis3源码核心类1--Configuration -
tuyf_hs:
同求 图片
zookeeper+dubbo+dubbo管理集群的简要配置[单机] -
安静听歌:
请问图片还能找的会吗?你的图片和原文的图片都挂了,,,如果有图 ...
zookeeper+dubbo+dubbo管理集群的简要配置[单机] -
ahua186186:
yngwiet 写道楼主,有一个地方不太明白,为什么要用“ge ...
ListView中getChildAt(index)的使用注意事项 -
yngwiet:
楼主,有一个地方不太明白,为什么要用“getChildAt(p ...
ListView中getChildAt(index)的使用注意事项
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
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
发表评论
-
shiro落地的设计复杂度(最后总结)
2018-06-19 17:22 581经过1周的源码研究,终于对shiro的原理有了深刻的理解,基于 ... -
shiro login成功后保存了哪些数据
2018-06-19 17:05 1476shiro login成功后 保存了Principals 和 ... -
shiro 会话原理分析
2018-06-19 12:40 15951、从哪里获取sessionid每次请求都会尝试获取ses ... -
shiro内部原理分析
2018-06-15 17:07 2413一句话总结:会话域Context一路收集principal ... -
Zookeeper入门-001 源码环境搭建
2018-03-15 11:47 9061.到github下载源码:https://github.c ... -
dubbo服务治理之路由规则研究
2018-01-31 15:50 22111.今天没太多事情,挤 ... -
shiro SecurityUtils.getSubject()深度分析
2018-01-12 17:38 489411.总的来说,SecurityUtils.getSubject ... -
@Async核心实现1 --------AsyncExecutionAspectSupport
2017-12-27 10:34 1983基本原理: 通过spring的扩展接口AbstractBea ... -
从零开始玩转JMX(1):简介和 Standard MBean
2017-08-23 15:20 0http://www.importnew.com/22299. ... -
java基础回顾
2017-08-15 11:21 0http://www.cnblogs.com/skywang1 ... -
mybatis-generator-maven-plugin 插件扩展 增加自定义方法
2017-08-10 16:50 0https://my.oschina.net/alexgaoy ... -
解决了DeferredResult请求长时间占用数据库连接的问题
2017-08-04 09:55 2359最近看了看开源项目appllo配置中心的源码,发现一个很有意思 ... -
httpclient发送webservice
2017-05-03 23:25 0http://aperise.iteye.com/blog/2 ... -
与大师面对面交流:Chris Richardson 来华布道微服务架构
2016-11-28 21:28 825http://www.daocloud.io/microser ... -
eclipse反编译
2016-11-23 20:48 0http://jingyan.baidu.com/articl ... -
spring security
2016-09-12 19:28 0http://www.importnew.com/5641.h ... -
浅析JPA中EntityManager无法remove entity的问题
2016-07-18 21:50 0http://rickqin.blog.51cto.com/1 ... -
Permission Denied(publickey) 解决
2016-07-14 19:18 27821.生成公钥和私钥放到C:\Users\itservice\. ... -
权限管理系统
2016-04-18 13:29 0http://git.oschina.net/ketayao/ ... -
Java工程师成神之路--面试必须复习的基础
2015-12-28 17:20 0http://www.open-open.com/news/v ...
相关推荐
4. **JSON解析工具类**:如`JsonUtil`,用于解析JSON字符串到Java对象,或把Java对象转换成JSON格式,通常会利用Gson、Jackson或Fastjson等库。 5. **图片处理工具类**:可能包括图片的加载、缩放、裁剪、圆角处理...
D:\002 我的工具类\010 操作图片\整体图片操作\ImageUtil.java D:\002 我的工具类\010 操作图片\整体图片操作\OperateImage.java D:\002 我的工具类\010 操作图片\整体图片操作\Quant.java D:\002 我的工具类\010 ...
`imageUtil`裁剪工具类是为了简化这一过程而设计的。这个工具类是基于第三方开源库进行修改和优化的,目的是为了提供更加高效、易用的图片裁剪功能。下面我们将详细讨论Android图片裁剪的基本原理和`imageUtil`裁剪...
4. 日期时间工具类(DateUtil):提供日期时间的格式化、比较、计算差值等功能,如获取当前时间、解析日期字符串、计算两个日期之间的差值等。 5. JSON处理工具类(JsonUtil):包含JSON字符串的序列化和反序列化,便于...
4. **文件操作工具类** (FileUtil) - `createFile()`:创建文件。 - `readFile()`/`writeFile()`:读写文件内容。 - `deleteFile()`:删除文件。 5. **JSON解析工具类** (JsonUtil) - `parseJsonObject()`/`...
在这个场景中,我们关注的是使用一个名为`ImageUtil`的工具类来实现图片的压缩并生成缩略图。下面将详细解释如何使用`ImageUtil`进行图片压缩以及相关的编程知识点。 首先,`ImageUtil`通常是一个自定义的Java库...
Android 图片和字节数组相互转换、图片保存工具类
写在前面1.此工具类为整理工具类,可能会有重复,大家可以一起维护整理,...更新说明(v1.1,v1.2): 新增键盘工具类 时间选择器工具类 判断重复点击工具类, textview显示自动换行工具类 DES加密工具类 ImageUtil新增方法
1.此工具类为整理工具类,可能会有重复,大家可一起维护整理,添加和删除一些常用的工具类,并写上注释. 2.希望大家积极整理维护,争取创建一个强大的android工具类. 3.本项目已上传到jitpack.io,使依赖更方便. 4.依赖jar...
在安卓应用开发中,工具类(Utils)是开发者经常使用的组件,它们包含了各种常用功能的静态方法,可以方便地在项目中的任何地方调用。"安卓开发框架工具类相关-Android开发的通用工具类.zip" 提供了一组可能用于...
### 图片工具类(ImageUtil)知识点详解 #### 一、概述 在Android开发过程中,对图片的处理是一项常见的任务,包括但不限于保存图片到本地、从网络加载图片等操作。本篇将详细介绍一个实用的图片工具类`ImageUtil`,...
图片处理工具类ImageUtil通常包含裁剪、缩放、旋转、转换格式等功能。例如,`compressImage()`方法可以用来减小图片文件大小,避免内存溢出;`rotateImage()`用于调整图片方向,尤其是在处理相机拍摄的照片时;`...
ImageUtil是一个第三方图片渲染库,它为开发者提供了便捷的方式来处理和操作图片,特别是对于那些需要快速实现多种图片效果的应用来说,ImageUtil是一个非常实用的工具。 ImageUtil的核心功能在于其内置了13种不同...
在Android Java开发中,工具类(Utils类)是开发者经常使用的辅助代码集合,它们封装了各种通用功能,以便在项目中快速调用。这个名为"java-utils-master"的压缩包很可能是包含了一系列实用工具类的开源项目。下面,...
4. **网络请求工具类** (NetworkUtil) 网络请求是Android应用的核心部分,此类可能包含了HTTP请求、JSON解析等功能,使得开发者可以更便捷地处理网络数据。 5. **权限管理工具类** (PermissionUtil) 针对Android ...
4. **图片处理工具类(ImageUtil)**:在Android中,图片加载和处理是常见的需求,此类可能包含图片的压缩、裁剪、缩放等方法。比如,`compressImage()`用于减小图片文件大小,以适应内存和存储限制。 5. **JSON解析...
四、图片处理工具类(ImageUtil) ImageUtil类通常用于处理图片加载、缩放、裁剪等操作。例如,loadBitmapFromUrl()可以从网络加载图片,resizeBitmap()可以调整图片尺寸,而cropBitmap()则可以裁剪图片的一部分。 五...
在Java编程中,工具类(Utils)是程序员经常会用到的辅助类库,它们封装了常用的功能,使得代码更加简洁高效。"java工具类 utils.zip" 提供了一系列实用的工具类,涵盖了日期处理、字符串操作、JSON解析、Spring ...
本文件是图片验证码工具类,作用是生成一个四位数的图片验证码
然而,`ImageUtil`是一个特别的工具类,它实现了图片的高保真缩放和裁剪功能,而且不依赖任何第三方库,这意味着我们可以直接在项目中使用这个类,而不需要引入额外的依赖,这对于保持项目的轻量化和减少潜在的冲突...