使用java在图像上编写区域文本

时间:2015-08-31 10:13:28

标签: java

您好我正试图在java中用图像写文字。 以下是mmy代码,使用英语时工作正常。但是我想添加相同的语言支持。这个文本是从用户的文本输入中选取的,我使用javascript encodeURI对其进行编码,并使用URLDecoder.decode在java中对其进行解码。

public static void writeText(String label, String rgb , BufferedImage bi, float yAxis) {
        Font font = CustomFont.getFont(30f);
        FontRenderContext frc = new FontRenderContext(null, true, true);
        TextLayout layout = new TextLayout(label.toUpperCase(), font, frc);

        Rectangle r = layout.getPixelBounds(null, 0, 0);
        Graphics2D g2d = (Graphics2D) bi.getGraphics();
        Color fontColor = new Color(0,0,0);
        if(rgb!=null){
            try {
                String[] rgbArray = rgb.trim().split(",");
                fontColor = new Color(Integer.parseInt(rgbArray[0]), Integer.parseInt(rgbArray[1]), Integer.parseInt(rgbArray[2]));
            }catch(Exception e){
                logger.info("Error applying color ["+rgb+"]. Defaulting to [0,0,0]");
            }
        }
        g2d.setColor(fontColor);
        float x = (bi.getWidth()/2)-(float)r.getWidth()/2;
        layout.draw(g2d, x, yAxis);
        g2d.dispose();
    }


public class CustomFont {
    private static final Logger logger = Logger.getLogger(CustomFont.class);
    private static Font fontBase;
    static {
        try {
            InputStream is  = new ClassPathResource("font/opensans-condlight-webfont.ttf").getInputStream();
            fontBase = Font.createFont(Font.TRUETYPE_FONT, is);
        } catch (FontFormatException e) {
            logger.warn("Unable to load font <opensans-condlight-webfont> loading default");
            logger.warn(e);
            fontBase = new Font("Arial",Font.PLAIN,20);
        } catch (IOException e) {
            logger.warn("Unable to load font <opensans-condlight-webfont> loading default");
            logger.warn(e);
            fontBase = new Font("Arial",Font.PLAIN,20);
        } catch (Exception e){
            logger.warn("Unable to load font <opensans-condlight-webfont> loading default");
            logger.warn(e);
            fontBase = new Font("Arial",Font.PLAIN,20);
        }
    }
    public static Font getFont(float size){
        return fontBase.deriveFont(size);
    }
}

我正在使用CustomFont类来匹配html UI中的字体样式。

此代码不接受英语以外的语言,例如。 वायुसेना

它只是在图像上写下方框

0 个答案:

没有答案