前段时间在使用对图片加水印后,由于需加水印的图片的宽度和高度都非常的大,加了水印后图片从几百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实现压缩图片的方法相关推荐

  1. 七牛服务器提供的压缩图片的方法

    七牛服务器提供的压缩图片的方法 一般来讲,用户看到的文字.图片等都是由运营上传的,如果运营直接在后台上传了一张很大的图片,那么前端页面在加载的时候就会较慢,有可能图片会有明显的加载过程,这个时候,就需 ...

  2. 光影魔术手--不失真压缩图片的方法

    光影魔术手--不失真压缩图片的方法 "光影魔术手(nEO iMAGING)"是一个对数码照片画质进行改善及效果处理的软件.有高速度.实用.易于上手等特点. 步骤分解 步骤1:打开  ...

  3. 简单的压缩图片的方法,压缩图片大小的步骤

    我们在日常生活中也会遇到比较大的图片,比较大的图片文件比较麻烦,上传到网站论坛做头像都传不上去,大家可以将图片文件进行简单的压缩,然后进行上传,教给大家一种简单的压缩图片的方法. 1:先要将自己的图片 ...

  4. 怎么压缩图片 ? 掌握这几种免费压缩图片的方法就够了

    您需要了解图像大小调整和编辑的方法.您无需成为平面设计专家:调整图像大小和压缩照片是每个人都可以轻松学习的东西. 什么是照片压缩? 照片压缩或图像压缩是一种减少图像文件大小的过程,以便它在您的计算机中 ...

  5. 有什么压缩图片的方法?这里有两个方法分享

    随着智能手机的普遍应用,我们随时随地都可以拍照.但随着拍摄的图片越来越多,图片占用的内存也越来越大,手机.电脑也因此出现卡顿的情况.那么,我们要怎么减少图片所占用的空间,提高手机.电脑的运行速度呢?其 ...

  6. 银河麒麟批量压缩图片的方法

    适用系统:银河麒麟V10(SP1),CPU:Kirin990,架构:aarch64. 软件商店下载"简单图像压缩转换软件". 桌面左下角点开菜单搜索"Simple Ima ...

  7. 有哪些免费在线压缩图片的方法或工具

    一.极速img 专业无损图片压缩工具 首先搜索极速img即可找到这款免费在线压缩工具,点击即可进入:根据页面提示点击"+"并选择手机里面的图片进行上传(单张上传压缩,每天都能免费压 ...

  8. 一种压缩图片的方法---Machine learning 之 K-Means

    背景描述: RGB编码:对于一个直接用24bit表示每一个而像素的图像来说,每一个pixel使用8-bit无符号整数(0-255)来表示红or绿or蓝. 压缩目的: 将128x128大小的图片由原来的 ...

  9. java ios压缩图片,Java、ios图片上传

    IOS客服端代码 @interface ViewController () { NSString *boundary; NSString *fileParam; NSString *baseUrl; ...

最新文章

  1. 个性化排序的神经协同过滤
  2. 聊天机器人之语料准备
  3. 如何高效地逛Github?
  4. linux导出文件夹到u盘,Linux系统放到U盘上直接在U盘上运行Linux
  5. jQuery 中jQuery/$的数据类型是什么?
  6. AB1601某些io口不支持较高频率信号的输入
  7. 主机甲和主机乙之间已建立一个TCP连接,TCP最大段长为1000B。若主机甲的当前拥塞窗口为4000B,在主机甲向主机乙连续发送两个最大段后,成功收到主机乙发送的第一个段的确认段,确认段中通告的接收窗
  8. Java反射基础(一)--Class对象获取
  9. Root Pane Container(三)
  10. 在eclipse中查看android SDK的源代码
  11. 基于布谷鸟灰狼算法、灰狼算法求解复杂地形下三维无人机路径规划问题研究附matlab代码
  12. 英文期刊催稿信模板_英文投稿,询问进展,催稿 模版信
  13. 2827: 千山鸟飞绝 非旋treap
  14. 冰蝎3.0 页面存在,但是无法获取密钥
  15. C语言和Bash脚本实现身份证号码尾号验证
  16. 编译原理_P1004
  17. C++ 解9*9数独 LeetCode37题
  18. 【数字电路基础】CMOS晶体管的延时
  19. 如何调教你的360让他没有广告及烦人的提示
  20. SAP MTS案例教程简介

热门文章

  1. Visible Lattice Points SPOJ - VLATTICE
  2. P4245 【模板】任意模数多项式乘法(NTT)
  3. 牛客题霸 反转链表 C++题解/答案
  4. 模板:拓展kmp(Z函数)
  5. CF1481F-AB Tree【构造,背包】
  6. P6805-[CEOI2020]春季大扫除【贪心,树链剖分,线段树】
  7. 2021“MINIEYE杯”中国大学生算法设计超级联赛(8)(1002,1004,1006,1009)
  8. P6139-[模板]广义后缀自动机(广义 SAM)
  9. P2657-[SCOI2009]windy数【数位dp,dfs】
  10. 欢乐纪中某B组赛【2019.1.30】The penultimate day