java中BufferedImage的迷惑坐标系

文章讨论了在Java中使用BufferedImage处理图片时遇到的坐标系问题,特别是在添加水印的过程中,需要考虑到坐标方向与预期不同的情况。作者提供了代码示例,说明如何根据源图尺寸调整水印的大小,并使用Thumbnails库进行缩放和添加水印操作,同时强调了不同工具类间坐标系统的一致性问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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));
        //这里BufferedImage坐标系与Thumbnails坐标系x,y相反,所以要反取宽高
        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的坐标系独具一格,宽高读出来是反的,开发的时候不同工具类操作图片的时候一定要注意坐标系问题!!!
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值