I am using JLabel으로 만든 이미지의 "기본 크기"를 가져 와서 문자열에서 이미지 파일을 만듭니다.JLabel
I 달리 I 예외 얻을, 화상 사이즈 (label.setSize(width, height)
)를 지정할 수있다 : I는 폰트 또는 문자를 사용하는 경우
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);
}
}
}
언급하려면 로그인하세요 : 여기
는 일부 소스입니다.
을에 ... 그것은 꽤 많이 SSCCE입니다. 나는 내 자신의 코드를 게시 할 수 있으며, 매우 아주 가깝다. 크기 설정을 생략하면됩니다. – ripper234
그리고 여기 SSCCE가 있습니다. 나는 내일 직장에서 당신의 대답을 시험해 볼 것입니다. https://gist.github.com/1665287 – ripper234
1) 'SSCCE'또는 '** SSCCE가 아님 **', '가까운'상을 수여 할 수 없습니다. 2) 사람들은 보통 github과 같은 외부 사이트에 대한 링크를 따르지 않습니다. 질문을 소스로 포함시키는 것이 좋습니다. 나는 그것을했다. –