Java压缩或放大图像处理
发布时间:2020-12-14 23:51:06 所属栏目:Java 来源:网络整理
导读:今天PHP站长网 52php.cn把收集自互联网的代码分享给大家,仅供参考。 大量的图片如何统一处理成固定宽度、或者固定长宽的图片,java中的java.awt包下面的一些类就可以实现图片处理的功能,下面就是自己写的一个简单的实例
|
以下代码由PHP站长网 52php.cn收集自互联网 现在PHP站长网小编把它分享给大家,仅供参考
大量的图片如何统一处理成固定宽度、或者固定长宽的图片,java中的java.awt包下面的一些类就可以实现图片处理的功能,下面就是自己写的一个简单的实例
/**
*@Description: 压缩或放大图像处理
*/
package cn.lulei.image.deal;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import javax.imageio.ImageIO;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
public class DealImage {
private File file = null;
private String inputDir;
private String outputDir;
private String inputFileName;
private String outputFileName;
private int outputWidth;
private int outputHeight;
private boolean proportion;//是否等比压缩
public DealImage() {
this.inputDir = "";
this.outputDir = "";
this.inputFileName = "";
this.outputFileName = "";
this.outputHeight = 200;
this.outputWidth = 200;
this.proportion = true;
}
public void setInputDir(String inputDir){
this.inputDir = inputDir;
}
public void setOutputDir(String outputDir){
this.outputDir = outputDir;
}
public void setInputFileName(String inputFileName){
this.inputFileName = inputFileName;
}
public void setOutputFileName(String outputFileName){
this.outputFileName = outputFileName;
}
public void setWidthAngHeight(int outputWidth,int outputHeight){
this.outputWidth = outputWidth;
this.outputHeight = outputHeight;
}
/**
* @param isVip
* @Date: 2013-8-7
* @Author: lulei
* @Description:处理图片
*/
private void dealImage(boolean isVip) {
try {
this.file = new File(this.inputDir + this.inputFileName);
if (!this.file.exists()){
return;
}
Image img = ImageIO.read(this.file);
if (img.getWidth(null) == -1) {
return;
}
int[] widthAndHeight = this.getNewWidthAndHeight(img);
BufferedImage bufferedImage = new BufferedImage(widthAndHeight[0],widthAndHeight[1],BufferedImage.TYPE_INT_RGB);
Graphics2D g = bufferedImage.createGraphics();
g.drawImage(img.getScaledInstance(widthAndHeight[0],Image.SCALE_SMOOTH),null);
if (!isVip) {
g.setFont(new Font("楷体",Font.ITALIC,14));
g.setColor(Color.getHSBColor(1.0f,0.3f,1.0f));
g.drawString("想要添加的水印",widthAndHeight[0]/3,widthAndHeight[1]/2);
}
File fileOut = new File(this.outputDir);
if (!fileOut.exists()) {
fileOut.mkdirs();
}
FileOutputStream fileOutputStream = new FileOutputStream(this.outputDir + this.outputFileName);
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(fileOutputStream);
encoder.encode(bufferedImage);
g.dispose();
fileOutputStream.close();
} catch (Exception e) {
// e.printStackTrace();
System.out.println("There're some errors when handling picture which path is :" + this.inputDir + this.inputFileName);
}
}
/**
* @param inputDir
* @param inputFileName
* @param outputDir
* @param outputFileName
* @param isVip
* @Date: 2013-8-7
* @Author: lulei
* @Description:处理图片
*/
public void dealImage(String inputDir,String inputFileName,String outputDir,String outputFileName,boolean isVip) {
this.dealImage(inputDir,inputFileName,outputDir,outputFileName,this.outputWidth,this.outputHeight,this.proportion,isVip);
}
/**
* @param inputDir
* @param inputFileName
* @param outputDir
* @param outputFileName
* @param outputWidth
* @param outputHeight
* @param isVip
* @Date: 2013-8-7
* @Author: lulei
* @Description:处理图片
*/
public void dealImage(String inputDir,int outputWidth,int outputHeight,outputWidth,outputHeight,isVip);
}
/**
* @param inputDir
* @param inputFileName
* @param outputDir
* @param outputFileName
* @param outputWidth
* @param outputHeight
* @param proportion
* @param isVip
* @Date: 2013-8-7
* @Author: lulei
* @Description:处理图片
*/
public void dealImage(String inputDir,boolean proportion,boolean isVip) {
this.inputDir = inputDir;
this.inputFileName = inputFileName;
this.outputDir = outputDir;
this.outputFileName = outputFileName;
this.outputWidth = outputWidth;
this.outputHeight = outputHeight;
this.proportion = proportion;
this.dealImage(isVip);
}
/**
* @param img
* @return
* @Date: 2013-8-7
* @Author: lulei
* @Description:返回压缩后的图片宽和高
*/
private int[] getNewWidthAndHeight(Image img){
int[] reInt = new int[2];
if (this.proportion) {
double rateW = ((double)img.getWidth(null)) / (double)this.outputWidth + 0.1;
double rateH = ((double)img.getHeight(null)) / (double)this.outputHeight + 0.1;
double rate = rateW > rateH ? rateW :rateH;
reInt[0] = (int)(((double)img.getWidth(null)) / rate);
reInt[1] = (int)(((double)img.getHeight(null)) / rate);
} else {
reInt[0] = this.outputWidth;
reInt[1] = this.outputHeight;
}
return reInt;
}
}
下面的类是对图片文件或者图片文件夹做统一的处理:
Java代码 收藏代码
/**
*@Description: 批处理文件夹下的所有图片
*/
package cn.lulei.image.deal;
import java.io.File;
import cn.lulei.image.deal.DealImage;
public class DealImageFile {
//图片后缀名
private static String[] IMG_TYPE = {".jpg",".bmp",".jpeg",".png",".pcx",".tiff",".gif",".tga",".exif",".fpx",".svg",".psd","cdr",".pcd",".dxf",".ufo",".eps",".hdri",".ai",".raw"};
private static int outputHeight = 200;
private static int outputWidth = 200;
private static int count = 0;
private static boolean proportion = true;
public String dealImageFile(String inputDir,String outputDir) {
return this.dealImageFile(inputDir,proportion);
}
public String dealImageFile(String inputDir,int outputHeight) {
return this.dealImageFile(inputDir,proportion);
}
/**
* @param inputDir
* @param outputDir
* @param outputWidth
* @param outputHeight
* @param proportion
* @return
* @Date: 2013-8-7
* @Author: lulei
* @Description:批处理文件夹下的文件
*/
public String dealImageFile(String inputDir,boolean proportion) {
File fileDir = new File(inputDir);
File[] files = fileDir.listFiles();
DealImage dealImage = new DealImage();
for (File file : files) {
String imgPath = file.toString().toLowerCase();
String fileName = imgPath.substring(inputDir.length());
if (this.isImage(imgPath)) {
dealImage.dealImage(inputDir,fileName,proportion,true);
count++;
} else if (file.isDirectory()) {
if (!imgPath.equals(outputDir.toLowerCase())) {
//这里是递归
this.dealImageFile(imgPath,outputDir + "/" + fileName,proportion);
}
}
}
return "Handle " + count + " pictures! ";
}
private boolean isImage(String imgPath) {
for (String str : IMG_TYPE) {
if (imgPath.endsWith(str)) {
return true;
}
}
return false;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}
以上内容由PHP站长网【52php.cn】收集整理供大家参考研究 如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
