1

このコードを使用して画像を回転させようとしています:

File imgPath = new File("c:\\tmp\\7.jpg");
BufferedImage src = ImageIO.read(imgPath);
AffineTransform tx = new  AffineTransform();

int width = src.getWidth();
int height = src.getHeight();
tx.rotate(radiant ,width, height);
AffineTransformOp op = new AffineTransformOp(tx, AffineTransformOp.TYPE_BICUBIC);
BufferedImage out = op.filter(src, null);

File outFile = new File("c:\\tmp\\out.jpg");
ImageIO.write(out, "jpg", outFile);

なぜか回転後の背景が真っ黒。背景を白または透明にするにはどうすればよいですか?

4

1 に答える 1

0

新しいイメージの作成に使用AffineTransformOp.filter(src, null)している場合、新しいイメージはColorModelソースイメージと同じものを使用します。

入力画像はjpegです。つまり、透明ではないため、宛先画像はアルファ(透明)レベルのないRGB画像です。

このような小さな角度で回転すると、画像がまったく同じ境界を占めることはなくなり、背景がエッジに表示されます。アルファレベルがないため、背景は通常黒です。

ただし、gifやpngなどの透明度をサポートする形式で保存すると、画像に黒い背景が表示されなくなります。

ImageIO.write(out, "gif", outFile);

完全なコード:

    try {
        File imgPath = new File("d:\\downloads\\about.jpg");
        BufferedImage src = ImageIO.read(imgPath);
        AffineTransform tx = new AffineTransform();

        int width = src.getWidth();
        int height = src.getHeight();
        tx.rotate(0.02050493823247637, width, height);
        AffineTransformOp op = new AffineTransformOp(tx, AffineTransformOp.TYPE_BICUBIC);
        BufferedImage out = op.filter(src, null);

        File outFile = new File("d:\\downloads\\about0.gif");
        ImageIO.write(out, "gif", outFile);
    } catch (Exception e) {
        e.printStackTrace();
    }

さらに詳しい情報とコツについては、これを見てください。

これがgifに回転した後の私の画像です: 回転後のgif画像

于 2012-10-09T11:49:22.487 に答える