java使用JPEGEncodeParam类的setQuality方法进行高质量图片缩放类(转)

找了很多都不理想,最后找个到老外写的,不得不承认老外写的确实牛B

主要是:JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);

JPEGEncodeParam param = encoder

.getDefaultJPEGEncodeParam(bufferedImage);

param.setQuality(quality, true);

encoder.setJPEGEncodeParam(param);

具体java代码如下:

package com.test;

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

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

import com.sun.image.codec.jpeg.JPEGEncodeParam;

import javax.swing.*;

import java.io.File;

import java.io.FileOutputStream;

import java.io.IOException;

import java.awt.*;

import java.awt.image.BufferedImage;

import java.awt.image.Kernel;

import java.awt.image.ConvolveOp;

public class ImageUtil {

public static void resize(File originalFile, File resizedFile,

int newWidth, float quality) throws IOException {

if (quality > 1) {

throw new IllegalArgumentException(

"Quality has to be between 0 and 1");

}

ImageIcon ii = new ImageIcon(originalFile.getCanonicalPath());

Image i = ii.getImage();

Image resizedImage = null;

int iWidth = i.getWidth(null);

int iHeight = i.getHeight(null);

if (iWidth > iHeight) {

resizedImage = i.getScaledInstance(newWidth, (newWidth * iHeight)

/ iWidth, Image.SCALE_SMOOTH);

} else {

resizedImage = i.getScaledInstance((newWidth * iWidth) / iHeight,

newWidth, Image.SCALE_SMOOTH);

}

// This code ensures that all the pixels in the image are loaded.

Image temp = new ImageIcon(resizedImage).getImage();

// Create the buffered image.

BufferedImage bufferedImage = new BufferedImage(temp.getWidth(null),

temp.getHeight(null), BufferedImage.TYPE_INT_RGB);

// Copy image to buffered image.

Graphics g = bufferedImage.createGraphics();

// Clear background and paint the image.

g.setColor(Color.white);

g.fillRect(0, 0, temp.getWidth(null), temp.getHeight(null));

g.drawImage(temp, 0, 0, null);

g.dispose();

// Soften.

float softenFactor = 0.05f;

float[] softenArray = { 0, softenFactor, 0, softenFactor,

1 - (softenFactor * 4), softenFactor, 0, softenFactor, 0 };

Kernel kernel = new Kernel(3, 3, softenArray);

ConvolveOp cOp = new ConvolveOp(kernel, ConvolveOp.EDGE_NO_OP, null);

bufferedImage = cOp.filter(bufferedImage, null);

// Write the jpeg to a file.

FileOutputStream out = new FileOutputStream(resizedFile);

// Encodes image as a JPEG data stream

JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);

JPEGEncodeParam param = encoder

.getDefaultJPEGEncodeParam(bufferedImage);

param.setQuality(quality, true);

encoder.setJPEGEncodeParam(param);

encoder.encode(bufferedImage);

} // Example usage

public static void main(String[] args) throws IOException {

// File originalImage = new File("C:\\11.jpg");

// resize(originalImage, new File("c:\\11-0.jpg"),150, 0.7f);

// resize(originalImage, new File("c:\\11-1.jpg"),150, 1f);

File originalImage = new File("C:\\1207.gif");

resize(originalImage, new File("c:\\1207-0.jpg"),150, 0.7f);

resize(originalImage, new File("c:\\1207-1.jpg"),150, 1f);

}

}

来源:http://luoyahu.iteye.com/blog/1312043

java的setquality值多少_java使用JPEGEncodeParam类的setQuality方法进行高质量图片缩放类(转)...相关推荐

  1. java的默认值规则_Java 8:默认方法解析规则

    java的默认值规则 随着Java 8中默认方法的引入,一个类现在可以从多个位置(例如另一个类或接口)继承相同的方法. 在这种情况下,可以使用以下规则来确定选择哪种方法: 类或超类方法声明始终优先于默 ...

  2. java集合根据值排序_Java 8:对集合中的值进行排序

    java集合根据值排序 意识到Java 8将在接下来的几周内发布其GA版本之后,我认为现在是时候来看看它了,在过去的一周里,我一直在阅读Venkat Subramaniam的书 . 我要讲的是第3章, ...

  3. java未知变量的类型_Java语言中类、变量及方法的声明 | 学步园

    类声明 [ public][ abstract][ final] class NameOfClass [ extends Super][ implements Interfaces] pubilc:声 ...

  4. java for循环创建线程_Java创建线程的两种方法

    大多数情况,通过实例化一个Thread对象来创建一个线程.Java定义了两种方式: 实现Runnable 接口: 可以继承Thread类. 下面的两小节依次介绍了每一种方式. 实现Runnable接口 ...

  5. java查询类提供的方法_查询一个类的方法和构建器的JAVA程序

    查询一个类的方法和构建器的JAVA程序 JAVA语言的类库中的类不计其数,其中设计的方法更是不胜其多,这是任何一个教科书--无论它是多么详尽--所不能穷尽的.如果我们要使用某个类,要查询它的构建器的用 ...

  6. java 顺序存储键值对_java://Comparator、Comparable的用法(按照要求将map集合的键值对进行顺序输出)...

    import java.util.*; public class Person implements Comparable//使Person的属性具有比较性 { private String name ...

  7. Java接口属性值定义_Java接口(interface)的定义和使用

    Java-接口interface定义和使用 1.什么是接口 Java为单继承,当父类的方法种类无法满足子类需求时,可实现接口扩容子类能力. 即:Java中使用抽象类/父类表示通用属性时,每个类只能继承 ...

  8. java 两个值对换_java将两个整型变量值进行互换的几种实现方法

    在很多时候,我们会使用到将两个整型变量值进行互换,比如冒泡排序,通过判断来将数组变量的值逐步交换,那么怎么交换值才能最有效最节省空间呢? 首先,我们会想到的,用一个零时变量来做中间的过度存储空间,这是 ...

  9. java实体null值显示_java反射实现前端接收实体对象,去除“null”字符串(示例代码)...

    从前台输入的的json 格式数据.转换成对应的实体类后. 可能会出现把null 转换成"null"字符串.这样的数据在存入数据库是可能会因为数据格式,存入时会有问题.实体字段多,修 ...

最新文章

  1. am大学计算机科学,德克萨斯AM大学TAMU(Texas AM University )计算机科学Computer Science专业排名第201-250位(2021年THE世界大学商科排名)...
  2. 如何用Postman组装Request并且查看Response
  3. 大白话解析模拟退火算法、遗传算法入门
  4. 成功解决matplotlib绘图的时候,自定义横坐标和纵坐标刻度数值(调整坐标轴刻度间隔)
  5. 手把手教你发布一个Python包
  6. golang 根据基础的url下载静态服务器上所有的文件
  7. JVM源码分析之javaagent原理完全解读
  8. 时下流行的9种恶意软件,你都了解吗?
  9. 你知道,什么时候用Vue计算属性吗?
  10. OpenShift 4 之Knative(1) - 创建Knative无服务器架构环境
  11. ubuntu自定义分辨率
  12. 编码基本功:类成员要加前缀,这样可以避免同名变量
  13. 浅谈对软件工程的认识与理解
  14. javaee实训报告总结_javaee实习报告.doc
  15. 群晖 nas docker 时间校准
  16. Java Document 工具类
  17. 手机中的RAM和ROM分别对应电脑的内存和硬盘
  18. VS2010 中修改项目名称
  19. rn 滑动验证_rn-fetch-blob
  20. JSP核心——分页查询

热门文章

  1. 集成基于Websocket的Stomp连接
  2. Ubuntu中给手机安装apk文件
  3. MyBatis自定义自定义动态SQL解析方式
  4. xenserver新增试验网卡
  5. 一些关于mic的知识
  6. fiddler如何看
  7. 集成电路ic是什么?
  8. sql server 2008 R2 与 sql server 2012 下载地址(包括x86、x64)
  9. Comparable Comparator
  10. 画图软件visio安装