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

本文实例讲述了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");
  }
  /**
   * 根据设置的宽高等比例压缩图片文件<br> 先保存原文件,再压缩、上传
   * @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>0){
          bili=height/(double)h;
          width = (int) (w*bili);
        }
      }
      String srcImgPath = newFile.getAbsoluteFile().toString();
      System.out.println(srcImgPath);
      String subfix = "jpg";
      subfix = srcImgPath.substring(srcImgPath.lastIndexOf(".")+1,srcImgPath.length());
      BufferedImage buffImg = null;
      if(subfix.equals("png")){
        buffImg = new BufferedImage(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();
    }
    return newFile.getAbsolutePath();
  }
  /**
   * 按设置的宽度高度压缩图片文件<br> 先保存原文件,再压缩、上传
   * @param oldFile 要进行压缩的文件全路径
   * @param newFile 新文件
   * @param width 宽度
   * @param height 高度
   * @param quality 质量
   * @return 返回压缩后的文件的全路径
   */
  public static String zipWidthHeightImageFile(File oldFile,File newFile, int width, int height,float quality) {
    if (oldFile == null) {
      return null;
    }
    String newImage = null;
    try {
      /** 对服务器上的临时文件进行处理 */
      Image srcFile = ImageIO.read(oldFile);
      String srcImgPath = newFile.getAbsoluteFile().toString();
      System.out.println(srcImgPath);
      String subfix = "jpg";
      subfix = srcImgPath.substring(srcImgPath.lastIndexOf(".")+1,srcImgPath.length());
      BufferedImage buffImg = null;
      if(subfix.equals("png")){
        buffImg = new BufferedImage(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();
    }
    return newImage;
  }
}

说明:

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相关内容感兴趣的读者可查看本站专题:《Java图片操作技巧汇总》、《java日期与时间操作技巧汇总》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》及《Java数据结构与算法教程》。

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

(0)

相关推荐

  • 详解Java实现批量压缩图片裁剪压缩多种尺寸缩略图一键批量上传图片

    10万+IT人都在关注的图片批量压缩上传方案(完整案例+代码) 背景需求:为了客户端访问图片资源时,加载图片更流畅,体验更好,通常不会直接用原图路径,需要根据不同的场景显示不同规格的缩略图,根据商品关键属性,能够获取到图片不同尺寸规格的图片路径,并且能根据不同缩略图直观看到商品的关键属性,需要写一个Java小工具把本地磁盘中的图片资源一键上传至分布式FastDFS文件服务器,并把图片信息存入本地数据库,PC端或者客户端查询商品时,就可以根据商品的业务属性.比如根据productId就能把商品相关

  • Java中上传图片压缩处理的方法示例

    整理文档,搜刮出一个Java做图片压缩的代码,稍微整理精简一下做下分享. 首先,要压缩的图片格式不能说动态图片,你可以使用bmp.png.gif等,至于压缩质量,可以通过BufferedImage来指定. 在C盘的temp下放置一张图片pic123.jpg,尽量找一个像素高一点的图片,这里我找了一张5616*3744的. package test; import java.io.*; import java.util.Date; import java.awt.*; import java.aw

  • java实现上传图片并压缩图片大小功能

    Thumbnailator 是一个优秀的图片处理的Google开源Java类库.处理效果远比Java API的好.从API提供现有的图像文件和图像对象的类中简化了处理过程,两三行代码就能够从现有图片生成处理后的图片,且允许微调图片的生成方式,同时保持了需要写入的最低限度的代码量.还支持对一个目录的所有图片进行批量处理操作. 支持的处理操作:图片缩放,区域裁剪,水印,旋转,保持比例. 另外值得一提的是,Thumbnailator至今仍不断更新,怎么样,感觉很有保障吧! 下面我们介绍下如何使用Thu

  • java实现文件上传下载和图片压缩代码示例

    分享一个在项目中用的到文件上传下载和对图片的压缩,直接从项目中扒出来的:) 复制代码 代码如下: package com.eabax.plugin.yundada.utils; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.

  • java input 调用手机相机和本地照片上传图片到服务器然后压缩的方法

    在微信公众号里面需要上传头像,时间比较紧,调用学习jssdk并使用 来不及 就用了input 1.使用input:file标签, 去调用系统默认相机,摄像,录音功能,其实是有个capture属性,直接说明需要调用什么功能 <input type="file" accept="image/*" capture="camera"> <input type="file" accept="video/*&q

  • php+ajax实现异步上传文件或图片功能

    本文为大家分享了ajax异步上传文件或图片功能的具体代码,供大家参考,具体内容如下 //html代码 <form enctype="multipart/form-data" id="upForm"> <input type="file" name="file" ><br><br> <input type="button" value="提交&q

  • Django实现后台上传并显示图片功能

    1.安装pillow pip install Pillow 2.创建app python manage.py startapp upload 3. project设定 settings.py INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'dj

  • Django实现前台上传并显示图片功能

    1. 前台 templates/upload/upload.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <form action="/myupload/upload/" method=

  • Java实现文件上传下载以及查看功能

    目录 项目的目录结构 代码 IOUtils.java DownServlet.java UploadHandleServlet.java web.xml upload.jsp down.jsp 运行效果图 项目的目录结构 代码 IOUtils.java package cn.edu.zyt.util; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; public class

  • 微信小程序实现云开发上传文件、图片功能

    目录 一.前言 二.功能简介 1.选择微信聊天记录中的文件 2.选择本地相册/拍照图片 3.上传功能 三.实现代码 1.选择聊天文件函数(js) 2.选择相册函数(js) 3.上传文件函数(js) 4.调用示例 4-1.云存储新建文件夹 4-2.完整调用代码 4-3.实现效果 四.结语 一.前言 今天的博客所实现的功能很简单,但是也很常用. 本文将这常用的代码进行了封装,可以放入自己utils类中使用,加快开发速度. 实现的功能有两个: 一.选择微信聊天文件并上传. 二.选择本地相册/拍摄图片上

  • JavaScript实现无刷新上传预览图片功能

    无刷新上传功能如何实现?手写无刷新上传要用到两个东西,FormData和FileReader. FileReader 用于图片浏览. FormData 用于ajax请求. html代码 先创建表单跟图片的容器 <form enctype="multipart/form-data" id="oForm"> <input type="file" name="file" id="file" on

  • Java实现的上传并压缩图片功能【可等比例压缩或原尺寸压缩】

    本文实例讲述了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.Fil

  • java实现文件上传、下载、图片预览

    这篇文章主要介绍了java实现文件上传.下载.图片预览,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 多文件保存到本地: @ResponseBody @RequestMapping(value = "/uploadApp",produces = { "application/json;charset=UTF-8" },method= RequestMethod.POST) public String uploadA

  • FasfDFS整合Java实现文件上传下载功能实例详解

    在上篇文章给大家介绍了FastDFS安装和配置整合Nginx-1.13.3的方法,大家可以点击查看下. 今天使用Java代码实现文件的上传和下载.对此作者提供了Java API支持,下载fastdfs-client-java将源码添加到项目中.或者在Maven项目pom.xml文件中添加依赖 <dependency> <groupId>org.csource</groupId> <artifactId>fastdfs-client-java</arti

随机推荐