java的setquality值多少_java使用JPEGEncodeParam类的setQuality方法进行高质量图片缩放类(转)...
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方法进行高质量图片缩放类(转)...相关推荐
- java的默认值规则_Java 8:默认方法解析规则
java的默认值规则 随着Java 8中默认方法的引入,一个类现在可以从多个位置(例如另一个类或接口)继承相同的方法. 在这种情况下,可以使用以下规则来确定选择哪种方法: 类或超类方法声明始终优先于默 ...
- java集合根据值排序_Java 8:对集合中的值进行排序
java集合根据值排序 意识到Java 8将在接下来的几周内发布其GA版本之后,我认为现在是时候来看看它了,在过去的一周里,我一直在阅读Venkat Subramaniam的书 . 我要讲的是第3章, ...
- java未知变量的类型_Java语言中类、变量及方法的声明 | 学步园
类声明 [ public][ abstract][ final] class NameOfClass [ extends Super][ implements Interfaces] pubilc:声 ...
- java for循环创建线程_Java创建线程的两种方法
大多数情况,通过实例化一个Thread对象来创建一个线程.Java定义了两种方式: 实现Runnable 接口: 可以继承Thread类. 下面的两小节依次介绍了每一种方式. 实现Runnable接口 ...
- java查询类提供的方法_查询一个类的方法和构建器的JAVA程序
查询一个类的方法和构建器的JAVA程序 JAVA语言的类库中的类不计其数,其中设计的方法更是不胜其多,这是任何一个教科书--无论它是多么详尽--所不能穷尽的.如果我们要使用某个类,要查询它的构建器的用 ...
- java 顺序存储键值对_java://Comparator、Comparable的用法(按照要求将map集合的键值对进行顺序输出)...
import java.util.*; public class Person implements Comparable//使Person的属性具有比较性 { private String name ...
- Java接口属性值定义_Java接口(interface)的定义和使用
Java-接口interface定义和使用 1.什么是接口 Java为单继承,当父类的方法种类无法满足子类需求时,可实现接口扩容子类能力. 即:Java中使用抽象类/父类表示通用属性时,每个类只能继承 ...
- java 两个值对换_java将两个整型变量值进行互换的几种实现方法
在很多时候,我们会使用到将两个整型变量值进行互换,比如冒泡排序,通过判断来将数组变量的值逐步交换,那么怎么交换值才能最有效最节省空间呢? 首先,我们会想到的,用一个零时变量来做中间的过度存储空间,这是 ...
- java实体null值显示_java反射实现前端接收实体对象,去除“null”字符串(示例代码)...
从前台输入的的json 格式数据.转换成对应的实体类后. 可能会出现把null 转换成"null"字符串.这样的数据在存入数据库是可能会因为数据格式,存入时会有问题.实体字段多,修 ...
最新文章
- am大学计算机科学,德克萨斯AM大学TAMU(Texas AM University )计算机科学Computer Science专业排名第201-250位(2021年THE世界大学商科排名)...
- 如何用Postman组装Request并且查看Response
- 大白话解析模拟退火算法、遗传算法入门
- 成功解决matplotlib绘图的时候,自定义横坐标和纵坐标刻度数值(调整坐标轴刻度间隔)
- 手把手教你发布一个Python包
- golang 根据基础的url下载静态服务器上所有的文件
- JVM源码分析之javaagent原理完全解读
- 时下流行的9种恶意软件,你都了解吗?
- 你知道,什么时候用Vue计算属性吗?
- OpenShift 4 之Knative(1) - 创建Knative无服务器架构环境
- ubuntu自定义分辨率
- 编码基本功:类成员要加前缀,这样可以避免同名变量
- 浅谈对软件工程的认识与理解
- javaee实训报告总结_javaee实习报告.doc
- 群晖 nas docker 时间校准
- Java Document 工具类
- 手机中的RAM和ROM分别对应电脑的内存和硬盘
- VS2010 中修改项目名称
- rn 滑动验证_rn-fetch-blob
- JSP核心——分页查询