2011-09-26 143 views

回答

2

如果你想抗锯齿的,可以强制转换图形到的Graphics2D然后使用g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);。绘制线条后可以做到这一点。

+0

我已经尝试过,但没有运气。不过谢谢。 – user958705

+0

你使用的是什么代码? –

+0

什么代码?在创建图像? – user958705

1

凯文Hikaru埃文斯上述解决方案应该工作,也许你错过了什么。

Graphics2D g2=(Graphics2D)g.create(); 
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON); 
g2.drawString("SCQSCQSCQ",x,y); 
+0

谢谢!我只是错误地放置了抗锯齿部分。 – user958705

1

试试这个(快速,粗制滥造),适于例如..

Smooth text

import java.awt.*; 
import java.awt.image.BufferedImage; 
import java.awt.font.*; 
import java.awt.geom.*; 
import javax.swing.*; 
import javax.imageio.ImageIO; 
import java.io.File; 

class PictureText { 

    public static BufferedImage getImage(Area textOutline) { 
     Rectangle bounds = textOutline.getBounds(); 
     System.out.println(bounds); 
     int width = (2*(int)bounds.getX())+(int)bounds.getWidth(); 
     int height = (2*(int)bounds.getY())+(int)bounds.getHeight(); 
     BufferedImage bi = new BufferedImage(
      width, 
      height, 
      BufferedImage.TYPE_INT_ARGB); 

     Color outline = new Color(0,0,0,255); 

     Graphics2D g = bi.createGraphics(); 
     g.setRenderingHint(
      RenderingHints.KEY_ANTIALIASING, 
      RenderingHints.VALUE_ANTIALIAS_ON); 

     g.setStroke(new BasicStroke(1.5f)); 
     g.setColor(outline); 
     g.draw(textOutline); 

     showImage(bi); 

     return bi; 
    } 

    public static void showImage(Image image) { 
     JLabel textLabel = new JLabel(
      new ImageIcon(image)); 
     textLabel.setBackground(Color.WHITE); 
     textLabel.setOpaque(true); 

     JPanel gui = new JPanel(new GridLayout(0,1,5,5)); 
     gui.add(textLabel); 

     JOptionPane.showMessageDialog(null,gui); 
    } 

    public static void main(String[] args) throws Exception { 

     AffineTransform shrinkTransform2 = 
      AffineTransform.getScaleInstance(.5,.5); 
     AffineTransform shrinkTransform4 = 
      AffineTransform.getScaleInstance(.25,.25); 

     final BufferedImage originalImage = new BufferedImage(
      260, 
      50, 
      BufferedImage.TYPE_INT_ARGB); 
     GradientPaint gp = new GradientPaint(
      0f,0f,Color.GRAY.brighter(), 
      0f,22f,Color.GRAY.brighter().brighter(),true); 
     Graphics2D g0 = originalImage.createGraphics(); 
     g0.setPaint(gp); 
     g0.fillRect(0,0,300,100); 

     int width = originalImage.getWidth(); 
     int height = originalImage.getHeight(); 

     final BufferedImage textImage = new BufferedImage(
      width, 
      height, 
      BufferedImage.TYPE_INT_ARGB); 

     Graphics2D g = textImage.createGraphics(); 

     FontRenderContext frc = g.getFontRenderContext(); 

     Font font1 = new Font(
      //"Wide Latin" 
      //"Pythagoras" 
      "Denmark" 
      ,0,48); 
     GlyphVector gv1 = font1.createGlyphVector(
      frc, "The quick brown fox.."); 
     Shape shape1 = gv1.getOutline(0,0); 
     int y = (int)shape1.getBounds().getHeight()+2; 
     Shape shapea = gv1.getOutline(6,y); 
     Area area1 = new Area(shapea); 
     Area area2nd = area1.createTransformedArea(shrinkTransform2); 
     Area area4th = area1.createTransformedArea(shrinkTransform4); 

     ImageIO.write(getImage(area1),"png",new File("text-image.png")); 
    } 
}