I am using JLabel文字列から画像ファイルを作成する。JLabelで作成した画像の「ネイティブサイズ」を取得する
Iは、そうでなければ、私は例外を取得し、画像の大きさ(label.setSize(width, height)
)を指定する必要があります
java.lang.IllegalArgumentException: Width (0) and height (0) cannot be <= 0
at java.awt.image.DirectColorModel.createCompatibleWritableRaster(DirectColorModel.java:1016)
at java.awt.image.BufferedImage.<init>(BufferedImage.java:338)
at com.shopsnips.portal.services.ImageCreator.createFromText(ImageCreator.java:31)
at com.shopsnips.portal.services.ImageCreator.main(ImageCreator.java:18)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)
私はそのフォント又はテキストを使用する場合、私は
label.setFont(new Font("Serif", Font.BOLD, 26));
を使用してフォントサイズを制御することができます。固定ディメンションに収まるには大きすぎますが、ラベルは切り捨てられ、代わりに「...」が含まれます。設定した寸法に適合する最適/最大フォントサイズを特定する方法はありますか?
また、現在の設定(フォントサイズ+寸法)によってテキストが切り捨てられるかどうかを確認するにはどうすればよいですか?ここで
は、いくつかのソースです:
import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.nio.file.Path;
import java.nio.file.Paths;
public class ImageCreator {
private ImageCreator(){}
private final static String FONT = "Freestyle Script";
public static void main(String[] args) {
Path outputFile = Paths.get("c:\\tmp\\img\\test.png");
createFromText("Hello World - this is a long text", outputFile, 150, 50);
}
/**
* <p>Create an image from text. <p/>
* <p/>
* https://stackoverflow.com/a/4437998/11236
*/
public static void createFromText(String text, Path outputFile, int width, int height) {
JLabel label = new JLabel(text, SwingConstants.CENTER);
label.setSize(width, height);
label.setFont(new Font(FONT, Font.BOLD, 24));
BufferedImage image = new BufferedImage(
label.getWidth(), label.getHeight(),
BufferedImage.TYPE_INT_ARGB);
Graphics g = null;
try {
// paint the html to an image
g = image.getGraphics();
g.setColor(Color.BLACK);
label.paint(g);
} finally {
if (g != null) {
g.dispose();
}
}
// get the byte array of the image (as jpeg)
try {
ImageIO.write(image, "png", outputFile.toFile());
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
コメントするにはログインしてください。
私は私がリンクされ、ポストを使用しています:
代わりに、私はフォントサイズを選択するには、このヒューリスティックを使用していました。自分のコードを投稿することができます。それは非常に非常に近いです。次元の設定を省略してください。 – ripper234
あなたのSSCCEはここにあります。明日の仕事であなたの答えを試してみます。 https://gist.github.com/1665287 – ripper234
1)「SSCCE」か「SSCCEではない」のどちらかで、「閉じる」という賞はありません。 2)人々は通常、ギブスのような外部サイトへのリンクをたどることはありません。ソースを編集の質問に埋め込む方がよい。私はそれをしました。 –