ImageMagick
官网 https://imagemagick.org/, 支持多种格式。命令行工具很适合调试。功能很强大. 还有一款工具GraphicsMagick 是从ImageMagick的基础上研发出来的。
OpenCV
官网 https://opencv.org/ , github地址https://github.com/opencv/opencv,非常活跃的一个开源工具,原来免费的教程,现在已经开始包装成视频,进行收费了,我买了教程,看了下,和以前官网看过的文字版教程没多大差别。github关注已经达到了72.3k。
ImageJ
官网 https://imagej.net/ij/
ImageJ is open source software for processing and analyzing scientific images.
基于ImageJ已经又研发了ImageJ2(目前github关注量1k)和Fiji的产品。
// Open the TIFF image
ImagePlus imagePlus = new ImagePlus(f);
// Get the image processor
ImageProcessor imageProcessor = imagePlus.getProcessor();
// Add text to the image
int x = 0; // X-coordinate of text
int y = 0; // Y-coordinate of text
String textToAdd = "These three lines of\ntext will be overlayed on\nthe current image";
Font font = new Font("SansSerif", Font.PLAIN, 56);
imageProcessor.setFont(font);
imageProcessor.setColor(Color.RED);
imageProcessor.drawString(textToAdd, x, y); // Draw the text
// Display the modified image (optional)
// imagePlus.show();
// Save the modified image
ImagePlus outputImage = new ImagePlus("Modified Image", imageProcessor);
IJ.saveAs(outputImage,"jpeg", f31);
IJ.saveAsTiff(outputImage, f41);
final ImagePlus imagePlus1 = IJ.openImage(f41);
IJ.save(imagePlus1, fpng);
commons-imaging
Apache维护的产品,目前github关注量381
final File file = new File(f);
final BufferedImage overlay = Imaging.getBufferedImage(file);
// Add text to the image
int x = 0; // X-coordinate of text
int y = 0; // Y-coordinate of text
Font font = new Font("SansSerif", Font.PLAIN, 56);
String textToAdd = "These three lines of\ntext will be overlayed on\nthe current image";
addTextToImage(overlay, textToAdd, x, y, Color.RED, font);
ImageIO.write(overlay, "JPEG", new File(fa1));
// ImageIO.write(overlay, "TIFF", new File(fa2));
saveImageWithText(overlay, fa2);
Imaging.writeImage(overlay, Files.newOutputStream(Paths.get(fa4png)), ImageFormats.PNG);
// Method to add text to the image
private static void addTextToImage(BufferedImage image, String text, int x, int y, Color color, Font font) {
Graphics2D g2d = image.createGraphics();
g2d.setColor(color);
g2d.setFont(font);
// g2d.drawString(text, x, y);
drawString(g2d, text, x, y);
g2d.dispose();
}
private static void drawString(Graphics g, String text, int x, int y) {
for (String line : text.split("\n"))
g.drawString(line, x, y += g.getFontMetrics().getHeight());
}
// // Method to save the modified image with text using Common Imaging
private static void saveImageWithText(BufferedImage image, String outputPath) throws IOException, ImageWriteException {
// Create a new instance of ImageWriteParam for TIFF format
final TiffImagingParameters params = new TiffImagingParameters();
params.setCompression(TiffConstants.TIFF_COMPRESSION_UNCOMPRESSED);
// Write the BufferedImage with text to a TIFF file
// Imaging.writeImage(image, new File(outputPath), ImageFormat.IMAGE_FORMAT_TIFF, params);
new TiffImageParser().writeImage(image, Files.newOutputStream(Paths.get(outputPath)), params);
}
TwelveMonkeys
目前github关注量1.7k
JDeli 是一个付费软件
如下是测试结果
photoshop可以看到通道增加了专色通道。
ImageMagick | opencv | imagej | commons-imaging | TwelveMonkeys | JDeli(付费软件) | |
---|---|---|---|---|---|---|
带有2个专色通道的tiff图片 | 不支持 | 不支持 | 支持 | 支持 | 不支持 | 支持 |
将文字写入到图片中 | / | / | 支持 | 支持 | ||
文字写入保存为jpg格式 | / | / | 写入红色的字体变成了黑红 | 写入红色的字体变成了黑红 | ||
文字写入保存为tiff格式 | / | / | 写入红色的字体正常 | 写入红色的字体正常 | 写入红色的字体正常 | |
支持Tiff格式alpha通道 | / | / | 不支持 | 不支持 | 不支持 | 不支持 |