Graphics2D生成图片绘制文字,字体尺寸设置过小会导致文字模糊不清,用什么方式可以解决?
1条回答 默认 最新
关注 - 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/721970
- 你也可以参考下这篇文章:使用Graphics2D生成图片
- 除此之外, 这篇博客: Graphics2D类基本使用中的 二、Graphics2D类绘图 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
Graphics2D类仍然保留Graphics类的绘图方法,同时增加了许多新方法。新方法将几何图形(线段、圆等)作为一个对象来绘制。在java.awt.geom包中声明的一系列类,分别用于创建各种身体图形对象。主要有:
Line2D线段类,RoundRectangle2D圆角矩形类,Ellipse2D椭圆类,Arc2D圆弧类,QuadCurve2D二次曲线类,CubicCurve2D三次曲线类。要用Graphics2D类的新方法画一个图形。先在重画方法paintComponent()或paint()中,把参数对象g强制转换成Graphics2D对象;然后,用上述图形类提供的静态方法Double()创建该图形的对象;最后,以图形对象为参数调用Graphics2D对象的draw()方法绘制这个图形。例如以下代码用Graphics2D的新方法绘制线段和圆角矩形:
package icu.xslblog; import org.junit.Test; import javax.imageio.IIOImage; import javax.imageio.ImageIO; import javax.imageio.ImageWriteParam; import javax.imageio.ImageWriter; import javax.imageio.stream.ImageOutputStream; import java.awt.*; import java.awt.geom.*; import java.awt.image.BufferedImage; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.util.Iterator; /** * @ClassName TestGraphics2D * @Description: TODO * @Author xsl * @Date 2020/11/2 14:26 */ public class Graphics2DTest { @Test public void test1() throws IOException { // 获取源图片输入流 FileInputStream imgFileStream = new FileInputStream("E:\\1.png"); // 用imageIO读取图片 Image image = ImageIO.read(imgFileStream); // 利用BufferedImage,将图片加载到内存中 int height = image.getHeight(null); int width = image.getWidth(null); BufferedImage bufImg = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); // 获取图像对象,来对图片进行处理 Graphics2D g = bufImg.createGraphics(); //抗锯齿 RenderingHints rh = new RenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); rh.put(RenderingHints.KEY_COLOR_RENDERING, RenderingHints.VALUE_COLOR_RENDER_QUALITY); rh.put(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_LCD_HRGB); g.setRenderingHints(rh); // 画一条线 g.drawImage(image, 0, 0, width, height, null); Stroke s = new BasicStroke(10, BasicStroke.CAP_ROUND, BasicStroke.JOIN_MITER); g.setStroke(s); //新方法 Line2D line = new Line2D.Double(30.0,30.0,340.0,30.0); g.draw(line); //旧方法 //g.drawLine(30,50,300,300); //g.drawLine(300,300,120,0); //g.drawLine(120,0,30,50); // 为了保证原质量输出,用ImageWriter输出图片 Iterator writers = ImageIO.getImageWritersByFormatName("png"); ImageWriter writer = (ImageWriter) writers.next(); // 指定输出路径 File f = new File("E:\\test\\out.png"); ImageOutputStream outStream = ImageIO.createImageOutputStream(f); // 修改ImageWriteParam,原质量输出图片 ImageWriteParam imageWriteParam = writer.getDefaultWriteParam(); // 将BufferedImage转换为IIOImage,进而输出图片 IIOImage iioImage = new IIOImage(bufImg, null, null); // 输出 writer.setOutput(outStream); writer.write(null,iioImage,imageWriteParam); } }
也可以先用java.awt.geom包提供的Shape对象,并用单精度Float坐标或双精度Double坐标创建Shape对象,然后再用draw()方法绘制。例如,以下代码先创建圆弧对象,然后绘制圆弧:
Shape arc = new Arc2D.Float(30,30,150,150,40,100,Arc2D.OPEN); g2d.draw(arc)//绘制前面创建的图形对象arc
三、Graphics2D的几何图形类
解决 无用评论 打赏 举报
悬赏问题
- ¥15 如何用Labview在myRIO上做LCD显示?(语言-开发语言)
- ¥15 Vue3地图和异步函数使用
- ¥15 C++ yoloV5改写遇到的问题
- ¥20 win11修改中文用户名路径
- ¥15 win2012磁盘空间不足,c盘正常,d盘无法写入
- ¥15 用土力学知识进行土坡稳定性分析与挡土墙设计
- ¥70 PlayWright在Java上连接CDP关联本地Chrome启动失败,貌似是Windows端口转发问题
- ¥15 帮我写一个c++工程
- ¥30 Eclipse官网打不开,官网首页进不去,显示无法访问此页面,求解决方法
- ¥15 关于smbclient 库的使用