0
点赞
收藏
分享

微信扫一扫

Graphics2D的使用详情

Python百事通 2021-09-24 阅读 50
Java
Graphics2D类扩展于 Graphics 类,Graphics2D是在Java平台上渲染二维形状,文本和图像的基本类。无需jar包这个是jdk自带的;
   public void Graphics2DDetails() throws IOException {

// 设置宽3400高661大小的底板画布
BufferedImage canvas = new BufferedImage(400, 661, BufferedImage.TYPE_4BYTE_ABGR);

//创建Graphics2D
Graphics2D g = (Graphics2D) canvas.getGraphics();

//设置纯色背景色
g.setBackground(Color.gray);
//通过设置的颜色来绘制背景色
g.clearRect(0, 0, 400, 661);

//画背景
//读取图片
BufferedImage backgroundImg = ImageIO.read(new URL(LOGOs));
//将图片铺满整个底板画布上(X,Y设置从0,0这个定点开始画背景)
g.drawImage(backgroundImg.getScaledInstance(400, 661, Image.SCALE_DEFAULT), 0, 0, null);

//画图片
//读取图片
BufferedImage bufferedImageLogo = ImageIO.read(new URL(LOGO));
//写入图片设置图片的大小(宽,高),以及X,Y的定点位置
g.drawImage(bufferedImageLogo.getScaledInstance(80, 50, Image.SCALE_DEFAULT), 10, 10, null);

//设置文字
//设置文字颜色
g.setColor(Color.WHITE);
//设置文字的字体,字体样式 (加粗,斜体等)和字体大小
//文字字体没有时需把字体下载好后放入jre中
//首先进入到服务器使用的jre目录
// cd /usr/lib/jdk/jre/lib/fonts
//如果进去之后没有fonts文件夹,就自己创建一个
//进入之后,将 simhei.ttf 文件copy到该目录下即可,可以通过cp也可以用secureFx或者winscp直接上传,改的是jvm的字体 所以不需要重启服务器。
g.setFont(new Font("宋体", Font.BOLD, 13));
//要写入的文字内容,X轴坐标,Y轴坐标(X,Y合起来是一个定点,在这个定点开始写入内容)
g.drawString("张三", 100, 450);

//设置文字 竖向文字就是改变每个字的X,Y的定点位置
Integer num = TEXT.length() % 7 == 0 ? TEXT.length() / 7 : TEXT.length() / 7 + 1;
Integer width = 350;
Integer height = 110;
for (int j = 1; j <= num; j++) {
height = 110;
String str = "";
if (j == num) {
str = TEXT.substring((j - 1) * 7, TEXT.length());
} else {
str = TEXT.substring((j - 1) * 7, j * 7);
}

for (int i = 0; i < str.length(); i++) {
g.setColor(Color.WHITE);
g.setFont(new Font("宋体", Font.BOLD, 20));
String val = String.valueOf(str.charAt(i));
g.drawString(val, width, height);
height += 20;
}
width -= 20;
}

//矩形
//X轴20,Y轴30,宽是80,高是40
Rectangle2D rect = new Rectangle2D.Double(20,30,80,40);

//圆角矩形
//左上角是(20,30),宽是130,高是100,圆角的弧度18,15数字越大越圆,当为0时跟矩形一样。
RoundRectangle2D rectRound = new RoundRectangle2D.Double(20,30,130,100,18,15);

//创建一个椭圆行的几何模板
//X轴20,Y轴30,宽是100,高是50(如果宽高一样就是圆行,宽高不一样就是椭圆)
Ellipse2D ellipse = new Ellipse2D.Double(20,30,100,50);
//按照椭圆剪切
g.setClip(ellipse);
//读取托图片
BufferedImage logo = ImageIO.read(new URL(LOGO));
//设置图片(切记这里的图片一定要跟椭圆行一样大,小标定位一样否则展示的不是椭圆)
g.drawImage(logo.getScaledInstance(100, 50, Image.SCALE_DEFAULT), 20, 30, null);

//作用是销毁程序中指定的图形界面资源,如果在使用了graphics获得windows一些图形资源,而不进行关闭的话,就会造成内存溢出的情况的,导致程序卡死.类似close方法
g.dispose();

//保存的方式
//保存到本地
File file = new File("d://9.png");
//使用ImageIo时会抛异常
//保存的类型,保存的地址
ImageIO.write(canvas, "png", file);

//字节数组输出流
ByteArrayOutputStream os = new ByteArrayOutputStream();
//使用ImageIo时会抛异常
//保存的类型,保存到字节流中(此时可以直接返回字节,使用阿里云上上传图片)
ImageIO.write(canvas, "png", os);

//把字节转换为流(使用流上传图片)
InputStream inputStream = new ByteArrayInputStream(os.toByteArray());
}
举报

相关推荐

Graphics2D画图

0 条评论