GraphicsMagick 号称图像处理领域的瑞士军刀。GraphicsMagick 是个图片处理库,是从ImageMagick 5.5.2分支出来。
Graphics2D是JDK 自带的一套图片处理库。但性能一般。
Java 方面也提供了类似 JNI 方式支持 GraphicsMagick+im4java 处理图像。
但OpenCV,原生态支持 OpenCV就比较繁琐,要用 JNI 方式调用大量动态或静态库,存在如下两个问题:1.性能问题,2.出现内存问题也不好控制。
目前市面上成熟的图像处理库:GraphicsMagick 和 OpenCV。两款都可以做到跨平台,在多种编译器上执行,多进程模式,充分发挥多核 CPU 的优势。OpenCV 在 Python 中应用广泛。
选择GraphicsMagick还是Graphics2D?性能好的不一定最好,合适自己的才是最好。如果项目只需要完成基本功能,没有高并发的图片处理场景,当然是使用Graphics2D ,实现简单早下班。
官网:
GraphicsMagick Image Processing System
Graphics2D中BufferedImage 内存溢出(OOM),换成ImageReader
通过BufferedImage获取宽高。
java
// 图片信息
BufferedImage img = ImageIO.read(new File(srcImgPath));
通过ImageReader获取宽高
java
int[] size = new int[2];
try (ImageInputStream in = ImageIO.createImageInputStream(new File(imgPath))) {
Iterator<ImageReader> readers = ImageIO.getImageReaders(in);
if (readers.hasNext()) {
ImageReader reader = readers.next();
}
}
详细使用: