如何在 Java 中从 JPEG 创建缩略图?

新手上路,请多包涵

有人可以帮忙提供一些代码,用于在 Java 中为 JPEG 创建缩略图。

我是新来的,所以一步一步的解释将不胜感激。

原文由 mmmmr 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 379
1 个回答
Image img = ImageIO.read(new File("test.jpg")).getScaledInstance(100, 100, BufferedImage.SCALE_SMOOTH);

这将创建一个 100x100 像素的缩略图作为图像对象。如果您想将其写回磁盘,只需将代码转换为:

 BufferedImage img = new BufferedImage(100, 100, BufferedImage.TYPE_INT_RGB);
img.createGraphics().drawImage(ImageIO.read(new File("test.jpg")).getScaledInstance(100, 100, Image.SCALE_SMOOTH),0,0,null);
ImageIO.write(img, "jpg", new File("test_thumb.jpg"));

此外,如果您担心速度问题(如果您想缩放许多图像,上述方法相当慢),请使用这些方法和以下声明:

 private BufferedImage scale(BufferedImage source,double ratio) {
  int w = (int) (source.getWidth() * ratio);
  int h = (int) (source.getHeight() * ratio);
  BufferedImage bi = getCompatibleImage(w, h);
  Graphics2D g2d = bi.createGraphics();
  double xScale = (double) w / source.getWidth();
  double yScale = (double) h / source.getHeight();
  AffineTransform at = AffineTransform.getScaleInstance(xScale,yScale);
  g2d.drawRenderedImage(source, at);
  g2d.dispose();
  return bi;
}

private BufferedImage getCompatibleImage(int w, int h) {
  GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
  GraphicsDevice gd = ge.getDefaultScreenDevice();
  GraphicsConfiguration gc = gd.getDefaultConfiguration();
  BufferedImage image = gc.createCompatibleImage(w, h);
  return image;
}

然后打电话:

 BufferedImage scaled = scale(img,0.5);

其中 0.5 是缩放比例,img 是包含正常大小图像的 BufferedImage。

原文由 Savvas Dalkitsis 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题