也可以用javax.imageio.imager()类的read取得图像,返回的是bufferiamge对象、
buffer image imageio.read()
package jj;
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 javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class imagebuff {
public BufferedImage imagebu(String fiel1,String fiel2) {
try {
//读入图像
File file1=new File(fiel1);
Image src=javax.imageio.ImageIO.read(file1);//构造image对象
int width=src.getWidth(null);//得到图宽
int height=src.getHeight(null);//得到图高
//图片放缩
BufferedImage tag = new BufferedImage(width / 2, height / 2, BufferedImage.TYPE_INT_RGB);
Graphics2D g2d = tag.createGraphics(); // 获取 Graphics2D 对象
// 绘制缩小后的图
g2d.drawImage(src, 30, 20, width / 2, height / 2, null);
g2d.dispose(); // 释放图形上下文资源
// BufferedImage tag=new BufferedImage(widt/2, heig/2, BufferedImage.TYPE_INT_RGB);
// //绘制缩小后的图
// tag.createGraphics().drawImage(src,0,2,widt/2,heig/2,null);
FileOutputStream fileout=new FileOutputStream(fiel2);
//输出文件到文件流jpeg编码
ImageIO.write(tag,"jpg",fileout);
System.out.println("重新调整后的图像为jpeg");
/*
。这个方法通常用于从一个组件(如Canvas、Panel或Window)获取图形上下文(Graphics对象),然后可以在该组件上绘制图形。
*在Java中,getGraphics() 方法是 Component 类的一个方法,它返回与此组件关联的图形上下文,或者如果组件没有显示在屏幕上,则返回 null。在您提供的代码段中,getGraphics() 方法是在 BufferedImage 对象 tag 上调用的,如下所示:
Graphics g = tag.getGraphics();
这里,tag 是一个 BufferedImage 对象,而 BufferedImage 类是 Component 类的一个子类,因此它继承了 getGraphics() 方法。通过调用 getGraphics(),您获得了一个 Graphics 对象,该对象允许您在 BufferedImage 对象上绘制图形。
需要注意的是,虽然 getGraphics() 方法可以用于直接在 BufferedImage 上绘制,但在实际应用中,通常推荐使用 Graphics2D 类,它是 Graphics 类的一个扩展,提供了更高级的绘图功能。以下是使用 Graphics2D 的例子:
Graphics2D g2d = (Graphics2D) tag.getGraphics();
// 进行绘制操作...
g2d.dispose(); // 绘制完成后释放资源
在使用 getGraphics() 方法时,您应该始终在完成绘制后调用 dispose() 方法来释放图形上下文占用的资源。这是因为 Graphics 对象可能会持有系统资源,如字体或颜色,而这些资源在使用完毕后应该被释放。*/
return tag;
} catch (Exception e) {
e.printStackTrace();
// TODO: handle exception
}
return null;
// TODO Auto-generated constructor stub
}
public static void main(String[] args) {
BufferedImage resizedImage = new imagebuff().imagebu("D:\\programing\\jj\\src\\21.png","D:\\programing\\jj\\src\\20.jpg");
JFrame frame = new JFrame("显示图像");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JLabel label = new JLabel(new ImageIcon(resizedImage));
frame.getContentPane().add(label);
frame.pack();
frame.setVisible(true);
}
}
这里我们需要注意,图像并不能单独显示,图像的显示要用paint方法,这里我们创建了frame对象,通过添加组件的方式来实现将图像显示,也可以通过继承的重写 paint 方法
Graphics2D g2d = tag.createGraphics(); /这一步是获取
在Java中,Graphics2D
是 Graphics
类的一个扩展,它提供了更高级的绘图操作和更精细的控制。当您创建一个 Graphics2D
对象时,您是为了能够在这个图像上执行绘图操作。以下是使用 Graphics2D g2d = tag.createGraphics();
这一步骤的目的:
绘图上下文:
Graphics2D
对象g2d
代表了BufferedImage
对象tag
的绘图上下文。它包含了绘图状态信息,如颜色、字体、笔划和变换等。绘制操作:一旦有了
Graphics2D
对象,您就可以调用它的各种方法来绘制形状、文本、图像等。例如,您可以调用g2d.drawImage()
来绘制图像,g2d.fill()
来填充形状,或者g2d.drawString()
来绘制文本。图像处理:
Graphics2D
提供了比Graphics
更多的图像处理功能,例如抗锯齿渲染、透明度设置(通过Composite
)、变换(通过AffineTransform
)等。对
对图像进行操纵
在您提供的代码片段中,两行代码执行了以下操作:
创建一个新的 BufferedImage 对象:
BufferedImage tag = new BufferedImage(width / 2, height / 2, BufferedImage.TYPE_INT_RGB);
这行代码创建了一个新的图像缓冲区 tag,其具有以下特性:
宽度为原始图像宽度的一半(width / 2)。
高度为原始图像高度的一半(height / 2)。
图像类型为 BufferedImage.TYPE_INT_RGB,这意味着图像使用 8 位 RGB 颜色分量进行存储,每个像素由一个整数表示。
获取 Graphics2D 对象以在新的 BufferedImage 对象上进行绘图:
Graphics2D g2d = tag.createGraphics();
这行代码执行以下操作:
调用 BufferedImage 对象 tag 的 createGraphics() 方法。
返回一个 Graphics2D 对象 g2d,它是 tag 图像的图形上下文。
Graphics2D 对象 g2d 可以用来在 tag 图像上执行绘图操作,如绘制形状、文本、图像等。
通过这两步操作,您创建了一个新的图像缓冲区,并且准备好了一个 Graphics2D 对象,可以在该缓冲区上进行绘图。之后,您可以使用 g2d 对象的方法来绘制内容到 tag 图像上。例如,您可以使用 g2d.drawImage() 方法来绘制另一个图像到 tag 上,或者使用其他绘图方法来添加自定义图形和文本。