iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > JAVA >Java 中如何对图片进行压缩处理
  • 291
分享到

Java 中如何对图片进行压缩处理

java开发语言压缩图片 2023-08-31 13:08:02 291人浏览 八月长安
摘要

问题背景 图片过大时,会造成页面卡顿甚至于报错,而且现在页面,接口,很多地儿都有报文传输的最大限制要求,另外不知道各位有没有遇到过页面渲染比较大的 base64 图片时,会非常的卡顿。所以,我们必须对用户上传的原始图片进行压缩处理。 为何

问题背景

图片过大时,会造成页面卡顿甚至于报错,而且现在页面,接口,很多地儿都有报文传输的最大限制要求,另外不知道各位有没有遇到过页面渲染比较大的 base64 图片时,会非常的卡顿。所以,我们必须对用户上传的原始图片进行压缩处理。


为何图片经过 base64 编码转换后文件会变大?

图片经过base64编码转换后,文件会变大的原因是因为base64编码会将每个3字节的数据转换成4字节的数据,并且在转换的过程中还会添加一些额外的字符。这些额外的字符包括"="、"+"、"/"等,它们在原始的图片数据中是不存在的。

因此,当我们将图片进行base64编码后,会使得数据变得更大,因为它需要更多的字符来表示相同的原始数据。

另外,使用base64编码也会导致网络传输速度变慢,因为相同的数据需要传输更多的字符。因此,在需要传输大量数据的情况下,建议使用原始的二进制数据,而不是进行base64编码。


 

解决方案

先读取源图片

        new ImGCompress(srcFilePath);

进行图片压缩

        resize(int w, int h, String toPic)

源码工具类如下:

package com.example.util;import java.awt.image.BufferedImage;import com.sun.image.codec.jpeg.JPEGCodec;import com.sun.image.codec.jpeg.JPEGImageEncoder;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import javax.imageio.ImageIO;@SuppressWarnings("restriction")public class ImgCompress {static BufferedImage img = null;public static void main(String[] args) throws IOException {String fromPic = "C:\\Users\\86183\\Pictures\\儿童节插画手绘人物.png";String toPic = "C:\\Users\\86183\\Pictures\\儿童节插画手绘人物_min.png";ImgCompress imgCom = new ImgCompress(fromPic );imgCom.resize(400, 400, toPic);}public ImgCompress(String fileName) throws IOException {     File file = new File(fileName);// 读入文件     img = ImageIO.read(file);      // 构造Image对象}public void resize(int w, int h, String toPic) throws IOException {// SCALE_SMOOTH 的缩略算法 生成缩略图片的平滑度的 优先级比速度高 生成的图片质量比较好 但速度慢    BufferedImage image = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);    image.getGraphics().drawImage(img, 0, 0, w, h, null); // 绘制缩小后的图    File destFile = new File(toPic);    FileOutputStream out = new FileOutputStream(destFile); // 输出到文件流    // 可以正常实现bmp、png、gif转jpg    JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);    encoder.encode(image); // JPEG编码    out.close();}}

备注

这里我们用到了 jdk 下的依赖包

import com.sun.image.codec.jpeg.JPEGCodec;import com.sun.image.codec.jpeg.JPEGImageEncoder;

Maven 打包时 为何 jdk 下的包打包不进去?

如果你的maven项目中依赖了JDK下的包,但是在打包时这些包没有被打包进去,可能是因为maven默认只会把项目中依赖的jar包打包进去,而JDK下的包被认为是系统级别的依赖,不会自动加入打包的jar中。

为了解决这个问题,有两种常用的方法:

引入JDK包的maven依赖
你可以在pom.xml中加入类似下面的依赖,把JDK下的包引入到maven项目中,这样就能够被打包进去了:

    jdk.tools    jdk.tools    ${java.version}    system    ${java.home}/lib/tools.jar

手动添加JDK包
如果不想引入依赖,也可以手动将JDK下的包添加到打包的jar文件中,可以在maven打包命令中加入以下参数:

mvn package -Dmaven.compiler.includeJavaxPackages=true

这样打包时就会包含JDK下的包了。


maven 打包时,会提示找不到该包,这里我们需要在 maven 的 POM 文件里添加一个打包依赖的设置项。

org.apache.maven.pluginsmaven-compiler-plugin${java.version}${java.version}UTF-8                                              ${java.home}/lib/rt.jar;${java.home}/lib/jce.jar                   

 添加的位置如下: 

 附加内容:前端 Jquery 和 后台 Java 判断文件大小的方式。

前端:
var fileSize = $("#"+fileId)[0].files[0].size/(1024*1024);console.log("上传文件大小:"+fileSize+"M");

上面变量 fileId 就是文件 file 输入框的 id 值。

后端
public static boolean checkFileSizeIsLimit(Long fileLen, int fileSize, String fileUnit) {      double fileSizeCom = 0;      if ("B".equals(fileUnit.toUpperCase())) {          fileSizeCom = (double) fileLen;      } else if ("K".equals(fileUnit.toUpperCase())) {          fileSizeCom = (double) fileLen / 1024;      } else if ("M".equals(fileUnit.toUpperCase())) {          fileSizeCom = (double) fileLen / (1024*1024);      } else if ("G".equals(fileUnit.toUpperCase())) {          fileSizeCom = (double) fileLen / (1024*1024*1024);      }      if (fileSizeCom > fileSize) {          return false;      }      return true;  }

直接用工具类即可,代码简单明了,也没啥太多可说明和备注的。

来源地址:https://blog.csdn.net/weixin_36754290/article/details/131381415

--结束END--

本文标题: Java 中如何对图片进行压缩处理

本文链接: https://www.lsjlt.com/news/385786.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java 中如何对图片进行压缩处理
    问题背景 图片过大时,会造成页面卡顿甚至于报错,而且现在页面,接口,很多地儿都有报文传输的最大限制要求,另外不知道各位有没有遇到过页面渲染比较大的 base64 图片时,会非常的卡顿。所以,我们必须对用户上传的原始图片进行压缩处理。 为何...
    99+
    2023-08-31
    java 开发语言 压缩图片
  • 利用java怎么对图片进行压缩与缩放
    这篇文章将为大家详细讲解有关利用java怎么对图片进行压缩与缩放,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。压缩public static boolean c...
    99+
    2023-05-31
    java ava
  • 如何在Android应用中对图片进行压缩
    本篇文章给大家分享的是有关如何在Android应用中对图片进行压缩,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。1、质量压缩法设置bitmap options属性,降低图片的质...
    99+
    2023-05-31
    android 中对 roi
  • Android应用中怎么对图片进行压缩
    Android应用中怎么对图片进行压缩?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。为何要压缩体积的原因如果你的图片是要准备上传的,那动辄几M的大小肯定不行的,况且图片分辨率大...
    99+
    2023-05-31
    android roi
  • Java 对图片缩放处理
    缩放处理图片上传到服务器后,会根据情况将图片缩小成一个图标,我们可以利用java强大的图形处理功能,对上传的图片进行缩放处理. 下面的程序使用jdk1.4中最新的ImageIO对图片进行读写.使用AffineTransform对图片进行缩放...
    99+
    2023-06-03
  • 使用canvas怎么对图片进行压缩
    本篇文章为大家展示了使用canvas怎么对图片进行压缩,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。前提的函数将file文件转化为base64function changeFileToBa...
    99+
    2023-06-09
  • 如何使用Node进行图片压缩
    这篇文章主要介绍“如何使用Node进行图片压缩”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“如何使用Node进行图片压缩”文章能帮助大家解决问题。我们先把图片上传到后端,看看后端接收了什么样的参数。...
    99+
    2023-07-05
  • 如何使用python对图片进行批量压缩详解
    目录前言使用Python和Pillow模块压缩图片1、优化flag2、渐进式JPEG3、JPEG动态质量使用Python和Selenium模块操纵Squoosh批量压缩图片Pytho...
    99+
    2022-11-11
  • 怎么使用python对图片进行批量压缩
    本篇内容主要讲解“怎么使用python对图片进行批量压缩”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么使用python对图片进行批量压缩”吧!使用Python和Pillow模块压缩图片Pil...
    99+
    2023-07-02
  • Android中3种图片压缩处理方法
    Android中图片的存在形式: 1:文件形式:二进制形式存在与硬盘中。 2:流的形式:二进制形式存在与内存中。 3:Bitmap的形式 三种形式的区别: 文件形式和流的...
    99+
    2022-06-06
    压缩 方法 图片 图片压缩 Android
  • Java如何实现压缩图片大小
    本篇内容主要讲解“Java如何实现压缩图片大小”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java如何实现压缩图片大小”吧!使用场景:当使用图片上传功能时,上传图片太大,造成对服务器资源过多的...
    99+
    2023-06-30
  • Android应用中如何对文件进行压缩与解压缩
    Android应用中如何对文件进行压缩与解压缩?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。使用场景当我们在应用的Assets目录中需要加入文件时,可以直接将源文件放入,但这样...
    99+
    2023-05-31
    android roi
  • android开发中如何对图片进行处理
    这篇文章给大家介绍android开发中如何对图片进行处理,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。创建一个Java类CircleImageView把下面的代码复制过去,报错的导包package de.hdodenh...
    99+
    2023-05-31
    android roi
  • Python中怎么批量对文件进行压缩处理
    本篇文章为大家展示了Python中怎么批量对文件进行压缩处理,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。1、第一步导入需要的三个库import os as os&nb...
    99+
    2023-06-15
  • 怎么java中使用Thumbnails对图片进行处理
    这篇文章给大家介绍怎么java中使用Thumbnails对图片进行处理,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Thumbnails支持:指定大小进行缩放按照比例进行缩放不按照比例,指定大小进行缩放旋转水印裁剪转化...
    99+
    2023-06-08
  • 怎么处理图片过大问题?如何把图片压缩到最小
      在日常办公中,我们总会遇到各种各样的问题,比如如何将PDF转换成Word,图片的压缩,视频压缩等等,这些都是上班族经常遇到的问题,小编在上班的时候经要与图片打交道,可是经常遇到这样的问题就是图片太大...
    99+
    2022-10-18
  • java中怎么利用7zip对压缩包进行解压的
    java中怎么利用7zip对压缩包进行解压的?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。7zip命令行7z <command> [<switches&g...
    99+
    2023-05-31
    java ava 7zip
  • Nginx中怎么对图片进行处理
    本篇文章给大家分享的是有关Nginx中怎么对图片进行处理,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Nginx图片处理一个网管员必备的数据处...
    99+
    2022-10-19
  • 如何使用批处理实现css和js图片压缩
    这篇文章主要介绍如何使用批处理实现css和js图片压缩,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!代码如下:@echo off ::设置YUI Compressor启动目录 ...
    99+
    2023-06-08
  • 如何在Android中对字符串进行压缩
    这期内容当中小编将会给大家带来有关如何在Android中对字符串进行压缩,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。使用到的类库GZIPOutputStream代码示例import java....
    99+
    2023-05-30
    android 字符串
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作