簡體   English   中英

ImageJ 如何在圖像上寫字符串?

[英]ImageJ how do I write strings on an image?

我需要在圖像上寫一些文本,然后將其居中或放在我想逐步習慣庫的某些段落中,因此我編寫了在教程中找到的以下代碼:

import ij.IJ;
import ij.ImagePlus;
import ij.process.ImageProcessor;
import java.awt.*;

    public void prova(String nome) {
            ImagePlus image = IJ.openImage(myimagepath);
            Font font = new Font("Arial", Font.BOLD, 30);
            ImageProcessor ip = image.getProcessor();
            ip.setColor(Color.BLACK);
            ip.setFont(font);
            ip.drawString(nome, 20, 20);
        }

我希望路徑上的文件已經被編輯,但事實並非如此,我錯過了什么嗎? 順便說一句,這是一個 .jpg 圖像,當它起作用時,我也必須在這個圖像上放一個較小的圖像,所以希望圖書館也能做到這一點

編輯:伙計們使用 ImageIO,我將工作代碼留作基本

public void prova(String nome, String profilo, MultipartFile foto) {
        try {
            BufferedImage image = ImageIO.read(new File(path));
            Font font = new Font("Arial", Font.BOLD, 18);
            Graphics g = image.getGraphics();
            g.setFont(font);
            g.setColor(Color.GREEN);
            g.drawString(nome, 0, 20);
            ImageIO.write(image, "jpg", new File(path.substring(0, path.lastIndexOf("\\")+1)+"processedImage.png"));
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

我不知道 imagej,但在 ImageIO 中,模式將是相似的:

  • 加載圖像
  • 處理它(在頂部繪制字符串)
  • 保存圖像

在您的示例中,我看不到您嘗試將圖像保存回磁盤。 由於我自己不使用 ImageJ,我只能建議檢查文檔。 請參閱https://albert.rierol.net/imagej_programming_tutorials.html#How%20to%20integrate%20a%20new%20file%20format%20reader%20and%20writer ,尤其是關於writer的部分。 對於那些不喜歡僅鏈接答案的人,我復制了那里提到的示例代碼:

static public void saveCustom(ImagePlus imp, String path) {  
    File file = new File(path);  
    DataOutputStream dos = null;  
    try {  
        dos = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(file)));  

        // read data:  
        FileInfo fi = imp.getFileInfo();  
        // HEADER: ... read all header tags and metadata  
          
        dos.write( ... );  

        // BODY: ... read all stack slices (or single slice)  
        for (int i=1; i<imp.getNSlices(); i++) {  
            dos.write( ... );  
        }  
        dos.flush();  

    } catch (Exception e) {  
        e.printStackTrace();  
    } finally {  
        dos.close();  
    }  
}  

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM