java简单绘制海报

        本文以通俗易懂的方式来表达(欢迎各位斧正)。

一、了解绘制的步骤

        了解绘制所需要的基本步骤和元素

        1、创建绘制的画布( 我这里用到的类为 BufferedImage )

        2、获取画笔 ( Graphics )

        3、根据画笔的方法绘制你想要的内容

二、相关的类

        画图类

                (1)BufferedImage (画布)

                (2)Graphics             (画笔)

                (3)Font                 (字体)

                (4)Color                  (颜色)

        IO类

                (1)File                 (文件)

                (2)ImageIO        (图片IO 用于读取或写图片)

三、绘制代码编写

        1、BufferedImage 创建画布

/**
 * 画布
 * BufferedImage 一种Image与图像数据的访问的缓冲器。
 * BufferedImage(int width, int height, int imageType)
 * BufferedImage.TYPE_INT_RGB   表示具有8位RGB颜色分量的整数像素的图像。
 */
BufferedImage canvas = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);

        2、Graphics         获取画笔

/**
 * BufferedImage canvas.getGraphics() * 此方法返回一个Graphics2D ,但这里是向后兼容性。
 * Graphics  所有图形上下文的抽象基类,允许应用程序绘制在各种设备上实现的组件,以及屏幕上的图像。
 * Graphics2D类扩展了Graphics类,以提供对几何,坐标变换,颜色管理和文本布局的更复杂的控制。
 这是在Java(tm)平台上呈现二维形状,文字和图像的基础类。
 */
Graphics2D g = (Graphics2D) canvas.getGraphics();

绘制图片

这里介绍两种绘制方法
1、
public abstract boolean drawImage(Image img, int x, int y,
    int width, int height,ImageObserver observer);

参数: 图片,初始x位置,y位置,图片宽度,高度,异步更新方式(一般为null就好了)

2、
public abstract boolean drawImage(Image img, int x, int y,
                                  ImageObserver observer);

参数:图片, 初始x位置,y位置,异步更新方式

若要使用第二种方法,又想设置宽高,可使用以下方法 缩放图片

getScaledInstance(int width, int height, int hints) 
创建此图像的缩放版本。 

参数: 宽,高,图片缩放算法(Image 定义了一些静态的缩放算法字段,可以参考java-api )

若要限定宽高介意使用第一种绘制方法

这里附上两种方法的 参考代码 


int width = 500;
int height = 1000;
int loadX = 100;
int loadY = 100;
String url = "https://img2.wallspic.com/previews/4/6/5/2/7/172564/172564-qi_fen-yu_hui-jiao_cha-re-ri_chu-x750.jpg"
// 画布
BufferedImage canvas = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
// 画笔
Graphics2D g = (Graphics2D) canvas.getGraphics();
// 图片路径
BufferedImage image= ImageIO.read(new URL(url ));;
g.drawImage(bufferedImage, loadX, loadY(),
width,height, null);

g.drawImage(bufferedImage.getScaledInstance(width, height, Image.SCALE_DEFAULT)
, loadX, loadY, null);

绘制结束后释放资源

        /**
         * 释放资源
         * dispose()
         * 处理此图形上下文并释放其正在使用的任何系统资源。
         */
        g.dispose();

 

3、Font         字体

               创建字体 介绍如下

Font静态方法
createFont(int fontFormat, File fontFile)
使用指定的字体类型和指定的字体文件返回一个新的 Font 。 

createFont(int fontFormat, InputStream fontStream) 
使用指定的字体类型和输入数据返回一个新的 Font 。 

两种方法

Font 类中 提供了 很多的默认字体类型选择(静态字段)

这里参数一推荐  Font.TRUETYPE_FONT 

其他类型容易报错(原因未知,希望有知道的小伙伴解答)

Font font= Font.createFont(Font.TRUETYPE_FONT, inputStream);

        设置字体样式 介绍如下

deriveFont(float size)
通过复制当前的 Font对象并对其应用一个新的大小来创建一个新的 Font对象。

这是一个重载方法由不同的参数类型区分

注意它的返回值是Font 类型

所以需要接收返回值才能成功改变字体样式

font = sPfBoldFont.deriveFont(size);
font = font.deriveFont(Font.BOLD);

 

与  Graphics 结合 

g.setFont(font);

4、Color         颜色

        创建颜色 介绍如下

  构造方法

Color(int r, int g, int b) 
用范围(0 - 255)范围内的指定的红色,绿色和蓝色值创建不透明的sRGB颜色。 

或使勇静态字段给Color赋值

Color fontColor=Color.black;

 与  Graphics 结合

g.setColor(text.getFontColor());

5、File        文件 

获取路径中的文件

File file= new File(url);

6、ImageIO         图片的读写

方法介绍

读 

read(URL input)

read(File input)

read(InputStream input)

read(ImageInputStream stream)

读取图片的 四种静态方法

write(RenderedImage im, String formatName, File output) static boolean write(RenderedImage im, String formatName, ImageOutputStream output) static boolean write(RenderedImage im, String formatName, OutputStream output)

写图片的 三种静态方法

参数类型 RenderedImage 为 BufferedImage的祖父

参数:图片,生成的图片格式,输出路径

 

四、遇到的问题和解决方法

       1、 文字居中问题

        相关类

FontMetrics类定义了一个字体度量对象,该对象封装了在特定屏幕上呈现特定字体的信息。

方法

stringWidth(String str)
返回显示指定的总的超前宽度 String在此 Font 。

Graphics 可以获取 自身的 FontMetrics 可以通过他来计算字符宽度

getFontMetrics()
获取当前字体的字体度量。

初始位置减去 字符宽度的一半 便实现了 字体位置的居中

        2、文字边缘锯齿状

 只需要设置 Graphics 的文字抗锯齿就可以了

setRenderingHint(RenderingHints.Key hintKey, Object hintValue)
为渲染算法设置单个首选项的值。

参数:渲染算法,是否开启

g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING
    ,RenderingHints.VALUE_TEXT_ANTIALIAS_ON);

五、总结

        绘制海报首先要知道绘制的步骤

        至少学习一套可以绘制的方法,这对学习类似的绘制很有帮助。

        希望能帮助到大家。

        

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值