java awt生成签名图片如何消除锯齿化

 更新时间:2021年11月15日 10:27:47   作者:准时下班  
这篇文章主要介绍了java awt生成签名图片如何消除锯齿化,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

awt生成签名图片如何消除锯齿化

项目场景

在一个线上互联网医院中,需要生成电子处方图片,图片里面会有医生的手写签名。通过java.awt的Graphics2D方式来生成处方图片,并将手写签名的图片导入其中。

问题描述

但是在签名图片导入后,就可以看到明显的锯齿。

具体导入图片代码:

g2.drawImage(getImage("https://xx.jpg", 100, 50), WIDTH - (LEVEL_PADDING + 9 * contentFontSize + contentFontSize / 2) + 5, height - bottomLine - (contentFontSize + LINE_SPACING + 15) + 5,100, 50, null);
    private static BufferedImage getImage(String url) {
        if (Parameters.isEmpty(url)) return null;
        BufferedImage read = null;
        try {
            url = url.replaceFirst("https", "http");
            read = ImageIO.read(new URL(url));
            return read;
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

效果如下:

在这里插入图片描述

解决方案

修改代码如下:

g2.drawImage(getImage("https://xx.jpg", 100, 50), WIDTH - (LEVEL_PADDING + 9 * contentFontSize + contentFontSize / 2) + 5, height - bottomLine - (contentFontSize + LINE_SPACING + 15) + 5, null); 
   /**
     * 抗锯齿处理
     *
     * @param url
     * @return
     */
    private static Image getImage(String url, int width, int height) {
        if (Parameters.isEmpty(url)) return null;
        BufferedImage read = null;
        try {
            url = url.replaceFirst("https", "http");
            read = ImageIO.read(new URL(url));
            return read.getScaledInstance(width, height, BufferedImage.SCALE_SMOOTH);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

效果如下:

在这里插入图片描述

就是解决方法,可能还有更好的方法,需要继续摸索,请多指教。

AWT,SWT缩小图片消除锯齿的平滑处理

在Java中缩小图片很容易就得到一张很糟糕的图片,上面满是锯齿和不清晰的线条,在Java EE中,我们通常使用Jmagick,Jmagick使用的是类C语言程序提供给Java的API接口,在网站中运行,效率较高,但是体积较大,程序复杂度也较高(相关下载安装方式在各大网站上均有详细叙述,不再此重复)。如果不是特殊需要,不推荐在PC应用程序中使用。

在PC应用程序中,缩小一副图片有好多方法

缩小一副图片最常见的方法

  • awt中Image.getScaledInstance方法
  • swt中ImageData.ScaledTo方法
  • PaintEvent.gc.drawImage方法

awt中,设置getScaledInstance方法的第三个参数为BufferedImage.SCALE_SMOOTH即可

swt中如果使用ScaledTo方法只能得到一副惨不忍睹的图片

所以swt缩小图片而不产生锯齿的方法只有在PaintEvent.gc.drawImage方法上做文章

说了这么多,其实方法很简单.....就是在drawImage之前,设置e.gc.setAdvanced(true);e.gc.setAntialias(SWT.ON);

: D

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • spring集成mybatis实现mysql数据库读写分离

    spring集成mybatis实现mysql数据库读写分离

    本文通过实例代码给大家介绍了spring集成mybatis实现mysql数据库读写分离,需要的朋友可以参考下
    2017-08-08
  • SpringBoot与Spring之间的对比

    SpringBoot与Spring之间的对比

    这篇文章主要介绍了SpringBoot与Spring之间的对比,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • Java线程池的简单使用方法实例教程

    Java线程池的简单使用方法实例教程

    线程的使用在java中占有极其重要的地位,在jdk1.4极其之前的jdk版本中,关于线程池的使用是极其简陋的,在jdk1.5之后这一情况有了很大的改,这篇文章主要给大家介绍了关于Java线程池的简单使用方法,需要的朋友可以参考下
    2021-10-10
  • SpringBoot之@Scheduled注解用法解读

    SpringBoot之@Scheduled注解用法解读

    这篇文章主要介绍了SpringBoot之@Scheduled注解用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-03-03
  • SpringBoot前后端json数据交互的全过程记录

    SpringBoot前后端json数据交互的全过程记录

    现在大多数互联网项目都是采用前后端分离的方式开发,下面这篇文章主要给大家介绍了关于SpringBoot前后端json数据交互的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-03-03
  • SpringBoot + layui 框架实现一周免登陆功能示例详解

    SpringBoot + layui 框架实现一周免登陆功能示例详解

    这篇文章主要介绍了SpringBoot+layui框架实现一周免登陆功能,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-08-08
  • intellij idea创建第一个动态web项目的步骤方法

    intellij idea创建第一个动态web项目的步骤方法

    这篇文章主要介绍了intellij idea创建第一个动态web项目的步骤方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-10-10
  • Spring Boot2解决idea console 控制台输出乱码的问题

    Spring Boot2解决idea console 控制台输出乱码的问题

    这篇文章主要介绍了Spring Boot2解决idea console 控制台输出乱码的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • Servlet第一个项目的发布(入门)

    Servlet第一个项目的发布(入门)

    这篇文章主要介绍了Servlet第一个项目的发布,下面是用servlet实现的一个简单的web项目,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2021-04-04
  • Mybatis下动态sql中##和$$的区别讲解

    Mybatis下动态sql中##和$$的区别讲解

    今天小编就为大家分享一篇关于Mybatis下动态sql中##和$$的区别讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03

最新评论