【发布时间】: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