不开源项目aspose.drawing的一些科普

Aspose
placeholder image
admin 发布于:2024-12-22 18:24:34
阅读:loading

前面在摸索了Aspose的Cells、Words、Pdf等多款组件,分别是常见的Word/Excel/Pdf办公软件,闲下心来又继续了解了一下Aspose For Java语言的其他软件,经过一些持续的分析和摸索实践越来越多的将它们给科学化,即所有的软件(组件)均不修改任何jar包依赖,纯粹使用反射的形式来调用,也就是说在API的使用前进行一次特殊的代码注册,即可实现授权,全程不需要License之类的xml,或是文档无水印、或是文档页数限制、或是获取内容无限制,等等。

特别说明:只为单纯的学习摸索与自我突破,商业软件请勿直接使用于生产环境(购买商业授权)

1.基本介绍

本次实践的是Aspose.drawing的全部版本,从第一个版本23.12--24.11,Aspose.Drawing 是一个完全托管的跨平台完整 2D 图形库,用于绘制文本、几何图形和图像。Aspose.Drawing 提供跨平台 Java 兼容 API,使您的现有代码在任何安装了 Java 的操作系统上都可以轻松使用。Aspose.Drawing 是基于 Java 6 构建的,可用于 Web、移动、桌面和云。绘图引擎支持将矢量图形(如线条、曲线和图形)和文本(各种字体、大小和样式)渲染到所有常用图形文件格式的光栅图像上。

通俗的来说了解我们用于在 Java 应用程序中如果需要画图的话可以用它来实现,提供了较多的画图示例。这篇文章主要是针对于aspose.drawing画图组件的一些科普,在一年前从Aspose官网看的时候将所有Java语言的组件全部过了一次,发现并不包含drawing的Java实现,然而前几天再看的时候竟然有Java语言的版本了,所以我又开始摸索了起来,准备接触着学习摸索一下,本篇文章也是我摸索的整个过程的经验总结。本期分享如下几条经验,参考如下

(1)官网上看到的第一个版本是23.12版本,距离今天整整不多不少是1年,截止今天最新的版本是24.11;

(2)经过所有版本的示例演示,发现许多的版本无法直接使用,能够使用的版本有:23.12、24.4、24.6,这三个版本,并且使用时还并不是直接使用Maven导入坐标就可以使用了,要么是使用官网提供的私服无法下载指定的jar版本文件,要么是需要指定dependency的classifier参数,总结一句话:最好是通过这里下载对应的jar文件来本地引用,参考如下图所示:

image.png

(本图下载的是24.6版本,并未当前最新版本24.11)

(3)其它版本的Maven坐标要么无法下载jar,要么引用的jar运行报错ClassFormatError,使用了JDK6-23的版本版本都仍然是报错,分析应该是官方提供的jar存在问题,参考报错信息如下:

java.lang.ClassFormatError: Class file version does not support constant tag 18 in class file com/aspose/drawing/Bitmap
	at java.lang.ClassLoader.defineClass1(Native Method)
	at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
	at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
	at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
	at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
	at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
	at java.lang.Class.getDeclaredMethods0(Native Method)
	at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
	at java.lang.Class.privateGetMethodRecursive(Class.java:3048)
	at java.lang.Class.getMethod0(Class.java:3018)
	at java.lang.Class.getMethod(Class.java:1784)
	at sun.launcher.LauncherHelper.validateMainClass(LauncherHelper.java:544)
	at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:526)
Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main"

(4)管网提供的Java语言的项目主页为“https://github.com/aspose-drawing/Aspose.Drawing-for-Java”,目前看到0个Starred,里面提供了较多的示例代码,下载运行了多个示例,惊奇的发现生成的图片文件并没有水印,没有水印反倒是把我给整不会了,难不成是允许使用吗???

(5)使用Apache Commons Imaging开源项目来读取Aspose.Drawing生成的图片,发现并没有内置的元数据信息;

2.示例代码

public class Colors {

    /**
     * 画两条直线,分别是蓝色与红色
     */
    public static void main(String[] args) {
        Bitmap bitmap = new Bitmap(1000, 800);
        Graphics graphics = Graphics.fromImage(bitmap);

        Pen bluePen = new Pen(Color.getBlue(), 2);
        graphics.drawLine(bluePen, 100, 100, 900, 100);

        Pen redPen = new Pen(Color.fromArgb(255, 255, 0, 0), 2);
        graphics.drawLine(redPen, 100, 200, 900, 200);
        
        bitmap.save(createFileIfNotExist("Colors.png"));
    }
}

image.png

/**
 * 画三个圆
 */
public static void main(String[] args) {
    Bitmap bitmap = new Bitmap(1000, 800);
    Graphics graphics = Graphics.fromImage(bitmap);

    graphics.fillEllipse(new SolidBrush(Color.fromArgb(128, 255, 0, 0)), 300, 100, 400, 400);
    graphics.fillEllipse(new SolidBrush(Color.fromArgb(128, 0, 255, 0)), 200, 300, 400, 400);
    graphics.fillEllipse(new SolidBrush(Color.fromArgb(128, 0, 0, 255)), 400, 300, 400, 400);

    bitmap.save(createFileIfNotExist("AlphaBlending.png"));
}

image.png

3.其它说明

(1)`aspose.xxx`不是开源免费的使用,Github上有示例项目,包含了大量的示例,示例的结果就是生成了一些《Evaluation Warning》警告、水印、内容页数限制、内容文本限制等;

(2)aspose旗下有许多的产品,都是商业付费版本,常见于各种文档格式文件的操作,都需要商业授权使用,也基本都是支持多种编程语言的,如有Java、C++、.NET等等,官网也有多种在线示例;

(3)但是本文所实践的关于aspose.drawing的几个版本的示例生成并没有水印,把我整不会了

(4)我想除了使用aspose.drawing来基本的画图和图片标注以外,似乎还可以用于画流程图、词云,等等;

 点赞


 发表评论

当前回复:作者

 评论列表


留言区