java图片高质量缩放类
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.awt.image.ConvolveOp;
import java.awt.image.Kernel;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import javax.swing.ImageIcon;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGEncodeParam;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
@SuppressWarnings("restriction")
public class PictrueScaleUtils {
/**
* jpg图片的缩放
* @param originalFile 原图片路径
* @param resizedFile 缩放后图片的路径
* @param newWidth 缩放后图片的宽度
* @param newHeight 缩放后图片的高度【当isScale为false时newHeight不起作用】
* @param isScale 是否按比例缩放
* @param quality 缩放质量
* @throws IOException
*/
public static void jpgScalePicture(File originalFile, File resizedFile,
int newWidth, int newHeight, Boolean isScale,
float quality) throws IOException {
if (quality > 1) {
throw new IllegalArgumentException("图片质量是0和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(isScale){
if (iWidth > iHeight) {
resizedImage = i.getScaledInstance(newWidth, (newWidth * iHeight)/ iWidth, Image.SCALE_SMOOTH);
} else {
resizedImage = i.getScaledInstance((newWidth * iWidth) / iHeight, newWidth, Image.SCALE_SMOOTH);
}
} else {
resizedImage = i.getScaledInstance(newWidth, newHeight, Image.SCALE_SMOOTH);
}
// 1这个代码确保图像中的所有像素的加载。
Image temp = new ImageIcon(resizedImage).getImage();
// 2创建缓冲的图像。
BufferedImage bufferedImage = new BufferedImage(temp.getWidth(null), temp.getHeight(null), BufferedImage.TYPE_INT_RGB);
// 3将图像复制到缓冲的图像。
Graphics g = bufferedImage.createGraphics();
// 4背景清晰的图像和画。
g.setColor(Color.white);
g.fillRect(0, 0, temp.getWidth(null), temp.getHeight(null));
g.drawImage(temp, 0, 0, null);
g.dispose();
// 4软化。
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);
// 6写的JPEG文件。
FileOutputStream out = new FileOutputStream(resizedFile);
// 7作为一个JPEG编码图像数据流
@SuppressWarnings("restriction")
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
@SuppressWarnings("restriction")
JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(bufferedImage);
param.setQuality(quality, true);
encoder.setJPEGEncodeParam(param);
encoder.encode(bufferedImage);
}
/**************************************************************************************************************************/
public static void main(String[] args) throws IOException {
File originalImage = new File("E:/aaa/png - 副本.png");
File resizedFile = new File("E:/aaa/png - 副本aaaaaaaaaaaaaa.png");
jpgScalePicture(originalImage, resizedFile, 200, 200, true, 1f);
System.err.println("转化成功''''''''''''''''''");
}
}
Java中的类JPEGImageEncoder,JPEGCodec和JPEGEncodeParam的导入问题
java的图片压缩,需要用这三个类,默认这三个类在eclipse是导不进来,直接报错的。
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGEncodeParam;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
解决办法:
Eclipse默认把这些受访问限制的API设成了ERROR。只要把Windows-Preferences-Java-Complicer-Errors/Warnings里面的Deprecated and restricted API中的Forbidden references(access rules)选为Warning就可以编译通过。
java图片高质量缩放类的更多相关文章
- 【Java】图片高质量缩放类
package com.test; import com.sun.image.codec.jpeg.JPEGImageEncoder; import com.sun.image.codec.jpeg. ...
- C#剪切生成高质量缩放图片
/// <summary> /// 高质量缩放图片 /// </summary> /// <param name="OriginFilePath"&g ...
- java高质量缩放图片
可按照比例缩放,也可以指定宽高 import com.sun.image.codec.jpeg.JPEGImageEncoder; import com.sun.image.codec.jpeg.JP ...
- Python高质量缩放切图,抗锯齿
最近刚接触Python,以迅雷不及掩耳盗铃之势(只是迫不及待)应用到工作中去了之前用 cmd+photoshop做批量图像处理(缩放切片),在执行效率(速度)上和灵活度上有很大限制,遂转战Python ...
- Java编写高质量代码改善程序的151个建议
第一章 Java开发中通用的方法和准则 建议1:不要在常量和变量中出现易混淆的字母: (i.l.1:o.0等). 建议2:莫让常量蜕变成变量: (代码运行工程中不要改变常量值). 建议3:三元操作符 ...
- C#压缩图片——高质量压缩方式
传入Bitmap对象,以及新图片的长宽(Bitmap.Size),这样生成的就是跟原图尺寸一致的低质量图片 public Bitmap GetImageThumb(Bitmap mg, Size ne ...
- Java图片工具类,完成图片的截取和任意缩放
package com.common.util; import java.awt.Graphics2D; import java.awt.Image; import java.awt.Renderin ...
- C#放缩、截取、合并图片并生成高质量新图的类
原文:C#放缩.截取.合并图片并生成高质量新图的类 using System;using System.Drawing;using System.Drawing.Imaging;using Syste ...
- 编写高质量代码:改善Java程序的151个建议(第3章:类、对象及方法___建议47~51)
建议47:在equals中使用getClass进行类型判断 本节我们继续讨论覆写equals的问题,这次我们编写一个员工Employee类继承Person类,这很正常,员工也是人嘛,而且在JavaBe ...
随机推荐
- javascript设计模式1
普通写法 function startAnimation(){ ... } function stopAnimation(){ ... } 对象类 /*Anim class*/ var Anim=fu ...
- Python安装、配置
1.Python简介:Python在Linux.windows.Mac os等操作系统下都有相应的版本,不管在什么操作系统下,它都能够正常工作.除非使用平台相关功能,或特定平台的程序库,否则可以跨平台 ...
- 如何禁止掉SharePoint页面个性化(网站操作-编辑页面)
使用SharePoint Designer打开,或者创建一个新的Master Page,找到SPWebPartManager控件,如下所示,修改它的属性“Personalization-Enabled ...
- Esper系列(十一)NamedWindow语法Merge、Queries、Indexing、Dropping
On-Merge With Named Windows 功能:对window中的insert.update.delete操作进行组合运用. 格式: 1 "; 14 15 Sys ...
- HW5.3
import java.util.Scanner; public class Solution { public static void main(String[] args) { Scanner i ...
- CodeForces Round #179 (295A) - Greg and Array
题目链接:http://codeforces.com/problemset/problem/295/A 我的做法,两次线段树 #include <cstdio> #include < ...
- A Tour of Go For
Go has only one looping construct, the for loop. The basic for loop looks as it does in C or Java, e ...
- javascript function对象
<html> <body> <script type="text/javascript"> Function.prototype.get_my_ ...
- (贪心5.1.2)POJ 2287 Tian Ji -- The Horse Racing
/* * POJ_2287.cpp * * Created on: 2013年10月9日 * Author: Administrator */ #include <iostream> #i ...
- 特殊的反转单链表算法(C++)
普通的单链表反转算法 大学的时候也做过好几次单链表的反转,记得当时都是用三个变量不断修改next的值然后实现反转. ListNode* reverseList(ListNode* head) { Li ...