Wenn Sie die Größe von BufferedImages ändern und in einer Datei speichern, wird der Hintergrund für JPG-Bilder schwarz

Ich habe folgenden Code:

import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;


public class JavaApplication
{
    public static void main(String[] args) throws Exception
    {
        File orig = new File ("/home/xxx/Pictures/xxx.jpg");
        BufferedImage bm1 = ImageIO.read(orig);

        Image scaled = bm1.getScaledInstance(100, 200, BufferedImage.SCALE_SMOOTH);
        BufferedImage bm2 = toBufferedImage(scaled);

        File resized = new File ("/home/xxx/Pictures/resized.jpg");
        ImageIO.write(bm2, "jpg", resized);
    }

    public static BufferedImage toBufferedImage(Image img)
    {
        if (img instanceof BufferedImage)
        {
            return (BufferedImage) img;
        }

        BufferedImage bimage = new BufferedImage(img.getWidth(null),       img.getHeight(null), BufferedImage.TYPE_INT_ARGB);

        bimage.getGraphics().drawImage(img, 0, 0 , null);
        return bimage;
      }
}

Wenn ich diesen Code für eine PNG-Datei verwende, funktioniert er einwandfrei und ändert die Größe der Datei wie erwartet. Bei JPG-Dateien führt dies jedoch zu einem schwarzen Hintergrund.

Wenn ich das entfernegetScaledInstance() Code und versuchen Sie einfach, das Original neu zu schreibenbm1 auf die Festplatte mitImageIO.write(bm1, "jpg", resized)Das funktioniert gut. Nur bei Größenänderung mitgetScaledInstance() und dann versuchen, das Ergebnis zu konvergierenImage zurück zuBufferedImagebekomme ich eine komplett schwarze hintergrunddatei.

Irgendwelche Ideen, wie man das behebt oder was ich falsch mache?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage