הוספת טקסט לתמונה בג'אווה

1. סקירה כללית

לפעמים אנחנו צריכים להוסיף טקסט כלשהו לתמונה או לקבוצת תמונות. קל לעשות זאת באופן ידני באמצעות כלי לעריכת תמונות. אך כאשר אנו רוצים להוסיף את אותו הטקסט באותו אופן למספר לא מבוטל של תמונות, יהיה זה מאוד שימושי לעשות זאת בתכנות.

במדריך מהיר זה, אנו הולכים ללמוד כיצד להוסיף טקסט לתמונות באמצעות Java.

2. הוספת טקסט לתמונה

כדי לקרוא תמונה ולהוסיף טקסט, אנו יכולים להשתמש בכיתות שונות. בסעיפים הבאים אנו הולכים לראות כמה אפשרויות.

2.1. ImagePlus ו ImageProcessor

ראשית, בואו נראה כיצד להשתמש בשיעורים ImagePlus ו ImageProcessor הזמינים בספריית ImageJ. כדי להשתמש בספרייה זו עלינו לכלול את התלות הזו בפרויקט שלנו:

 net.imagej ij 1.51h 

לקריאת התמונה נשתמש ב- openImage שיטה סטטית. התוצאה של שיטה זו תישמר בזיכרון באמצעות ImagePlus לְהִתְנַגֵד:

ImagePlus image = IJ.openImage (נתיב);

לאחר שנטען את התמונה בזיכרון, בואו נוסיף לה טקסט באמצעות הכיתה ImageProcessor:

גופן גופן = גופן חדש ("Arial", Font.BOLD, 18); ImageProcessor ip = image.getProcessor (); ip.setColor (Color.GREEN); ip.setFont (גופן); ip.drawString (טקסט, 0, 20);

בעזרת קוד זה, מה שאנחנו עושים זה להוסיף את הטקסט שצוין בירוק בפינה השמאלית העליונה של התמונה. שים לב שקבענו את המיקום באמצעות הארגומנטים השנייה והשלישית של drawString שיטה המייצגת את מספר הפיקסלים משמאל וממעלה בהתאמה.

2.2. BufferedImage ו גרָפִיקָה

לאחר מכן, נראה כיצד אנו יכולים להשיג את אותה התוצאה באמצעות השיעורים BufferedImage ו גרָפִיקָה. המבנה הסטנדרטי של Java כולל שיעורים אלה, כך שאין צורך בספריות נוספות.

באותו אופן בו השתמשנו openImage שֶׁל ImageJאנו נשתמש ב- לקרוא שיטה זמינה ב ImageIO:

BufferedImage image = ImageIO.read (קובץ חדש (נתיב));

ברגע שנטען את התמונה בזיכרון, בואו נוסיף לה טקסט באמצעות הכיתה גרָפִיקָה:

גופן גופן = גופן חדש ("Arial", Font.BOLD, 18); גרפיקה g = image.getGraphics (); g.setFont (גופן); g.setColor (Color.GREEN); g.drawString (טקסט, 0, 20);

כפי שאנו רואים, שתי החלופות דומות מאוד באופן השימוש. במקרה זה, הטענה השנייה והשלישית של השיטה drawString מוגדרים באותו אופן שעשינו עבור ה- ImageProcessor שיטה.

2.3. ציור מבוסס על AttribatedCharacterIterator

השיטה drawString אפשר להשיג ב גרָפִיקָה מאפשר לנו הדפס את הטקסט באמצעות AttribatedCharacterIterator. משמעות הדבר היא שבמקום להשתמש במישור חוּטנוכל להשתמש בטקסט עם כמה מאפיינים המשויכים. בואו נראה דוגמה:

גופן גופן = גופן חדש ("Arial", Font.BOLD, 18); AttributString attributeText = Att AttributeString חדש (טקסט); attributText.addAttribute (TextAttribute.FONT, גופן); attributText.addAttribute (TextAttribute.FOREGROUND, Color.GREEN); גרפיקה g = image.getGraphics (); g.drawString (attribatedText.getIterator (), 0, 20);

דרך זו של הדפסת הטקסט נותנת לנו את האפשרות לשייך את הפורמט ישירות ל- חוּט, שהוא נקי יותר משינוי גרָפִיקָה מאפייני אובייקט בכל פעם שאנחנו רוצים לשנות את הפורמט.

3. יישור טקסט

כעת, לאחר שלמדנו כיצד להוסיף טקסט פשוט בפינה השמאלית העליונה של תמונה בואו נראה כעת כיצד נוכל להוסיף זאת טקסט בעמדות מסוימות.

3.1. טקסט מרוכז

הסוג הראשון של היישור שאנחנו מתמודדים איתו הוא מרכז את הטקסט. כדי לקבוע באופן דינמי את המיקום הנכון שבו אנו רוצים לכתוב את הטקסט, עלינו להבין קצת מידע:

  • גודל תמונה
  • גודל גופן

ניתן להשיג מידע זה בקלות רבה. במקרה של גודל התמונה, ניתן לגשת לנתונים אלה באמצעות השיטות getWidth ו getHeight של ה BufferedImage לְהִתְנַגֵד. מצד שני, כדי לקבל את הנתונים הקשורים לגודל הגופן אנחנו צריכים להשתמש באובייקט FontMetrics.

בואו נראה דוגמה שבה אנו מחשבים את המיקום הנכון לטקסט שלנו ומציירים אותו:

גרפיקה g = image.getGraphics (); מדדי FontMetrics = g.getFontMetrics (פונט); int positionX = (image.getWidth () - metrics.stringWidth (text)) / 2; int positionY = (image.getHeight () - metrics.getHeight ()) / 2 + metrics.getAscent (); g.drawString (attribatedText.getIterator (), positionX, positionY);

3.2. טקסט מיושר בפינה השמאלית התחתונה

הסוג הבא של היישור שנראה הוא בצד ימין למטה. במקרה זה, עלינו להשיג באופן דינמי את המיקומים הנכונים:

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

3.3. טקסט ממוקם בצד שמאל למעלה

לבסוף, בואו נראה כיצד להדפיס את הטקסט שלנו בצד שמאל למעלה:

int positionX = 0; int positionY = metrics.getAscent ();

את שאר המערכות ניתן להסיק מהשלוש שראינו.

4. התאמת גודל הטקסט בהתבסס על תמונה

כאשר אנו מציירים את הטקסט בתמונה, אנו עשויים לגלות שטקסט זה חורג מגודל התמונה. כדי לפתור זאת, עלינו התאם את גודל הגופן שאנחנו משתמשים בהן בהתאם לגודל התמונה.

ראשית, עלינו להשיג את הרוחב והגובה הצפויים של הטקסט באמצעות גופן הבסיס. על מנת להשיג זאת, נשתמש בשיעורים FontMetrics, GlyphVector, ו צוּרָה.

סרגל FontMetrics = graphics.getFontMetrics (baseFont); וקטור GlyphVector = baseFont.createGlyphVector (ruler.getFontRenderContext (), טקסט); מתאר צורה = vector.getOutline (0, 0); כפול צפוי רוחב = outline.getBounds (). getWidth (); כפול צפויHeight = outline.getBounds (). getHeight (); 

השלב הבא הוא לבדוק אם יש צורך לשנות את גודל הגופן. לצורך כך, בואו נשווה את הגודל הצפוי של הטקסט וגודל התמונה:

textFits בוליאני = image.getWidth ()> = צפוי רוחב && image.getHeight ()> = צפוי גובה;

לבסוף, אם הטקסט שלנו לא מתאים לתמונה, עלינו להקטין את גודל הגופן. נשתמש בשיטה deriveFont בשביל זה:

widthBasedFontSize כפול = (baseFont.getSize2D () * image.getWidth ()) / expectWidth; כפול heightBasedFontSize = (baseFont.getSize2D () * image.getHeight ()) / expectHeight; כפול newFontSize = widthBasedFontSize <heightBasedFontSize? widthBasedFontSize: heightBasedFontSize; newFont = baseFont.deriveFont (baseFont.getStyle (), (float) newFontSize);

שים לב שעלינו להשיג את גודל הגופן החדש על סמך רוחב וגובה ולהחיל את הנמוך ביותר מביניהם.

5. סיכום

במאמר זה ראינו כיצד לכתוב טקסט בתמונה בשיטות שונות.

למדנו גם כיצד להשיג באופן דינמי את המיקום בו אנו רוצים להדפיס את הטקסט שלנו על סמך גודל התמונה ומאפייני הגופן.

לבסוף ראינו כיצד להתאים את גודל הגופן של הטקסט למקרה שהוא עולה על גודל התמונה בה אנו מציירים אותה.

כמו תמיד, קוד המקור המלא של המאמר זמין באתר GitHub.


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