内容含:图片处理工具类;以图片压缩为例 ,编写调用实例
第一步:框架中加入配置文件application.properties图片压缩后指定的高宽在此配置文件中配置
内容为:
image.width=150 image.height=150
第二步:框架中加入配置文件加载操作类,详情见:http://lucien-zzy.iteye.com/admin/blogs/2009495
第三步:编写图片处理工具类
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("-", ""); } }
第四步:Action中调用工具中的图片压缩功能
属性:
// 图片文件上传 private File[] image; private String[] imageFileName; private String[] imageContentType;
并提供get set
具体调用:
Nursetb nursetb = new Nursetb(); // 根据服务器的文件保存地址找到项目部署的绝对地址 String webPath = ServletActionContext.getServletContext().getRealPath("/"); System.out.println(webPath); String filePath = "upload/nurimage/" + new SimpleDateFormat("yyyyMMdd").format(new Date()) + "/"; String names[] = null; if(null != this.getImage() && this.getImage()[0].length() > 0){ names = ImageUtil.uploadImages(this.getImage()[0], this.getImageFileName()[0], webPath, filePath); } String imgurl = null; if(null!=names){ imgurl = request.getContextPath()+names[1]; nursetb.setImgurl(imgurl); }
相关推荐
在IT行业中,图片处理是一项常见的任务,特别是在网页开发、移动应用和数据分析等领域。为了优化用户体验和减少服务器存储空间,图片的压缩是必不可少的步骤。在这个场景中,我们关注的是使用一个名为`ImageUtil`的...
除了图片效果,ImageUtil可能还提供了一些额外的功能,比如图片的缩放、压缩、解码等,这些都是iOS图片处理中常见的需求。这些功能可以帮助开发者在保证性能的同时,实现对图片资源的高效管理。 在实际应用中,如果...
Android有许多优秀的图片处理库,如 glide、picasso、 Fresco 等,它们都提供了图片裁剪的功能。`imageUtil`可能是基于其中某个库(例如:android-gif-drawable、android-image-cropper)进行二次开发的。开发者在...
图片处理工具类ImageUtil通常包含裁剪、缩放、旋转、转换格式等功能。例如,`compressImage()`方法可以用来减小图片文件大小,避免内存溢出;`rotateImage()`用于调整图片方向,尤其是在处理相机拍摄的照片时;`...
总之,`ImageUtil`是一个自给自足的图片处理工具,它提供了一种高效且独立的方式来处理图片的缩放和裁剪。通过掌握其内部实现,开发者可以更好地理解和控制图片处理的过程,同时也能够灵活地根据项目需求进行定制。...
Android 图片和字节数组相互转换、图片保存工具类
### 图片工具类(ImageUtil)知识点详解 #### 一、概述 在Android开发过程中,对图片的处理是一项常见的...以上就是关于`ImageUtil`类的详细介绍及应用场景分析,希望能帮助开发者更好地理解和应用这些图片处理技术。
5. **图片处理工具类**:可能包括图片的加载、缩放、裁剪、圆角处理等功能,如`ImageUtil`,可以优化图片加载的性能,避免内存溢出。 6. **文件操作工具类**:如`FileUtil`,提供文件的创建、删除、复制、移动、...
D:\002 我的工具类\010 操作图片\整体图片操作\ImageUtil.java D:\002 我的工具类\010 操作图片\整体图片操作\OperateImage.java D:\002 我的工具类\010 操作图片\整体图片操作\Quant.java D:\002 我的工具类\010 ...
6. **图片处理工具类** (ImageUtil) - `compressImage()`:压缩图片以减小体积。 - `loadImageFromUrl()`:从URL加载图片到ImageView。 - `cropImage()`:裁剪图片。 7. **权限检查工具类** (PermissionUtil) -...
6. 图片处理工具类(ImageUtil):包括图片的加载、裁剪、压缩、缓存等功能,对于优化应用性能和节省内存至关重要。 7. 文件操作工具类(FileUtil):提供了读写文件、创建删除文件夹、查找文件等方法,简化文件操作。 ...
8. **图片处理工具类** (ImageUtil) 包含图片的加载、压缩、裁剪、缩放等方法,尤其在处理用户上传的图片或者加载网络图片时非常实用。 9. **对话框工具类** (DialogUtil) 可以快速创建和展示各种类型的对话框,...
- **图片处理**:如`ImageUtil`,包含图片加载、压缩、裁剪等操作。 - **权限管理**:如`PermissionUtil`,处理Android运行时权限申请。 - **设备信息**:如`DeviceInfo`,获取设备型号、系统版本、屏幕尺寸等信息。...
四、图片处理工具类(ImageUtil) ImageUtil类通常用于处理图片加载、缩放、裁剪等操作。例如,loadBitmapFromUrl()可以从网络加载图片,resizeBitmap()可以调整图片尺寸,而cropBitmap()则可以裁剪图片的一部分。 五...
- 例如:`ImageUtil`类可能包含`compressImage()`用于压缩图片大小,`rotateImage()`用于旋转图片。 4. **网络请求**: - Android的网络访问通常使用`HttpURLConnection`、`Volley`、`OkHttp`或`Retrofit`等库。...
在JavaMail API中,这涉及到`javax.mail.Session`、`javax.mail.Transport`、`javax.mail.internet.MimeMessage`等类的使用。 邮件发送的核心流程如下: 1. **初始化Session**:使用Properties对象配置邮件服务器...
图片自动压缩成设置的大小,根据参数配置,保持图片不失真,使用的java自带的图片处理类,工具类直接运行main方法
4. **图片处理工具类(ImageUtil)**:在Android中,图片加载和处理是常见的需求,此类可能包含图片的压缩、裁剪、缩放等方法。比如,`compressImage()`用于减小图片文件大小,以适应内存和存储限制。 5. **JSON解析...
接下来,创建名为`ImageUtil`的工具类,该类包含一个静态方法`generateTextImage`,接收文字内容、图片宽度、高度和背景色作为参数。这个方法将创建一个`BufferedImage`对象,然后在上面绘制文字。 ```java public ...