package com.test;

import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
import org.junit.Test;
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException; /**
*图片压缩
*/
public class ImageTest { private Image img;
private int width;
private int height; @Test
public void test(){
try{
//压缩开始
ImageTest imgCom = new ImageTest("D://1.png");
imgCom.resizeFix(400, 400,"D://2.png");
//压缩结束
}catch (Exception e){
e.printStackTrace();
}
} /**
* 构造函数
* @param fileName 图片路径
* @throws IOException
*/
public ImageTest(String fileName) throws IOException {
// 读入文件
File file = new File(fileName);
// 构造Image对象
img = ImageIO.read(file);
// 得到源图宽
width = img.getWidth(null);
// 得到源图长
height = img.getHeight(null);
} /**
* 按照宽度还是高度进行压缩
* @param w int 最大宽度
* @param h int 最大高度
* @param filePath 图片路径
* @throws IOException
*/
public void resizeFix(int w, int h,String filePath) throws IOException {
if (width / height > w / h) {
resizeByWidth(w,filePath);
} else {
resizeByHeight(h,filePath);
}
} /**
* 以宽度为基准,等比例放缩图片
* @param w int 新宽度
* @param filePath 图片路径
* @throws IOException
*/
public void resizeByWidth(int w,String filePath) throws IOException {
int h = (int) (height * w / width);
resize(w, h,filePath);
} /**
* 以高度为基准,等比例缩放图片
* @param h int 新高度
* @param filePath 图片路径
* @throws IOException
*/
public void resizeByHeight(int h,String filePath) throws IOException {
int w = (int) (width * h / height);
resize(w, h,filePath);
} /**
* 强制压缩/放大图片到固定的大小
* @param w int 新宽度
* @param h int 新高度
* @param filePath
* @throws IOException
*/
public void resize(int w, int h,String filePath) 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(filePath);
// 输出到文件流
FileOutputStream out = new FileOutputStream(destFile);
// 可以正常实现bmp、png、gif转jpg
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
// JPEG编码
encoder.encode(image);
out.close();
}
}

  

Java图片压缩的更多相关文章

  1. java图片压缩(Thumbnails)

    package com.hzxc.groupactivity.server.util; import java.awt.image.BufferedImage; import java.io.*; i ...

  2. Java 图片压缩

    package com.wuyu.util; import java.awt.Graphics2D; import java.awt.Image; import java.awt.image.Buff ...

  3. 在windows和Linux上安装ImageMagick与jmagick,Maven配置、Java图片压缩代码(整理网上、结合自己情况、编写出来的新安装方式)

    安装过程(如图所示) .Exceptionin thread "main" java.lang.UnsatisfiedLinkError:C:\WINDOWS\system32\j ...

  4. java 图片压缩 缩放

    废话不多说,直接上代码,静态方法可直接调用,中间用流来处理的 /** * 图片缩放(未考虑多种图片格式和等比例缩放) * @param filePath 图片路径 * @param height 高度 ...

  5. java,图片压缩,略缩图

    在网上找了两个图片的缩放类,在这里分享一下: package manager.util; import java.util.Calendar; import java.io.File; import ...

  6. java 图片压缩 剪切 水印 转换 黑白 缩放

    专注java已6年,欢迎加入java核心技术QQ群:135138817,每周五晚有群主进行技术讲座. import java.awt.AlphaComposite; import java.awt.C ...

  7. Thumbnailator java图片压缩,加水印,批量生成缩略图

    地址:http://code.google.com/p/thumbnailator/ 1.指定大小进行缩放 //size(宽度, 高度) /* * 若图片横比200小,高比300小,不变 * 若图片横 ...

  8. 纯Java代码 图片压缩

    Java图片压缩代码 package com.img; import java.awt.Image; import java.awt.image.BufferedImage; import java. ...

  9. Java中图片压缩处理

    原文http://cuisuqiang.iteye.com/blog/2045855 整理文档,搜刮出一个Java做图片压缩的代码,稍微整理精简一下做下分享. 首先,要压缩的图片格式不能说动态图片,你 ...

随机推荐

  1. 转 Oracle监听器启动出错:本地计算机上的OracleOraDb11g_home1TNSListener服务启动后又停止了解决方案

    今早刚上班.客户打电话过来说系统访问不了,输入用户名.用户号不能加载出来!听到这个问题,第一时间想到的是不是服务器重新启动了,Oracle数据库的相关服务没有启动的原因.查看服务的时候,发现相关的服务 ...

  2. linux与Windows使用编译区别及makefile文件编写

    一.Windows与:Linux嵌入式开发区别 Windows下编辑.编译.执行 编辑: sourceInsight:ADS: 编译:指定链接地址,指定链接顺序,编译 执行:烧写到单板再启动 Linu ...

  3. gcc与g++的一些关系

    Gcc 简介Linux系统下的gcc(GNU C Compiler)是GNU推出的功能强大.性能优越的多平台编译器,是GNU的代表作品之一.Gcc是可以在多种硬体平台上编译出可执行程序的超级编译器,其 ...

  4. WPF DataGrid添加编号列

    WPF DataGrid添加编号列? 第一步:<DataGridTemplateColumn Header="编号" Width="50" MinWidt ...

  5. webGL之three.js入门2

    入门建议: webGL中文翻译教程,基于NeHe的openGL教程:http://www.hiwebgl.com/?p=42 . WebGL中文网 http://www.hewebgl.com/ ,里 ...

  6. 寻找数组中第K大的数

    给定一个数组A,要求找到数组A中第K大的数字.对于这个问题,解决方案有不少,此处我只给出三种: 方法1: 对数组A进行排序,然后遍历一遍就可以找到第K大的数字.该方法的时间复杂度为O(N*logN) ...

  7. shell文件描述符和重定向

    1.文件描述符是与一个打开的文件或数据流相关联的整数.文件描述符0,1,2是系统预留的. 0 --------stdin(标准输入) 1 --------stdout(标准输出) 2--------- ...

  8. 不同安卓手机的 安卓版本不同,xpath元素也不同

    模拟器是 夜神模拟器 版本是 4.4.2 LG手机  版本是 8.0.0

  9. HDOJ 2003 求绝对值

    #include<cstdio> #include<cmath> int main() { double a; while (scanf_s("%lf", ...

  10. [UE4]创建属性绑定