【问题标题】:Problems shearing BufferedImage with AffineTransform使用 AffineTransform 剪切 BufferedImage 的问题
【发布时间】:2017-05-10 19:30:16
【问题描述】:

我想用 Java 中的 AffineTransform 剪切我的图像。如果我这样做,我总是会得到黑色边界。

        for (File input : inputImages) {
        if (!input.getName().contains(".DS_Store")) {
            BufferedImage buffer = ImageIO.read(input);
            for (int i = 0; i <= 2; i++) {
                AffineTransform tx = new AffineTransform();
                tx.translate(buffer.getHeight() / 2, buffer.getWidth() / 2);
                tx.shear(0.3, 0);
                tx.translate(-buffer.getWidth() / 2, -buffer.getHeight() / 2);

                AffineTransformOp op = new AffineTransformOp(tx, AffineTransformOp.TYPE_BILINEAR);

                BufferedImage newImage = new BufferedImage(buffer.getHeight(), buffer.getWidth(), buffer.getType());
                op.filter(buffer, newImage);

                File output = new File("output/" + FilenameUtils.getBaseName(input.getName()) + i + ".png");
                ImageIO.write(newImage, "png", output);
            }
        }
    }

有没有办法避免这些黑色边界并获得白色或透明背景?

【问题讨论】:

  • 使用像BufferedImage.TYPE_ARGB 这样的图像类型,这样你就可以得到一个透明的图像
  • 如果我使用 TYPE_ARGB 我的输出图像是完全透明的

标签: java graphics2d


【解决方案1】:

使用BufferedImage.TYPE_INT_ARGB作为图片类型创建透明图片

如果我使用 TYPE_ARGB,我的输出图像是完全透明的

效果更佳

BufferedImage buffer = ImageIO.read(...);
AffineTransform tx = new AffineTransform();
tx.translate(buffer.getHeight() / 2, buffer.getWidth() / 2);
tx.shear(0.3, 0);
tx.translate(-buffer.getWidth() / 2, -buffer.getHeight() / 2);

AffineTransformOp op = new AffineTransformOp(tx, AffineTransformOp.TYPE_BILINEAR);

BufferedImage newImage = new BufferedImage(buffer.getHeight(), buffer.getWidth(), BufferedImage.TYPE_INT_ARGB);
op.filter(buffer, newImage);

JOptionPane.showMessageDialog(null, new JLabel(new ImageIcon(newImage)));

如果您愿意,可以使用默认颜色填充 newImage

【讨论】:

  • 谢谢,它有效。你知道我怎样才能实现剪切的图像不会在各个角落被切断吗?
  • 不是我的头顶
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-30
  • 2023-03-03
  • 1970-01-01
  • 1970-01-01
  • 2013-02-28
  • 1970-01-01
相关资源
最近更新 更多