我想在不同宽度和高度的各种展示位置展示图片。
我正在使用一种方法进行裁剪并使用Sclar调整大小, 但我有两个问题:
无效的裁剪边界: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);
}
答案 0 :(得分:0)
在resize方法中,无论尺寸是多少,您总是在做FIT_TO_WIDTH。也许你应该做一些不同的事情,这取决于图像和所需的大小是纵向还是横向格式。你打算在这里实现什么目标?
而不是
y = (imageHeight - height) / 2;
使用
y = Math.abs((imageHeight - height) / 2);
确保y永远不会消极。对else块中的x执行相同的操作。