我需要将很多图像的比例从(2:3)调整为(3:4)。
图像当前为800像素x 1200像素。我最终必须将它们设置为600px x 800px,而无需进行任何裁剪。
我可以知道哪些可用的库进行填充和调整大小而无需在Java中裁剪吗?
答案 0 :(得分:0)
从当前图像(假设为java.awt.Image
)中,您可以使用:
Image.getScaledInstance(w,h,h)
作为方法Image.SCALE_SMOOTH
作为调整大小的算法这些步骤:
width
和height
中的比率width
和height
以获得缩放后的图像static BufferedImage pad(BufferedImage image, double width, double height, Color pad) {
double ratioW = image.getWidth() / width;
double ratioH = image.getHeight() / height;
double newWidth = width, newHeight = height;
int fitW = 0, fitH = 0;
BufferedImage resultImage;
Image resize;
//padding width
if (ratioW < ratioH) {
newWidth = image.getWidth() / ratioH;
newHeight = image.getHeight() / ratioH;
fitW = (int) ((width - newWidth) / 2.0);
}//padding height
else if (ratioH < ratioW) {
newWidth = image.getWidth() / ratioW;
newHeight = image.getHeight() / ratioW;
fitH = (int) ((height - newHeight) / 2.0);
}
resize = image.getScaledInstance((int) newWidth, (int) newHeight, Image.SCALE_SMOOTH);
resultImage = new BufferedImage((int) width, (int) height, image.getType());
Graphics g = resultImage.getGraphics();
g.setColor(pad);
g.fillRect(0, 0, (int) width, (int) height);
g.drawImage(resize, fitW, fitH, null);
g.dispose();
return resultImage;
}
用作
BufferedImage image = ...;
BufferedImage result = pad(image, 600, 800, Color.white);
答案 1 :(得分:0)
我认为ffmpeg可以帮助您处理图像。 例如Use ffmpeg to resize image
答案 2 :(得分:0)
使用以下代码成功做到了: “ w”是您需要在每一侧填充的数量。
SBDBaseMessage