Compare commits

...

17 Commits
1.0 ... master

Author SHA1 Message Date
Andrew Lalis 73184974e4 Merge pull request #10 from andrewlalis/development
changed to 1.3.1
2017-08-07 15:57:44 +02:00
Andrew Lalis fe7930ad0f changed to 1.3 2017-08-07 15:55:30 +02:00
Andrew Lalis 83b25d1526 Merge pull request #9 from andrewlalis/development
changed to 1.3
2017-07-02 15:42:39 +02:00
Andrew Lalis 8a6569e225 changed to 1.3 2017-07-02 15:42:18 +02:00
Andrew Lalis ce1603cf5f Merge pull request #8 from andrewlalis/development
Refactored the entire project to have the proper file structure.
2017-07-02 15:37:46 +02:00
Andrew Lalis 3cb1c28e72 Refactored the entire project to have the proper file structure. 2017-07-02 11:15:00 +02:00
Andrew Lalis b1504fd3b4 Merge pull request #7 from andrewlalis/development
changed version to 1.2
2017-07-02 10:55:46 +02:00
Andrew Lalis a98ef3cee0 changed version to 1.2 2017-07-02 10:55:23 +02:00
Andrew Lalis e68e739976 Merge pull request #6 from andrewlalis/development
Added word wrap.
2017-07-02 10:52:27 +02:00
Andrew Lalis c2e3e5a73c Added word wrap. 2017-07-02 10:51:24 +02:00
Andrew Lalis af8fe4e70e Merge pull request #5 from andrewlalis/development
Added image generator to create file.
2017-07-02 01:41:01 +02:00
Andrew Lalis 15622a095c Added image generator to create file. 2017-07-02 01:40:25 +02:00
Andrew Lalis 6149e86d29 Merge pull request #4 from andrewlalis/development
added Image Generator
2017-07-01 10:03:29 +02:00
Andrew Lalis 6d90609913 Added Image Generator and added class descriptions. 2017-07-01 09:52:21 +02:00
Andrew Lalis 10c5c40d20 renamed package 2017-06-30 15:45:26 +02:00
Andrew Lalis 5fbcdbd8cb Merge pull request #3 from andrewlalis/development
changed some things to make dependency work.
2017-06-30 15:16:49 +02:00
Andrew Lalis 1fc7ceab63 changed some things to make dependency work. 2017-06-30 15:16:28 +02:00
4 changed files with 154 additions and 3 deletions

1
.gitignore vendored
View File

@ -13,7 +13,6 @@
.mtj.tmp/
# Package Files #
*.jar
*.war
*.ear
*.zip

View File

@ -6,7 +6,7 @@
<groupId>com.github.andrewlalis</groupId>
<artifactId>TengwarTranslatorLibrary</artifactId>
<version>1.0</version>
<version>1.3.1</version>
<build>
<plugins>

View File

@ -0,0 +1,149 @@
package net.agspace;
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
/**
* @author Andrew Lalis
* Class to generate images of tengwar text to fit certain criteria.
*/
public class TengwarImageGenerator {
/**
* Overloaded method for a simpler image generator, using white-on-black text and neither bold nor italics.
* @param tengwarText The string of tengwar text to transform into an image.
* @param maxWidth The maximum width, in pixels, that the generated image can be.
* @param fontSize The size of the font to use.
* @param filePath The path of the file to save the generated image to.
* @return An Image Object containing the drawn text.
*/
public static File generateImage(String tengwarText, int maxWidth, float fontSize, String filePath){
return generateImage(tengwarText, maxWidth, fontSize, false, false, filePath, Color.black, Color.white);
}
/**
* Generates an image of some tengwar text. The text is wrapped so that each line may not take up more than
* {@code maxWidth} pixels.
* @param tengwarText The string of tengwar text to transform into an image.
* @param maxWidth The maximum width, in pixels, that the generated image can be.
* @param fontSize The size of the font to use.
* @param bold Whether or not the font should be bold.
* @param italic Whether or not the font should be italic.
* @param filepath The path of the file to save the generated image to.
* @param backgroundColor The background color of the image.
* @param foregroundColor The foreground color of the image.
* @return An Image Object containing the drawn text.
*/
public static File generateImage(String tengwarText, int maxWidth, float fontSize, boolean bold, boolean italic, String filepath, Color backgroundColor, Color foregroundColor) {
BufferedImage bufferedImage = new BufferedImage(1, 1, BufferedImage.TYPE_INT_RGB);
Graphics2D graphics = bufferedImage.createGraphics();
Font tengwarFont = getTengwarFont(bold, italic, fontSize);
graphics.setFont(tengwarFont);
FontMetrics fm = graphics.getFontMetrics();
//Set width of the image, either max width or the string width itself plus some padding space.
int width = fm.stringWidth(tengwarText) + 10;
if (width > maxWidth){
width = maxWidth;
}
int height = fm.getHeight();
graphics.dispose();
String wrappedText = wrapTextByPixels(tengwarText, maxWidth-10, fm);
String[] lines = wrappedText.split("\n");
bufferedImage = new BufferedImage(width, (height*lines.length)+fm.getMaxDescent(), BufferedImage.TYPE_INT_RGB);
graphics = bufferedImage.createGraphics();
//graphics.setBackground(new Color(54, 57, 62)); Color for discord background.
graphics.setBackground(backgroundColor);
graphics.clearRect(0, 0, width, height*lines.length+fm.getMaxDescent());
graphics.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
graphics.setColor(foregroundColor);
graphics.setFont(tengwarFont);
for (int i = 0; i < lines.length; i++){
graphics.drawString(lines[i], 5, height*(i+1));
}
graphics.dispose();
try {
File file = new File(filepath);
ImageIO.write(bufferedImage, "png", file);
return file;
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
/**
* Returns the tngan.ttf font loaded into a Java Font.
* @param bold Whether or not font should be bold.
* @param italic Whether or not font should be italic.
* @param size The font size, in pt.
* @return The Font loaded, or null.
*/
public static Font getTengwarFont(boolean bold, boolean italic, float size){
Font font = null;
try {
String filename;
if (bold && italic){
filename = "tnganbi.ttf";
} else if (bold){
filename = "tnganb.ttf";
} else if (italic){
filename = "tngani.ttf";
} else {
filename = "tngan.ttf";
}
font = Font.createFont(Font.TRUETYPE_FONT, TengwarImageGenerator.class.getClassLoader().getResourceAsStream(filename)).deriveFont(size);
} catch (FontFormatException | IOException e) {
e.printStackTrace();
}
return font;
}
/**
* Inserts newline characters into a string of text so that it will not overflow beyond a line size.
* @param text The text to wrap.
* @param width The width, in pixels, of the block of text.
* @param fm The font metrics object to use.
* @return A new string with newline characters inserted.
*/
public static String wrapTextByPixels(String text, int width, FontMetrics fm){
String[] words = text.split(" ");
StringBuilder sb = new StringBuilder();
int currentWidth = 0;
for (String word : words) {
int wordWidth = fm.stringWidth(word + ' ');
//Deal with words greater than the max length.
if (wordWidth > width) {
char[] chars = word.toCharArray();
for (char c : chars) {
int charWidth = fm.charWidth(c);
if (currentWidth + charWidth < width) {
currentWidth += charWidth;
sb.append(c);
} else {
currentWidth = charWidth;
sb.append("-\n").append(c);
}
}
sb.append(' ');
} else if (currentWidth + wordWidth < width) {
//If the word fits normally.
currentWidth += wordWidth;
sb.append(word).append(' ');
} else {
//If the word causes a new line.
currentWidth = wordWidth;
sb.append('\n').append(word).append(' ');
}
}
return sb.toString().trim();
}
}

View File

@ -1,7 +1,10 @@
package net.agspace;
import java.util.*;
/**
* Created by Andrew's Computer on 23-Apr-17.
* @author Andrew Lalis
* Main class that holds static translation methods.
*/
public class Translator {