Dodavanje teksta na sliku u Javi

1. Pregled

Ponekad na sliku ili skup slika trebamo dodati malo teksta. Ručno je to učiniti pomoću alata za uređivanje slika. Ali kada želimo dodati isti tekst na isti način značajnom broju slika, bilo bi vrlo korisno to učiniti programski.

U ovom brzom uputstvu naučit ćemo kako dodati malo teksta na slike koristeći Javu.

2. Dodavanje teksta slici

Da bismo pročitali sliku i dodali malo teksta, možemo koristiti različite razrede. U sljedećim odjeljcima vidjet ćemo nekoliko mogućnosti.

2.1. ImagePlus i Procesor slike

Prvo, da vidimo kako koristiti nastavu ImagePlus i Procesor slike koji su dostupni u biblioteci ImageJ. Da bismo koristili ovu knjižnicu, moramo uključiti ovu ovisnost u naš projekt:

 net.imagej ij 1,51h 

Za čitanje slike koristit ćemo openImage statička metoda. Rezultati ove metode pohranit će se u memoriju pomoću alata ImagePlus objekt:

ImagePlus image = IJ.openImage (put);

Nakon što sliku učitamo u memoriju, dodamo joj malo teksta pomoću klase Procesor slike:

Font fonta = novi font ("Arial", Font.BOLD, 18); ImageProcessor ip = image.getProcessor (); ip.setColor (Color.GREEN); ip.setFont (font); ip.drawString (tekst, 0, 20);

Ovim kodom dodajemo navedeni tekst zelenom bojom u gornjem lijevom dijelu slike. Imajte na umu da smo položaj postavili pomoću drugog i trećeg argumenta drawString metoda koja predstavlja broj piksela s lijeve i gornje strane.

2.2. Slika u baferu i Grafika

Dalje, vidjet ćemo kako možemo postići isti rezultat pomoću predavanja Slika u baferu i Grafika. Standardna gradnja Jave uključuje ove klase, tako da nema potrebe za dodatnim knjižnicama.

Isti način na koji smo koristili openImage od ImageJ, koristit ćemo čitati metoda dostupna u ImageIO:

BufferedImage image = ImageIO.read (nova datoteka (put));

Nakon što sliku učitamo u memoriju, dodamo joj malo teksta pomoću klase Grafika:

Font fonta = novi font ("Arial", Font.BOLD, 18); Grafika g = image.getGraphics (); g.setFont (font); g.setColor (Boja.ZELENA); g.drawString (tekst, 0, 20);

Kao što vidimo, obje su mogućnosti vrlo slične u načinu korištenja. U ovom slučaju, drugi i treći argument metode drawString su navedeni na isti način kao i mi za Procesor slike metoda.

2.3. Nacrtaj na temelju AttributedCharacterIterator

Metoda drawString dostupno u Grafika omogućuje nam da ispisati tekst pomoću AttributedCharacterIterator. To znači da umjesto korištenja običnog Niz, mogli bismo koristiti tekst s nekim povezanim svojstvima. Pogledajmo primjer:

Font fonta = novi font ("Arial", Font.BOLD, 18); AttributedString attributedText = novi AttributedString (tekst); attributedText.addAttribute (TextAttribute.FONT, font); attributedText.addAttribute (TextAttribute.FOREGROUND, Color.GREEN); Grafika g = image.getGraphics (); g.drawString (attributedText.getIterator (), 0, 20);

Ovakav način ispisa teksta daje nam priliku da format izravno povežemo s Niz, što je čišće od mijenjanja Grafika svojstva objekta kad god želimo promijeniti format.

3. Poravnanje teksta

Sad kad smo naučili kako dodati jednostavan tekst u gornjem lijevom dijelu slike, pogledajmo sada kako to možemo dodati teksta na određenim pozicijama.

3.1. Tekst u središtu

Prva vrsta poravnanja s kojom ćemo se boriti je centriranje teksta. Da bismo dinamički postavili točan položaj na kojem želimo napisati tekst, moramo shvatiti neke podatke:

  • Veličina slike
  • Veličina fonta

Te se informacije mogu dobiti vrlo jednostavno. U slučaju veličine slike, tim se podacima može pristupiti putem metoda getWidth i getHeight od Slika u baferu objekt. S druge strane, da bismo dobili podatke koji se odnose na veličinu fonta, trebamo koristiti objekt FontMetrics.

Pogledajmo primjer gdje izračunavamo ispravan položaj za naš tekst i crtamo ga:

Grafika g = image.getGraphics (); Metrika FontMetrics = g.getFontMetrics (font); int positionX = (image.getWidth () - metrics.stringWidth (text)) / 2; int positionY = (image.getHeight () - metrics.getHeight ()) / 2 + metrics.getAscent (); g.drawString (attributedText.getIterator (), positionX, positionY);

3.2. Tekst poravnat dolje desno

Sljedeća vrsta poravnanja koju ćemo vidjeti je dolje desno. U ovom slučaju trebamo dinamički dobiti ispravne pozicije:

int positionX = (image.getWidth () - metrics.stringWidth (text)); int positionY = (image.getHeight () - metrics.getHeight ()) + metrics.getAscent ();

3.3. Tekst smješten u gornjem lijevom kutu

Napokon, da vidimo kako ispisati naš tekst u gornjem lijevom kutu:

int položajX = 0; int positionY = metrics.getAscent ();

Ostatak poravnanja može se zaključiti iz tri koja smo vidjeli.

4. Prilagođavanje veličine teksta na temelju slike

Kada crtamo tekst na slici, mogli bismo ustanoviti da ovaj tekst premašuje veličinu slike. Da bismo to riješili, moramo prilagoditi veličinu fonta koje koristimo na temelju veličine slike.

Prvo moramo dobiti osnovnu širinu i visinu teksta pomoću osnovnog fonta. Da bismo to postigli, poslužit ćemo se nastavom FontMetrics, GlyphVector, i Oblik.

FontMetrics ravnalo = graphics.getFontMetrics (baseFont); GlyphVector vektor = baseFont.createGlyphVector (ruler.getFontRenderContext (), tekst); Obris oblika = vector.getOutline (0, 0); dvostruko očekivana širina = outline.getBounds (). getWidth (); dvostruko očekujeHeight = outline.getBounds (). getHeight (); 

Sljedeći je korak provjera je li potrebna promjena veličine fonta. U tu svrhu usporedimo očekivanu veličinu teksta i veličinu slike:

logički textFits = image.getWidth ()> = očekivana širina && image.getHeight ()> = očekivana visina;

Napokon, ako naš tekst ne stane na sliku, moramo smanjiti veličinu fonta. Upotrijebit ćemo metodu izvestiFont za to:

dvostruka širinaBasedFontSize = (baseFont.getSize2D () * image.getWidth ()) / očekivana širina; dvostruka visinaBasedFontSize = (baseFont.getSize2D () * image.getHeight ()) / očekuje seHeight; dvostruko newFontSize = widthBasedFontSize <heightBasedFontSize? widthBasedFontSize: heightBasedFontSize; newFont = baseFont.deriveFont (baseFont.getStyle (), (float) newFontSize);

Imajte na umu da moramo dobiti novu veličinu fonta na temelju širine i visine i primijeniti najmanju od njih.

5. Sažetak

U ovom smo članku vidjeli kako pisati tekst na sliku različitim metodama.

Također smo naučili kako dinamički dobiti položaj na kojem želimo ispisati svoj tekst na temelju veličine slike i svojstava fonta.

Napokon smo vidjeli kako prilagoditi veličinu fonta teksta u slučaju da premašuje veličinu slike na mjestu na kojem ga crtamo.

Kao i uvijek, puni izvorni kôd članka dostupan je na GitHub-u.


$config[zx-auto] not found$config[zx-overlay] not found