本文中代码来自:http://blog.csdn.net/liuhuanchao/article/details/50527856

由于网站需要对上传的图片进行宽度判断缩放和质量压缩,以提升整体加载速度,于是我在网上找处理方法,
网上大多数是谷歌图片处理组件Thumbnails的介绍。最开始我用Thumbnails尝试,但不知道什么原因,没有任何效果,也不报错。
由于时间的关系,就没再深入研究,另寻他路。后来找到了下面的方法,这个方法优点在于完全基于Java自带API,调用也非常简单,如果只是缩放和压缩,这个方法足够了。
代码:
 1 /**
2 * 缩放图片(压缩图片质量,改变图片尺寸)
3 * 若原图宽度小于新宽度,则宽度不变!
4 * @param newWidth 新的宽度
5 * @param quality 图片质量参数 0.7f 相当于70%质量
6 */
7 public static void imageResize(File originalFile, File resizedFile,
8 int maxWidth,int maxHeight, float quality) throws IOException {
9
10 if (quality > 1) {
11 throw new IllegalArgumentException(
12 "图片质量需设置在0.1-1范围");
13 }
14
15 ImageIcon ii = new ImageIcon(originalFile.getCanonicalPath());
16 Image i = ii.getImage();
17 Image resizedImage = null;
18
19 int iWidth = i.getWidth(null);
20 int iHeight = i.getHeight(null);
21
22 int newWidth = maxWidth;
23 if(iWidth < maxWidth){
24 newWidth = iWidth;
25 }
26
27
28 if (iWidth >= iHeight) {
29 resizedImage = i.getScaledInstance(newWidth, (newWidth * iHeight)
30 / iWidth, Image.SCALE_SMOOTH);
31 }
32
33
34
35 int newHeight = maxHeight;
36 if(iHeight < maxHeight){
37 newHeight = iHeight;
38 }
39
40 if(resizedImage==null && iHeight >= iWidth){
41 resizedImage = i.getScaledInstance((newHeight * iWidth) / iHeight,
42 newHeight, Image.SCALE_SMOOTH);
43 }
44
45 // This code ensures that all the pixels in the image are loaded.
46 Image temp = new ImageIcon(resizedImage).getImage();
47
48 // Create the buffered image.
49 BufferedImage bufferedImage = new BufferedImage(temp.getWidth(null),
50 temp.getHeight(null), BufferedImage.TYPE_INT_RGB);
51
52 // Copy image to buffered image.
53 Graphics g = bufferedImage.createGraphics();
54
55 // Clear background and paint the image.
56 g.setColor(Color.white);
57 g.fillRect(0, 0, temp.getWidth(null), temp.getHeight(null));
58 g.drawImage(temp, 0, 0, null);
59 g.dispose();
60
61 // Soften.
62 float softenFactor = 0.05f;
63 float[] softenArray = { 0, softenFactor, 0, softenFactor,
64 1 - (softenFactor * 4), softenFactor, 0, softenFactor, 0 };
65 Kernel kernel = new Kernel(3, 3, softenArray);
66 ConvolveOp cOp = new ConvolveOp(kernel, ConvolveOp.EDGE_NO_OP, null);
67 bufferedImage = cOp.filter(bufferedImage, null);
68
69 // Write the jpeg to a file.
70 FileOutputStream out = new FileOutputStream(resizedFile);
71
72 // Encodes image as a JPEG data stream
73 JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
74
75 JPEGEncodeParam param = encoder
76 .getDefaultJPEGEncodeParam(bufferedImage);
77
78 param.setQuality(quality, true);
79
80 encoder.setJPEGEncodeParam(param);
81 encoder.encode(bufferedImage);
82 } // Example usage

调用:

1 //图片压缩处理(缩放+质量压缩以减小高宽度及数据量大小)
2 imageResize(imgFile,imgFile,1200,3000,0.9f);//宽度大于1200的,缩放为1200,高度大于3000的缩放为3000,按比例缩放,质量压缩掉10%

推荐一个好用的聚合搜索引擎,https://www.tomfind.com/ ,支持谷歌、百度、搜狗、bing、360一键切换,支持网页、音乐、购物、视频搜索、支持抖音、快手、哔哩哔哩、微信、头条、知乎搜索、支持顶部栏、左侧栏两种界面模式。

一个好用的java图片缩放及质量压缩方法的更多相关文章

  1. java图片缩放

    package com.rubekid.springmvc.utils; import java.awt.AlphaComposite; import java.awt.Graphics2D; imp ...

  2. java图片压缩工具类(指定压缩大小)

    1:先导入依赖 <!--thumbnailator图片处理--> <dependency> <groupId>net.coobird</groupId> ...

  3. java图片缩放与裁剪

    import java.awt.Graphics; import java.awt.Image; import java.awt.image.BufferedImage; import java.io ...

  4. java 图片缩放

    使用java自带的图片处理api,也可以使用(GraphicsMagick + im4j) import java.awt.Image; import java.awt.image.BufferedI ...

  5. Asp.net 实现图片缩放 无水印(方法二)

    public static System.Drawing.Image GetImage(string path) { try { if (path.StartsWith("http" ...

  6. php图片上传旋转压缩方法

    用到php的exif扩展,需要开启exif 在php.ini文件中去掉exif组件的注释 extension=php_mbstring.dll //要放在php_exif.dll前面让它先加载 ext ...

  7. Java 图片处理——如何生成高清晰度而占有磁盘小的缩略图

    现在的web项目,图片越来越多,图片大小也越来越大,随便就能达到1M,2M,甚至更大.用户上传的图片,一般是无法直接使用的.一般要生成两三种对应的缩略图,分别适配不同的终端,不同的场景.比如PC,手机 ...

  8. Android图片压缩方法总结

    本文总结Android应用开发中三种常见的图片压缩方法,分别是:质量压缩法.比例压缩法(根据路径获取图片并压缩)和比例压缩法(根据Bitmap图片压缩).   第一:质量压缩方法:   ? 1 2 3 ...

  9. android图片压缩方法

    android 图片压缩方法: 第一:质量压缩法: private Bitmap compressImage(Bitmap image) { ByteArrayOutputStream baos = ...

  10. Android应用开发中三种常见的图片压缩方法

    Android应用开发中三种常见的图片压缩方法,分别是:质量压缩法.比例压缩法(根据路径获取图片并压缩)和比例压缩法(根据Bitmap图片压缩). 一.质量压缩法 private Bitmap com ...

随机推荐

  1. linux环境变量配置错误后命令无法使用解决方案

    环境变量配置时多复制了一个空格,导致执行source /etc/profile后提示错误,无法编辑和查看文件 解决方案: 查看当前系统变量:echo $PATH 临时修改:export PATH=/u ...

  2. 了解RTT 和RTO 对于TCP 重传的影响

    前言 我们已经在很多地方了解TCP 的功能和常用字段.但是TCP 传输发生的异常情况总是让我们很棘手,不知改如何处理.陷入迷茫之中.本文章只针对RTT 和RTO 做了解. 描述  RTT (Round ...

  3. 关于JDBC的学习

    一.JDBC简介 JDBC是连接java应用程序和数据库之间的桥梁. 什么是JDBC? Java语言访问数据库的一种规范,是一套API. JDBC (Java Database Connectivit ...

  4. tomcat的SSL配置

    Table of Contents 1. 删除别名为tomcat的密钥 2. 生成别名为tomcat的密钥 3. tomcat配置密钥存储路径 4. 生成证书并通过浏览器导入 5. 80,443端口重 ...

  5. 基于Rocky Linux搭建Windows域控制器

    1.基于Rocky Linux搭建Windows域控制器 https://blog.csdn.net/Sakura0156/article/details/125822938?spm=1001.210 ...

  6. group by和union,Laravel分页

    $res3 = DB::table('users') ->join('user_folow_boutiques', 'user_folow_boutiques.user_id', '=', 'u ...

  7. kubernetes集成GPU原理

    这里以Nvidia GPU设备如何在Kubernetes中管理调度为例研究, 工作流程分为以下两个方面: 如何在容器中使用GPU Kubernetes 如何调度GPU 容器中使用GPU 想要在容器中的 ...

  8. 记一次 .NET某汽车零件采集系统 卡死分析

    一:背景 1. 讲故事 前段时间有位朋友在微信上找到我,说他的程序会出现一些偶发卡死的情况,让我帮忙看下是怎么回事,刚好朋友也抓到了dump,就让朋友把 dump 丢给我,接下来用 windbg 探究 ...

  9. 改进 hibernate-validator,新一代校验框架 validator 使用介绍 v0.4

    项目介绍 java 开发中,参数校验是非常常见的需求.但是 hibernate-validator 在使用过程中,依然会存在一些问题. validator 在 hibernate-validator ...

  10. ChatGPT 设计游戏剧情 | 基于 AI 5 天创建一个农场游戏,完结篇!

    欢迎使用 AI 进行游戏开发! 在本系列中,我们将使用 AI 工具在 5 天内创建一个功能完备的农场游戏.到本系列结束时,您将了解到如何将多种 AI 工具整合到游戏开发流程中.本文将向您展示如何将 A ...