java实现压缩图片的方法
前段时间在使用对图片加水印后,由于需加水印的图片的宽度和高度都非常的大,加了水印后图片从几百KB,变成了几MB,严重影响了图片在页面的加载速度!
经过仔细的琢磨,决定先对图片进行压缩,再加水印。采用这种方式户,图片占用的空间没多大变化。
下面对压缩的代码的分享
一、采用指定宽度、高度或压缩比例 的方式对图片进行压缩 方法:
[java] view plain copy
package com.zx.util;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
/** * 采用指定宽度、高度或压缩比例 的方式对图片进行压缩 * @param imgsrc 源图片地址 * @param imgdist 目标图片地址 * @param widthdist 压缩后图片宽度(当rate==null时,必传) * @param heightdist 压缩后图片高度(当rate==null时,必传) * @param rate 压缩比例 */ public static void reduceImg(String imgsrc, String imgdist, int widthdist, int heightdist, Float rate) { try { File srcfile = new File(imgsrc); // 检查文件是否存在 if (!srcfile.exists()) { return; } // 如果rate不为空说明是按比例压缩 if (rate != null && rate > 0) { // 获取文件高度和宽度 int[] results = getImgWidth(srcfile); if (results == null || results[0] == 0 || results[1] == 0) { return; } else { widthdist = (int) (results[0] * rate); heightdist = (int) (results[1] * rate); } } // 开始读取文件并进行压缩 Image src = javax.imageio.ImageIO.read(srcfile); BufferedImage tag = new BufferedImage((int) widthdist, (int) heightdist, BufferedImage.TYPE_INT_RGB); tag.getGraphics().drawImage( src.getScaledInstance(widthdist, heightdist, Image.SCALE_SMOOTH), 0, 0, null); FileOutputStream out = new FileOutputStream(imgdist); JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out); encoder.encode(tag); out.close(); } catch (IOException ex) { ex.printStackTrace(); } }
二、获取图片宽度和高度的方法:
[java] view plain copy
/** * 获取图片宽度 * * @param file * 图片文件 * @return 宽度 */ public static int[] getImgWidth(File file) { InputStream is = null; BufferedImage src = null; int result[] = { 0, 0 }; try { is = new FileInputStream(file); src = javax.imageio.ImageIO.read(is); result[0] = src.getWidth(null); // 得到源图宽 result[1] = src.getHeight(null); // 得到源图高 is.close(); } catch (Exception e) { e.printStackTrace(); } return result; }
三、运行代码的main方法:
[java] view plain copy
public static void main(String[] args) { /** * d://3.jpg 源图片 * d://31.jpg 目标图片 * 压缩宽度和高度都是1000 * */ System.out.println("压缩图片开始..."); File srcfile = new File("d://3.jpg"); System.out.println("压缩前srcfile size:" + srcfile.length()); reduceImg("d://3.jpg", "d://31.jpg", 1000, 1000,null); File distfile = new File("d://31.jpg"); System.out.println("压缩后distfile size:" + distfile.length()); }
java实现压缩图片的方法相关推荐
- 七牛服务器提供的压缩图片的方法
七牛服务器提供的压缩图片的方法 一般来讲,用户看到的文字.图片等都是由运营上传的,如果运营直接在后台上传了一张很大的图片,那么前端页面在加载的时候就会较慢,有可能图片会有明显的加载过程,这个时候,就需 ...
- 光影魔术手--不失真压缩图片的方法
光影魔术手--不失真压缩图片的方法 "光影魔术手(nEO iMAGING)"是一个对数码照片画质进行改善及效果处理的软件.有高速度.实用.易于上手等特点. 步骤分解 步骤1:打开 ...
- 简单的压缩图片的方法,压缩图片大小的步骤
我们在日常生活中也会遇到比较大的图片,比较大的图片文件比较麻烦,上传到网站论坛做头像都传不上去,大家可以将图片文件进行简单的压缩,然后进行上传,教给大家一种简单的压缩图片的方法. 1:先要将自己的图片 ...
- 怎么压缩图片 ? 掌握这几种免费压缩图片的方法就够了
您需要了解图像大小调整和编辑的方法.您无需成为平面设计专家:调整图像大小和压缩照片是每个人都可以轻松学习的东西. 什么是照片压缩? 照片压缩或图像压缩是一种减少图像文件大小的过程,以便它在您的计算机中 ...
- 有什么压缩图片的方法?这里有两个方法分享
随着智能手机的普遍应用,我们随时随地都可以拍照.但随着拍摄的图片越来越多,图片占用的内存也越来越大,手机.电脑也因此出现卡顿的情况.那么,我们要怎么减少图片所占用的空间,提高手机.电脑的运行速度呢?其 ...
- 银河麒麟批量压缩图片的方法
适用系统:银河麒麟V10(SP1),CPU:Kirin990,架构:aarch64. 软件商店下载"简单图像压缩转换软件". 桌面左下角点开菜单搜索"Simple Ima ...
- 有哪些免费在线压缩图片的方法或工具
一.极速img 专业无损图片压缩工具 首先搜索极速img即可找到这款免费在线压缩工具,点击即可进入:根据页面提示点击"+"并选择手机里面的图片进行上传(单张上传压缩,每天都能免费压 ...
- 一种压缩图片的方法---Machine learning 之 K-Means
背景描述: RGB编码:对于一个直接用24bit表示每一个而像素的图像来说,每一个pixel使用8-bit无符号整数(0-255)来表示红or绿or蓝. 压缩目的: 将128x128大小的图片由原来的 ...
- java ios压缩图片,Java、ios图片上传
IOS客服端代码 @interface ViewController () { NSString *boundary; NSString *fileParam; NSString *baseUrl; ...
最新文章
- 个性化排序的神经协同过滤
- 聊天机器人之语料准备
- 如何高效地逛Github?
- linux导出文件夹到u盘,Linux系统放到U盘上直接在U盘上运行Linux
- jQuery 中jQuery/$的数据类型是什么?
- AB1601某些io口不支持较高频率信号的输入
- 主机甲和主机乙之间已建立一个TCP连接,TCP最大段长为1000B。若主机甲的当前拥塞窗口为4000B,在主机甲向主机乙连续发送两个最大段后,成功收到主机乙发送的第一个段的确认段,确认段中通告的接收窗
- Java反射基础(一)--Class对象获取
- Root Pane Container(三)
- 在eclipse中查看android SDK的源代码
- 基于布谷鸟灰狼算法、灰狼算法求解复杂地形下三维无人机路径规划问题研究附matlab代码
- 英文期刊催稿信模板_英文投稿,询问进展,催稿 模版信
- 2827: 千山鸟飞绝 非旋treap
- 冰蝎3.0 页面存在,但是无法获取密钥
- C语言和Bash脚本实现身份证号码尾号验证
- 编译原理_P1004
- C++ 解9*9数独 LeetCode37题
- 【数字电路基础】CMOS晶体管的延时
- 如何调教你的360让他没有广告及烦人的提示
- SAP MTS案例教程简介
热门文章
- Visible Lattice Points SPOJ - VLATTICE
- P4245 【模板】任意模数多项式乘法(NTT)
- 牛客题霸 反转链表 C++题解/答案
- 模板:拓展kmp(Z函数)
- CF1481F-AB Tree【构造,背包】
- P6805-[CEOI2020]春季大扫除【贪心,树链剖分,线段树】
- 2021“MINIEYE杯”中国大学生算法设计超级联赛(8)(1002,1004,1006,1009)
- P6139-[模板]广义后缀自动机(广义 SAM)
- P2657-[SCOI2009]windy数【数位dp,dfs】
- 欢乐纪中某B组赛【2019.1.30】The penultimate day