Scalr调整大小并裁剪为

时间:2015-09-05 16:45:43

标签: image-resizing resize-crop imgscalr

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

我正在使用一种方法进行裁剪并使用Sclar调整大小, 但我有两个问题:

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

    无效的裁剪边界:x [32],y [-1],width [64]和height [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);
      }
    

1 个答案:

答案 0 :(得分:0)

  1. 在resize方法中,无论尺寸是多少,您总是在做FIT_TO_WIDTH。也许你应该做一些不同的事情,这取决于图像和所需的大小是纵向还是横向格式。你打算在这里实现什么目标?

  2. 而不是

    y = (imageHeight - height) / 2;
    
  3. 使用

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

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