BufferedImage坐标系问题
- 操作源图:

- 我尝试图片上添加水印,由于像素大小不同,所以加水印前需要将水印的像素大小根据被加水印的源图的像素调整:
public static void imgWatermark(String inFilePath, String waterMarkFilePath, String position, float scale, float opacity, OutputStream out) throws IOException {
Thumbnails.Builder<File> builder = Thumbnails.of(new File(inFilePath));
BufferedImage inFileImg = ImageIO.read(new File(inFilePath));
System.out.println("源图:宽:" + inFileImg.getWidth() + " 高:" + inFileImg.getHeight());
BufferedImage waterMarkImg = ImageIO.read(new File(waterMarkFilePath));
float waterMarkWidth = inFileImg.getHeight() * scale;
float waterMarkHeight = waterMarkImg.getWidth() * (waterMarkWidth/waterMarkImg.getHeight());
BufferedImage resizedWaterMark = Thumbnails.of(new File(waterMarkFilePath)).size((int) waterMarkWidth, (int) waterMarkHeight).outputQuality(1.0F).asBufferedImage();
builder.outputQuality(1.0F).scale(1.0F).watermark(getPositions(position), resizedWaterMark, opacity).toOutputStream(out);
}
- BufferedImage:

- 总结: BufferedImage的坐标系独具一格,宽高读出来是反的,开发的时候不同工具类操作图片的时候一定要注意坐标系问题!!!