2

我想在各种不同宽度和高度的展示位置显示图像。

我正在使用 Sclar 裁剪和调整大小的方法,但我有两个问题:

  1. 在某些情况下,结果看起来不太好。我认为这是因为代码中的图像首先被缩放。
  2. 在其他情况下我得到一个例外。例如:

无效的裁剪边界:x [32]、y [-1]、宽度 [64] 和高度 [64] 都必须 >= 0

将裁剪和图像调整为某个目标宽度和高度的最佳方法是什么?

这是我目前的方法:

  public static BufferedImage resizeAndCropToCenter(BufferedImage image, int width, int height) {
    image = Scalr.resize(image, Scalr.Method.QUALITY, Scalr.Mode.FIT_TO_WIDTH,
        width * 2, height * 2, Scalr.OP_ANTIALIAS);

    int x, y;

    int imageWidth = image.getWidth();
    int imageHeight = image.getHeight();

    if (imageWidth > imageHeight) {
      x = width / 2;
      y = (imageHeight - height) / 2;
    } else {
      x = (imageWidth - width) / 2;
      y = height / 2;
    }


    return Scalr.crop(image, x, y, width, height);
  }
4

1 回答 1

0
  1. 在 resize 方法中,无论尺寸是多少,您总是在做 FIT_TO_WIDTH。也许您应该根据图像和所需尺寸是纵向还是横向格式来做一些不同的事情。你在这里的目标是什么?

  2. 代替

    y = (imageHeight - height) / 2;
    

利用

y = Math.abs((imageHeight - height) / 2);

确保 y 永远不会是负数。对 else 块中的 x 执行相同的操作。

于 2016-03-08T01:15:59.647 回答