package ii7090;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.color.ColorSpace;
import java.awt.image.BufferedImage;
import java.awt.image.ColorConvertOp;
import java.awt.image.CropImageFilter;
import java.awt.image.FilteredImageSource;
import java.awt.image.ImageFilter;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
public class PngTools {
/**
* 图像类型转换 GIF->JPG GIF->PNG PNG->JPG PNG->GIF(X)
*/
public static void convert(String source, String result) {
try {
File f = new File(source);
f.canRead();
f.canWrite();
BufferedImage src = ImageIO.read(f);
ImageIO.write(src, "JPG", new File(result));
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 彩色转为黑白
*
* @param source
* @param result
*/
public static void gray(String source, String result) {
try {
BufferedImage src = ImageIO.read(new File(source));
ColorSpace cs = ColorSpace.getInstance(ColorSpace.CS_GRAY);
ColorConvertOp op = new ColorConvertOp(cs, null);
src = op.filter(src, null);
ImageIO.write(src, "JPEG", new File(result));
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 实现图像的切割
*
* @param srcImageFile
* @param standardWidth
* @param standardHeight
*/
public static void cut(String srcImageFile, int standardWidth,
int standardHeight) {
try {
Image img;
ImageFilter cropFilter;
System.out.println("cut image");
// 读取源图像
BufferedImage bi = ImageIO.read(new File(srcImageFile));
int srcWidth = bi.getWidth(); // 源图宽度
int srcHeight = bi.getHeight(); // 源图高度
Image image = bi.getScaledInstance(srcWidth, srcHeight,
Image.SCALE_DEFAULT);
int dx = 0;// 裁剪图像的x点位置
int dy = 0;// 裁剪图像的y点位置
cropFilter = new CropImageFilter(dx, dy, standardWidth,
standardHeight);//提取现有 Image 中的给定矩形区域,为包含刚提取区域的新图像提供源。
img = Toolkit.getDefaultToolkit().createImage(
new FilteredImageSource(image.getSource(), cropFilter));//使用FilteredImageSource为原图像的新过滤版本产生图像数据
BufferedImage tag = new BufferedImage(standardWidth,
standardHeight, BufferedImage.TYPE_INT_RGB); //创建width,height大小的一个图像缓冲区
Graphics g = tag.getGraphics();
g.drawImage(img, 0, 0, null);
g.dispose();
ImageIO.write(tag, "JPEG", new File(srcImageFile + "pp.jpg"));
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 实现图像的缩放
*
* @param srcImageFile
* @param standardWidth
* @param standardHeight
*/
public static void scale(String srcImageFile, int standardWidth,
int standardHeight) {
try {
System.out.println("scale image");
BufferedImage src = ImageIO.read(new File(srcImageFile)); // 读入文件
Image image = src.getScaledInstance(standardWidth, standardHeight,
Image.SCALE_DEFAULT); //根据width,height创建此图像的缩放版本,按指定的 width 和 height 呈现图像
BufferedImage tag = new BufferedImage(standardWidth,
standardHeight, BufferedImage.TYPE_INT_RGB); //创建width,height大小的一个图像缓冲区
Graphics g = tag.getGraphics();
g.drawImage(image, 0, 0, null); //将图像会知道缓冲区上
g.dispose();
ImageIO.write(tag, "JPG", new File(srcImageFile + "name.JPG"));// 输出到文件流
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* @param args
*/
public static void main(String[] args) {
cut("d:/2012.jpg", 2000, 2000);
// scale("D:/2012.jpg", 200, 100);
}
}
参考:http://blog.csdn.net/boy_wh520/archive/2007/04/12/1561519.aspx
http://twobrushes.blog.163.com/blog/static/7891240420082824148850/
分享到:
相关推荐
在这个图片搜索系统中,开发者可能利用了J2SE的核心功能,如对象模型、多线程、网络通信以及I/O操作等。 GUI(图形用户界面)是系统与用户交互的主要方式,Swing和AWT是Java提供的两个主要GUI工具包。Swing是建立在...
总结来说,基于J2SE和FTP协议的文件、图片上传程序开发涉及到网络编程、文件操作以及可能的UI设计。理解FTP协议的运作机制,合理利用Java提供的网络和I/O类,以及良好的编程实践,是构建此类程序的关键。在实际项目...
在设计用户界面时,图片元素常用于增强视觉效果,提供图标指示或美化界面。例如,可使用图标的按钮来表示不同操作,用图表展示销售或库存趋势。这些image文件需要与界面设计紧密结合,形成统一的视觉风格,提升系统...
这个启动器可能包含了必要的逻辑来查找和启动Java应用程序,并可能包含了一些基本的错误处理机制。 使用此类工具时,开发者通常需要按照以下步骤操作: 1. **准备JAR文件**:首先,确保你的Java应用程序已经被正确...
总的来说,Java J2SE QQ毕业论文会涵盖Java编程基础、GUI设计、网络编程、多线程、文件操作等多个方面,通过实现一个类似QQ的即时通讯软件,学生可以深入理解和掌握这些关键知识点,并且在实践中提升自己的编程技能...
5. **图形渲染**:尽管Swing提供了基本的图形绘制功能,但为了达到更好的视觉效果,开发者可能会使用Graphics2D类进行更精细的定制,比如绘制不同花色和数字的纸牌图片,或者添加动画效果。 6. **错误处理**:良好...
在Java Web开发中,文件上传是一个常见的需求,特别是在用户需要提交包含图片、文档等非文本数据的表单时。在J2SE 5.0之前,标准的Java API并没有提供直接的文件上传支持,因此开发者需要依赖第三方库或者自己实现...
字节流可用于任何类型的对象,包括二进制对象,而字符流只能处理字符或者字符串(比如对图片文件的操作就只能用字节流) 3-5.一个字符可以是1个字节,也可以是2个或多个字节 一个字节就是8个位,也就是对同一数据源...
在Java世界中,J2SE(Java 2 Platform, Standard Edition)是开发桌面应用程序的基础平台。本项目聚焦于使用J2SE来实现一个简单的网页浏览器,这是一个深入理解Java GUI编程和网络通信的好方法。我们将探讨如何利用...
`blackImgURL`和`whiteImgURL`分别对应黑棋和白棋的图片,`currentImgURL`可能是用于表示当前选中位置的图片。 在`Panel`类中,`actionPerformed`方法的实现是事件驱动编程的关键,当用户点击“开始游戏”时,调用`...
6. **资源管理**:考虑到程序的可维护性和用户体验,可能会包含资源文件管理,如图片、图标等,这可能涉及到ClassLoader的使用来加载资源。 通过研究这个源码,开发者不仅可以了解Java的基础语法和面向对象设计,还...
3. **事件处理**:在坦克大战中,玩家的操作,如移动、射击,需要通过监听键盘事件来实现。这涉及到Java的事件监听机制,包括ActionListener和KeyListener。 4. **多线程**:游戏通常需要同时处理多个任务,如坦克...
在"TankWar2.9"这个压缩包中,可能包含了游戏的配置文件、资源文件(如图片、音频)等。开发者可能使用Java的File、InputStream/OutputStream等类进行文件的读写,以便加载游戏资源或者保存用户进度。 【游戏循环与...
8. **文件操作**:例如读取保存的游戏进度,或者记录玩家分数,可能需要使用FileInputStream、FileOutputStream等进行文件读写。 9. **错误处理**:良好的错误处理机制能提高游戏的稳定性和用户体验,如使用try-...
2. **事件监听**: 游戏中的每一步操作,如掷骰子、移动棋子,都需要响应用户的交互。这需要用到事件监听机制,将用户的行为转化为程序逻辑。 3. **多线程**: 游戏进程通常需要多线程来实现并发处理,比如同时处理多...
此外,为了实现图片的选择和难度级别的设定,开发者可能使用了文件I/O操作来读取和加载用户选择的图片。Java的`java.io`包提供了丰富的类用于文件操作,如`File`类用于文件路径的管理和检查,`BufferedImage`类用于...
在这个项目中,我们将深入探讨如何使用Java 2 Standard Edition (J2SE) API来实现JPEG图片的读取、显示、保存以及一些基本的绘图功能。 首先,我们需要引入Java的`javax.imageio`包,这个包提供了用于读取、写入和...
- **IO/NIO**:学习Java的输入输出系统,包括文件操作、网络通信、缓冲区、字符编码等,以及新的NIO(Non-blocking I/O) API。 - **反射**:了解如何在运行时动态获取类的信息,并能创建对象、调用方法、访问字段。...
- **图片和音频**:加载和使用游戏所需的图像和音效资源,可能需要了解Java的图像和音频处理API。 教程中提供的`J2SE泡泡堂游戏制作.doc`可能是详细步骤和代码示例,而`下载说明.txt`可能包含获取和运行项目所需的...