gpt4 book ai didi

java - 获取使用 JLabel 创建的图像的 "native size"

转载 作者:行者123 更新时间:2023-11-29 03:50:36 27 4
gpt4 key购买 nike

I am using JLabel从字符串创建图像文件。

我必须指定图像尺寸 (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);
}
}
}

请登录后发表评论。

最佳答案

1) 将BuferedImage 设为IconJLabel ,

2) 不要setSize让这个作业为LayoutManager

3) @Jeffrey 的回答太接近正确答案,BuferedImage 如果存在可以返回两个维度

4) 为了尽快获得更好的帮助,请发布 SSCCE ,因为我/我们在您的监视器上看不到代码,也看不到您的 Java 类生成的异常

关于java - 获取使用 JLabel 创建的图像的 "native size",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8976003/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com