`
风-起-了
  • 浏览: 7422 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

图片处理程序

    博客分类:
  • java
阅读更多

    大量的图片如何统一处理成固定宽度、或者固定长宽的图片,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], widthAndHeight[1], Image.SCALE_SMOOTH), 0, 0, 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, String inputFileName, String outputDir, String outputFileName, int outputWidth, int outputHeight, boolean isVip) {
		this.dealImage(inputDir, inputFileName, outputDir, outputFileName, outputWidth, outputHeight, this.proportion, 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, String inputFileName, String outputDir, String outputFileName, int outputWidth, int outputHeight, 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;
	}
}

 

 

下面的类是对图片文件或者图片文件夹做统一的处理:

 /**  
 *@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, outputDir, outputWidth, outputHeight, proportion);
	}
	
	public String dealImageFile(String inputDir, String outputDir, int outputWidth, int outputHeight) {
		return this.dealImageFile(inputDir, outputDir, outputWidth, outputHeight, proportion);
	}
	/**
	 * @param inputDir
	 * @param outputDir
	 * @param outputWidth
	 * @param outputHeight
	 * @param proportion
	 * @return
	 * @Date: 2013-8-7  
	 * @Author: lulei  
	 * @Description:批处理文件夹下的文件
	 */
	public String dealImageFile(String inputDir, String outputDir, int outputWidth, int outputHeight, 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, outputDir, fileName, outputWidth, outputHeight, proportion, true);
				count++; 
			} else if (file.isDirectory()) {
				if (!imgPath.equals(outputDir.toLowerCase())) {
					//这里是递归
					this.dealImageFile(imgPath, outputDir + "/" + fileName, outputWidth, outputHeight, 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+JS图片处理程序

    在实际应用中,一个PHP+JS图片处理程序的工作流程可能是这样的:用户在前端选择图片,JS进行预处理并显示预览;然后通过AJAX将图片数据发送到服务器,PHP接收并处理图片(如调整尺寸、保存到服务器),最后返回处理...

    图片处理程序(用C#写的一个小程序)

    本项目是一个使用C#编程语言编写的图片处理程序,专为实现图像格式转换和尺寸调整功能。C#是一种广泛使用的面向对象的编程语言,尤其适合构建Windows桌面应用程序,如本案例所示。 在Microsoft Visual Studio 2005...

    一个简单的图片处理程序

    标题 "一个简单的图片处理程序" 暗示我们要讨论的是一个使用编程语言处理图像的应用,这里特别提到了“内存法”。这通常意味着程序在内存中完成图像数据的加载、处理和存储,以提高效率和安全性。 内存法在图像处理...

    基于安卓的图片处理程序

    在安卓平台上,开发一款图片处理程序涉及到多个技术领域和组件,包括图像处理库、用户界面设计、文件操作以及性能优化等。以下是对这些关键知识点的详细说明: 1. **Android SDK**:首先,任何安卓应用的开发都需要...

    图片处理程序可以作为辅助功能放在项目里

    在IT项目开发中,图片处理程序常常扮演着重要的角色,特别是在网页设计、移动应用、数据分析等领域。这个“图片处理程序”作为一个辅助功能,能够帮助开发者有效地管理和优化图像资源,提高用户体验,同时也减轻...

    图片处理程序(Qt)

    【图片处理程序(Qt)】是一个基于Qt框架开发的简易应用程序,主要功能是实现对图像进行翻转、调整大小和改变像素的操作。Qt是一个跨平台的C++图形用户界面库,广泛应用于桌面应用、移动应用以及嵌入式系统中。在这...

    delphi不错的图片处理程序

    标题中的"delphi不错的图片处理程序"表明这是一个利用Delphi编程环境开发的图像处理软件。Delphi是一款基于Object Pascal语言的集成开发环境(IDE),以其高效、快速的编译能力和强大的Windows应用程序开发能力而...

    mapgis 入库图片处理程序

    总的来说,"MapGIS入库图片处理程序"是GIS工作流程中的重要环节,它简化了图片数据的预处理和入库过程,对于土地资源调查、环境监测等项目具有显著的价值。通过掌握上述知识点,用户能够更好地理解和利用这一工具,...

    一个小的图片处理程序

    这个“一个小的图片处理程序”显然是一个专为此目的设计的应用软件,可能具有简洁的操作界面和基础的图像处理功能。让我们深入探讨一下相关的知识点。 首先,图片处理程序的基础是图像处理算法。这些算法包括但不...

    图片处理程序 中国城

    "图片处理程序 中国城" 是一款专门针对图像编辑和美化设计的应用,它结合了中国特色的文化元素,为用户提供了丰富的图片处理功能。这款程序可能包括了一系列的滤镜、特效、贴纸以及画笔工具,旨在让用户能够轻松创作...

    基于Python的图片处理程序源码.zip

    在本压缩包“基于Python的图片处理程序源码.zip”中,您将获得一个使用Python编写的图片处理软件的完整源代码。这个程序具有丰富的功能,包括添加文字水印、图片水印、加载和保存图片以及批量重命名图片。下面我们将...

    Fotushop易语言图片处理程序源码

    《易语言图片处理程序源码解析与应用》 在IT领域,编程语言是创造各种软件的基础,而易语言作为一款本土化的编程环境,以其简洁易懂的语法深受初学者和专业开发者的喜爱。本篇文章将深入探讨“Fotushop易语言图片...

    基于j2me的图片处理程序

    【标题】基于J2ME的图片处理程序 在移动设备技术快速发展的今天,J2ME(Java 2 Micro Edition)作为早期的移动平台开发框架,为开发者提供了在小型设备上创建应用程序的能力,其中包括图片处理程序。J2ME以其轻量级...

    C#开发图片处理程序

    ### C#开发图片处理程序知识点总结 #### 一、项目背景与目标 - **背景**:随着计算机技术的发展,图片处理已成为日常生活中不可或缺的一部分。然而,市场上现有的图片处理软件要么功能过于强大,使得非专业人士难以...

    用vb做的简易图片处理程序

    在VB(Visual Basic)编程环境中,我们可以利用GDI+(Graphics Device Interface Plus)库来创建一个简易的图片处理程序。这个程序集成了多种常见的图像操作功能,如灰度处理、图片翻转、旋转、调整亮度与对比度,...

    C# 图片渐变、卷积效果等简易图片处理程序

    总结一下,本项目中的"C# 图片渐变、卷积效果等简易图片处理程序"提供了一个平台,让开发者能够实现基本的图像处理功能。通过理解和实现这些技术,你可以进一步探索复杂的图像处理任务,如图像分割、特征提取、模式...

    C# 图片处理程序 C/S

    通过“设置”菜单中的命令,可以对图片进行特效处理(图片特效)、调整图片的亮度、大小及对比度(图片调节)、在图片上添加文字(图片文字)、以幻灯片的形式浏览图片(幻灯片放映)。 通过“文件”菜单中的命令,...

    基于Java语言的图片处理程序设计源码

    该项目是一款基于Java语言的综合性图片处理程序,源码文件共计120个,其中Java源文件84个,用于实现核心功能;FXML文件16个,负责用户界面设计;CSS文件6个,用于美化界面;还包括2个gitignore文件、2个prefs文件...

Global site tag (gtag.js) - Google Analytics