压缩图片大小(Java源码)

/**
	 * 
	 * 直接指定压缩后的宽高:
	 * @param oldFile
	 * 要进行压缩的文件
	 * @param width
	 * 压缩后的宽度
	 * @param height
	 * 压缩后的高度
	 * @return 返回压缩后的文件的全路径
	 */

	public static File zipImageFile(File oldFile, int width, int height) {
		
		if (oldFile == null) {
			return null;
		}
		File newImage = null;
		try {
			/** 对服务器上的临时文件进行处理 */
			Image srcFile = ImageIO.read(oldFile);
			/** 宽,高设定 */
			BufferedImage tag = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);
			tag.getGraphics().drawImage(srcFile, 0, 0, width, height, null);

			/** 压缩后的文件名 可以再自定义 */
			newImage = oldFile;

			/** 压缩之后临时存放位置 */
			FileOutputStream out = new FileOutputStream(newImage);
			JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
			JPEGEncodeParam jep = JPEGCodec.getDefaultJPEGEncodeParam(tag);

			/** 压缩质量 */

			jep.setQuality(90, true);
			encoder.encode(tag, jep);
			out.close();

		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return newImage;

	}

  

/**
	 * 方法描述 上传图片
	 */
	public void uploadImage() {
		long beginTime = System.currentTimeMillis();
		HttpServletResponse response = ServletActionContext.getResponse();
		try {
			
			response.setContentType("text/html;charset=UTF-8");
			response.setCharacterEncoding("utf-8");
			ResultMsg msg = new ResultMsg();
			FileInputStream fis = null;
			OutputStream outputStream = null;
			try {
				String tempPath = "/upload/wechatshake/"+ getUserInfoSession().getAccount()+ "/";
				// 生成上传文件
				String path = ServletActionContext.getServletContext().getRealPath(tempPath)+"/";
				
				File dir = new File(path);
				if (!dir.exists()) {// 判断目录是否存在,否则创建
					dir.mkdirs();
				}
				File file = ImageUtil.zipImageFile(getImage(),140,140); //压缩图片

				if (file != null) {
					Random random = new Random();
					String saveUploadFileName = "upload"
							+ System.currentTimeMillis()+ random.nextInt(1000)
							+ imageFileName.substring(imageFileName.lastIndexOf("."),imageFileName.length());

					fis = new FileInputStream(file);
					outputStream = new FileOutputStream(new File(path,saveUploadFileName));
					//byte[] buffer = new byte[1024];
					int len = 0;
					while ((len=fis.read())!=-1) {
						outputStream.write(len);
					}
					//将图片上传到微信端
					UserInfoWechat userInfoWechat = iUserInfoWechatServic.getByUser(getUserInfoSession().getId());
					String token = iWeixinService.getAccessToken(userInfoWechat);
					Material material = new Material();
					material.setType("icon");
					material.setMedia(tempPath+saveUploadFileName);
					material = iWxActivityService.uploadMaterial(material, token);
					logger.info("上传图片微信接口返回数据:"+material);
					if(null != material){
						List<String> list = new ArrayList<String>();
						list.add(material.getData().getPic_url());
						msg.setDataList(list);
						msg.setCode("0");
					}else {
						msg.setCode("1");
						msg.setDesc("发布失败");
					}
					msg.setDesc(SUCCESS);
				}
				
			} catch (Exception e) {
				error("上传文件失败", e);
				msg.setCode("1");
				msg.setDesc(ERROR);
			} finally {
				try {
					if(fis!=null){fis.close();}
					if(outputStream!=null){outputStream.close();}
				} catch (IOException e) {
					e.printStackTrace();
				}
				writeResult(msg);
			}
		} catch (Exception e) {
			error("上传文件失败", e);
		} finally {
			printTime(beginTime, getClass(), "uploadImage");
		}
	}

  

原文地址:https://www.cnblogs.com/zhaojinhui/p/4963918.html