本文实例讲述了java实现的上传并压缩图片功能。分享给大家供大家参考,具体如下:

先看效果:

原图:1.33M

处理后:27.4kb

关键代码:

package codeGenerate.util;

import java.awt.Color;

import java.awt.Graphics2D;

import java.awt.Image;

import java.awt.image.BufferedImage;

import java.io.File;

import java.io.FileNotFoundException;

import java.io.IOException;

import javax.imageio.ImageIO;

public class ImageZipUtil {

public static void main(String[] args) {

zipWidthHeightImageFile(new File("C:\\spider\\3.png"),new File("C:\\spider\\3-1.jpg"),425,638,0.7f);

//zipImageFile(new File("C:\\spider\\2.JPG"),new File("C:\\spider\\2-2.JPG"),425,638,0.7f);

//zipImageFile(new File("C:\\spider\\3.jpg"),new File("C:\\spider\\3-3.jpg"),425,638,0.7f);

System.out.println("ok");

}

/**

* 根据设置的宽高等比例压缩图片文件
先保存原文件,再压缩、上传

* @param oldFile 要进行压缩的文件

* @param newFile 新文件

* @param width 宽度 //设置宽度时(高度传入0,等比例缩放)

* @param height 高度 //设置高度时(宽度传入0,等比例缩放)

* @param quality 质量

* @return 返回压缩后的文件的全路径

*/

public static String zipImageFile(File oldFile,File newFile, int width, int height,float quality) {

if (oldFile == null) {

return null;

}

try {

/** 对服务器上的临时文件进行处理 */

Image srcFile = ImageIO.read(oldFile);

int w = srcFile.getWidth(null);

int h = srcFile.getHeight(null);

double bili;

if(width>0){

bili=width/(double)w;

height = (int) (h*bili);

}else{

if(height&www.cppcns.comdImage(width, height, BufferedImage.TYPE_INT_ARGB);

}else{

buffImg = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);

}

Graphics2D graphics = buffImg.createGraphics();

graphics.setBackground(new Color(255,255,255));

graphics.setColor(new Color(255,255,255));

graphics.fillRect(0, 0, width, height);

graphics.drawImage(srcFile.getScaledInstance(width, height, Image.SCALE_SMOOTH), 0, 0, null);

ImageIO.write(buffImg, subfix, new File(srcImgPath));

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

说明:

1、根据需求大家可以自行设置质量参数quality,到底设置成多少,可以先看下效果在取值;

2、网上通用的方法用的是jdk自带jar包中方法,我这里衍生了一下:用Graphics2D,能够同时处理jpg和png格式;

3、new Color(255,255,255)是白色,等同于WHITE,但是用WHITE 的话,linux下某些图片会有其它色值;

4、main中的宽425和高638可以根据自己的需求自行设置,但是对于长和宽一样的,按照400(小值的值425)*400来处理;

更多java相关内容感兴趣的读者可查看本站专题:《Jawww.cppcns.comva图片操作技巧汇总》、《java日期与时间操作技巧汇总》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》及《Java数据结构与算法教程》。

希望本文所述对大家java程序设计有所帮助。

本文标题: Java实现的上传并压缩图片功能【可等比例压缩或原尺寸压缩】

本文地址: http://www.cppcns.com/ruanjian/java/235084.html

java压缩图片比例quality_Java实现的上传并压缩图片功能【可等比例压缩或原尺寸压缩】...相关推荐

  1. ajax表单图片,js中使用ajax上传一个带有图片的表单数据

    function save() { var formData = new FormData(); if( $('#file')[0].files.length>0){ formData.appe ...

  2. linux禁止客户端上传文件_图片/文件上传如此简单|macOS 图床客户端 uPic

    前言 相信很多人在写作(特别是需要多平台发布)的时候都会因为插图而增加工作量: 平台图片外链不允许在网站外部访问. 使用云图床服务上传流程复杂. 那么这些问题有没有办法解决呢,答案肯定是"有 ...

  3. mui ajax 文件上传,MUI的图片上传和压缩

    MUI的上传图片目前知道有两种方式,一种见前面文章中关于图片裁切时使用的base64作为字符串上传,另外一种则是本篇章中所使用的plus.uploader方式,它是一种真正意义上的文件上传,我们可以使 ...

  4. layui实现文件压缩上传_基于SSM框架、Layui的多文件上传、包括图片,压缩包,音频等文件(与数据库挂钩) - 爱秧博客...

    写在前面:当初为了实现一个多文件上传可是费了一番功夫,经过我日日夜夜的百度咨询,写了好几种方法,最终还是没能解决问题.我可以很负责任的告诉你,你去百度上不管你形容有多好,只要是涉及多文件,就会查到Mu ...

  5. html5 图片上传,支持图片预览、压缩、及进度显示,兼容IE6+及标准浏览器

    原文:html5 图片上传,支持图片预览.压缩.及进度显示,兼容IE6+及标准浏览器 以前写过上传组件,见 打造 html5 文件上传组件,实现进度显示及拖拽上传,兼容IE6+及其它标准浏览器,对付一 ...

  6. java 图片上传_java web图片上传和文件上传实例

    本篇文章主要介绍了java web图片上传和文件上传实例,具有一定的参考价值,有需要的可以了解一下. 图片上传和文件上传本质上是一样的,图片本身也是文件.文件上传就是将图片上传到服务器,方式虽然有很多 ...

  7. okhttp3图片压缩上传_支持 图片压缩、PDF压缩 合并 分割的网址、极力推荐、超奈斯...

    今天给大家分享的是一个可以进行图片压缩,PDF文件编辑的好用网址. 名称:docsmall 大家有没有那种因为上传图片时体积过大,需要缩小,但找半天也找不到压缩工具的时候. 这个网址小编用了很长时间了 ...

  8. Java MultipartFile实现文件上传并为图片加上水印(二)

    防止走丢~~欢迎大家留言收藏点赞 在上一篇我们已经实现了文件的上传,那么如果对于图片的上传,我们要给图片加上我们需要的水印信息,比如图片的上传人,上传地点等信息,此时我们为上传功能再新增水印功能. 最 ...

  9. java实现图片上传_java实现图片的上传和展示

    一.注意事项: 1,该项目主要采用的是springboot+thymeleaf框架 2,代码展示的为ajax完成图片上传(如果不用ajax只需要改变相应的form表单配置即可) 二.效果实现: 1,页 ...

最新文章

  1. Linux中的信号处理原理
  2. 【Groovy】map 集合 ( map 集合遍历 | 使用 map 集合的 each 方法遍历 map 集合 | 代码示例 )
  3. 错误处理: pip install 时候 “Read timed out”
  4. Ⅴ:zookeeper的相关Java Api
  5. require引入js vue_请教 关于使用require 引入vue 和公共js的问题
  6. distinct sql用法_十分钟搞懂SQL数据分析
  7. 简历推荐_12位AI产品经理
  8. php输入框形式,文本框有哪两种方式
  9. MySQL 日志管理、备份与恢复
  10. 智能手环功能模块设计_基于嵌入式系统智能手环的设计开发
  11. 服务器准系统diy,“攒”服务器与DIY服务器
  12. 如何实现 Android 短视频跨页面的流畅续播?
  13. Pytorch踩坑记:赋值、浅拷贝、深拷贝三者的区别以及model.state_dict()和model.load_state_dict()的坑点
  14. DanmuPlayer插件获取数据库弹幕——ssm弹幕应用
  15. 基本算法4.1堆积木详细题解
  16. 3D建模师的需求到底有多大?以前想都不敢想
  17. 修改nz-select中的nz-option设置title属性展示内容。
  18. php面试英文自我介绍范文带翻译,英文自我介绍范文3篇
  19. Linux学习笔记------java学习
  20. 自动驾驶 Apollo 源码分析系列,系统监控篇(二):Monitor模块如何监控硬件

热门文章

  1. 小雅深访 |富国朱少醒最完整的投资逻辑(2017年12月)
  2. 新手如何利用wordpress建立一个自己的网站
  3. python内置函数callable用法详解
  4. python加密解密图形界面_Python笔记-GUI界面设计(tkinter)
  5. 华为荣耀20和x10比较_荣耀x10和荣耀20哪个好 主要看配置参数对比
  6. 计算机系统要解决的问题输入,电脑切换不出来输入法,详细教您解决切换输入法的问题...
  7. 计算机安全会议(学术界)概念普及 ASIACCS2015会议总结(移动安全部分)
  8. HTML5 img src= 与a href= 的使用
  9. 开发人员必学!这篇入门你必须了解!搞懂这些直接来阿里入职
  10. 社会认同:互联网企业家的秘密武器