调整图片大小以适合JLabel

28 java swing jlabel

我正在努力使照片适合JLabel.我希望将图片尺寸缩小到更适合我的Swing JPanel的尺寸.

我尝试使用setPreferredSize但它不起作用.

我想知道是否有一种简单的方法可以做到这一点?我应该为此目的缩放图像吗?

Gil*_*anc 61

大纲

以下是要遵循的步骤.

  • 将图片作为BufferedImage读取.
  • 将BufferedImage的大小调整为另一个大小与JLabel相同的BufferedImage.
  • 从调整大小的BufferedImage创建一个ImageIcon.

您不必设置JLabel的首选大小.将图像缩放到所需大小后,JLabel将采用ImageIcon的大小.

将图片作为BufferedImage读取

BufferedImage img = null;
try {
    img = ImageIO.read(new File("strawberry.jpg"));
} catch (IOException e) {
    e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)

调整BufferedImage的大小

Image dimg = img.getScaledInstance(label.getWidth(), label.getHeight(),
        Image.SCALE_SMOOTH);
Run Code Online (Sandbox Code Playgroud)

确保标签宽度和高度与原始图像宽度和高度的比例相同.换句话说,如果图片为600 x 900像素,则缩放为100 X 150.否则,图片将会失真.

创建一个ImageIcon

ImageIcon imageIcon = new ImageIcon(dimg);
Run Code Online (Sandbox Code Playgroud)

  • 当我尝试这个时,`img.getScaledInstance`结果无法分配给`BufferedImage`,因为它是一个`Image`对象.`label.width`和`label.height`也只是整数的占位符? (8认同)
  • 当您为宽度或高度传递负值时,`getScaledInstance`函数将保持图像的纵横比. (3认同)
  • 谢谢,这真的很有帮助. (2认同)

tir*_*irz 30

你可以尝试一下:

ImageIcon imageIcon = new ImageIcon(new ImageIcon("icon.png").getImage().getScaledInstance(20, 20, Image.SCALE_DEFAULT));
label.setIcon(imageIcon);
Run Code Online (Sandbox Code Playgroud)

或者在一行中:

label.setIcon(new ImageIcon(new ImageIcon("icon.png").getImage().getScaledInstance(20, 20, Image.SCALE_DEFAULT)));
Run Code Online (Sandbox Code Playgroud)

执行时间比File和ImageIO快得多.

我建议你在一个循环中比较两个解决方案.


小智 6

public static void main(String s[]) 
  {

    BufferedImage image = null;
    try 
    {
        image = ImageIO.read(new File("your image path"));

    } catch (Exception e) 
    {
        e.printStackTrace();
    }

    ImageIcon imageIcon = new ImageIcon(fitimage(image, label.getWidth(), label.getHeight()));
    jLabel1.setIcon(imageIcon);
}


private Image fitimage(Image img , int w , int h)
{
    BufferedImage resizedimage = new BufferedImage(w,h,BufferedImage.TYPE_INT_RGB);
    Graphics2D g2 = resizedimage.createGraphics();
    g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
    g2.drawImage(img, 0, 0,w,h,null);
    g2.dispose();
    return resizedimage;
}
Run Code Online (Sandbox Code Playgroud)


小智 6

使用 Java Swing 调整图像大小的最佳且简单的方法是:

jLabel.setIcon(new ImageIcon(new javax.swing.ImageIcon(getClass().getResource("/res/image.png")).getImage().getScaledInstance(200, 50, Image.SCALE_SMOOTH)));
Run Code Online (Sandbox Code Playgroud)

为了更好地显示,确定图像的实际高度和宽度并根据宽度/高度百分比调整大小